Skip to content

Commit ca992f0

Browse files
committed
feat: Suspend custom server DNS functionality; remove the corresponding UI entry point while retaining the original code for future restoration.
1 parent 12f9951 commit ca992f0

2 files changed

Lines changed: 14 additions & 3 deletions

File tree

REPO_SCHEMA.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Android 端的代码主要分为两个核心包:
3030
- `SagerDatabase.kt`: Room 数据库定义,存储代理配置、分组、规则等。
3131
- `ProfileManager.kt` / `GroupManager.kt`: 配置和分组管理器。
3232
- [`io/nekohasekai/sagernet/fmt/`](app/src/main/java/io/nekohasekai/sagernet/fmt): 各种代理协议的配置格式化与解析。`ConfigBuilder.kt` 生成 sing-box 配置,已对齐官方 v1.13 schema:入站 sniff/解析目标地址迁移为路由规则动作(`sniff`/`resolve`,置于规则最前);tun 地址用合并字段 `address``inet4_address`/`endpoint_independent_nat` 等 legacy 字段已弃用);「双网络加速」设置(`dualNetworkAcceleration`,原误名 `concurrent_dial`——"并发拨号"实为 singbox-p 社区版概念,与官核无关)映射为 `default_network_strategy: "hybrid"`;DNS 地址归一化:dns-direct/订阅 resolver 的 `hosts` 视为 `local`(本机直解,语义正确),远程 DNS 的 `hosts`/`local`/`localhost`/`fakeip` 占位符一律回退为 `https://8.8.8.8/dns-query` 并 Toast 提示用户修改设置(本机直解用作远程即 DNS 泄露),且 dns-remote 显式 `detour`=当前节点(对齐 Throne 桌面端 `detour:"proxy"`)。
33-
- **自定义服务器 DNS 暂停开放(未来潜在 TODO)**:Throne 桌面端目前尚未正式支持该功能,Android 端已移除订阅设置中的 `server_dns` 界面入口,数据库字段与既有配置生成逻辑暂时保留以兼容历史数据,但不继续修复。已确认的待办包括:①订阅「强制解析」仍由 Android 底层网络/系统 DNS 执行,不读取该订阅的自定义服务器 DNS;②批量 URL Test 的隔离配置会跳过订阅自定义服务器 DNS 并固定使用 `dns-direct`,因此依赖该 DNS 才能解析服务器域名的节点可能测速失败,而连接后复用正式 box 的单次测试可成功。待 Throne 上游正式支持并明确配置语义后,再统一恢复入口并对齐强制解析、批量测速和正式连接三条路径。
33+
- **自定义服务器 DNS 暂停开放(未来潜在 TODO)**:Throne 桌面端目前尚未正式支持该功能,Android 端已移除订阅设置中的 `server_dns` 界面入口,并同步停用 `GroupSettingsActivity` 中对应的 UI 缓存读写、Preference 查找/监听与输入校验;原代码以注释保留,数据库字段与既有配置生成逻辑继续保留以兼容历史数据,但不继续修复。已确认的待办包括:①订阅「强制解析」仍由 Android 底层网络/系统 DNS 执行,不读取该订阅的自定义服务器 DNS;②批量 URL Test 的隔离配置会跳过订阅自定义服务器 DNS并固定使用 `dns-direct`,因此依赖该 DNS 才能解析服务器域名的节点可能测速失败,而连接后复用正式 box 的单次测试可成功。待 Throne 上游正式支持并明确配置语义后,再统一恢复入口、UI 绑定并对齐强制解析、批量测速和正式连接三条路径。
3434
- AnyTLS outbound 的 `tls.insecure` 同时合并节点「允许不安全连接」与全局「总是跳过 TLS 证书验证」,与 V2Ray/TUIC/Hysteria/Juicity 等 TLS 协议保持一致。
3535
- debug 级别输出脱敏的 `Outbound chain ... appToEgress=` 链拓扑摘要,仅含实体 ID、协议类型与服务器端点,不含 UUID、密码、Reality 公钥或其他认证材料,用于区分链式代理 EOF 发生在哪一跳。
3636
- 支持 Shadowsocks, VMess, Trojan, Hysteria, Juicity, Naive, WireGuard 等协议的配置解析与转换。

app/src/main/java/io/nekohasekai/sagernet/ui/GroupSettingsActivity.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ class GroupSettingsActivity(
6666
DataStore.subscriptionAutoUpdateDelay = subscription.autoUpdateDelay
6767
DataStore.subscriptionFilterMode = subscription.filterMode
6868
DataStore.subscriptionFilterRegex = subscription.filterRegex
69-
DataStore.subscriptionServerDns = subscription.serverDnsResolver ?: ""
69+
// Throne upstream 尚未支持自定义服务器 DNS,入口停用期间不再加载其 UI 缓存。
70+
// 保留原代码以便未来恢复功能:
71+
// DataStore.subscriptionServerDns = subscription.serverDnsResolver ?: ""
7072
}
7173

7274
fun ProxyGroup.serialize() {
@@ -100,7 +102,9 @@ class GroupSettingsActivity(
100102
autoUpdateDelay = DataStore.subscriptionAutoUpdateDelay
101103
filterMode = DataStore.subscriptionFilterMode
102104
filterRegex = DataStore.subscriptionFilterRegex
103-
serverDnsResolver = DataStore.subscriptionServerDns
105+
// 入口停用期间不要用未展示的 UI 缓存覆盖历史数据库值。
106+
// 保留原代码以便未来恢复功能:
107+
// serverDnsResolver = DataStore.subscriptionServerDns
104108
}
105109
}
106110
}
@@ -210,6 +214,10 @@ class GroupSettingsActivity(
210214
true
211215
}
212216

217+
// Throne upstream 尚未支持自定义服务器 DNS,XML 入口及对应监听同步停用。
218+
// 若仅移除 XML 而继续强制查找 Preference,findPreference() 会返回 null,
219+
// 随后的 !! 会使整个设置页进入 createPreferences 异常处理。
220+
/* 保留原代码以便未来恢复功能:
213221
val subscriptionServerDns =
214222
findPreference<EditTextPreference>(Key.SUBSCRIPTION_SERVER_DNS)!!
215223
subscriptionServerDns.setOnPreferenceChangeListener { pref, newValue ->
@@ -230,6 +238,7 @@ class GroupSettingsActivity(
230238
false
231239
}
232240
}
241+
*/
233242
}
234243

235244
class UnsavedChangesDialogFragment : AlertDialogFragment<Empty, Empty>() {
@@ -471,6 +480,7 @@ class GroupSettingsActivity(
471480

472481
}
473482

483+
/* 自定义服务器 DNS 的 UI 恢复时一并恢复此校验函数。
474484
private fun isValidServerDns(raw: String): Boolean {
475485
val value = raw.trim()
476486
if (value.isEmpty()) return true
@@ -488,3 +498,4 @@ private fun isValidServerDns(raw: String): Boolean {
488498
val host = value.substringBeforeLast(":").trim('[', ']')
489499
return host.isNotEmpty()
490500
}
501+
*/

0 commit comments

Comments
 (0)