Android 故障排除
解决 Throne for Android 的常见问题:VPN 无法启动或没有流量、在后台被停止,以及订阅和路由错误。
找到你看到的消息或症状,然后按照相应步骤操作。消息按应用简体中文界面的显示引用;应用中尚未翻译的消息保留英文原文,并在括号中附上中文译文。有关 Throne 桌面版的问题,请参见故障排除。
VPN 无法启动或没有流量
启动失败时,Throne 会在屏幕底部的提示条中显示原因,并附带 日志(Logs)按钮。该消息会一直显示,直到你将其滑走、点按 日志 或再次启动。
“VPN 服务权限请求被拒绝”
Android 没有授予 Throne VPN 权限。通常是你拒绝了请求。当另一个 VPN 应用被设为始终开启的 VPN 时,Android 也会不经询问直接拒绝。
- 再次点按连接按钮,并允许请求。
- 如果没有出现请求,请打开 Android 的 VPN 设置,为另一个应用关闭始终开启的 VPN。
- 如果 Throne 显示“VPN confirmation unavailable”(VPN 确认界面不可用),说明你的设备没有用于此请求的界面。参见 VPN 权限。
Android 拒绝创建 VPN
Android 授予了权限,但随后拒绝创建 VPN 接口。此时“失败: …”消息中通常包含“configure tun interface”(配置 TUN 接口)。
- 断开其他 VPN 应用,并在 Android 的 VPN 设置中确认它们都没有被设为始终开启的 VPN。
- 重启设备并重新连接。
连接时出现的其他消息
| 消息 | 原因 | 解决方法 |
|---|---|---|
| “请选择一个服务器配置” | 没有选择配置。 | 点按一个配置,然后连接。 |
| “失败: Profile … has a type this build cannot use: …”(配置 … 的类型在此版本中无法使用:…) | 该配置类型仅存在于桌面版,例如 Tailscale 或额外核心(Extra Core)。 | 使用其他配置。参见下文。 |
| 与路由或 WARP 有关的消息 | 路由配置或 WARP 设置中存在问题。 | 参见路由错误和 WARP 错误。 |
| 其他任何“失败: …”消息 | 核心报告了错误。 | 点按 日志(Logs),阅读最后几行。 |
已连接,但无法加载任何内容
- 点按屏幕底部的横栏。“连接成功: HTTP 握手耗时 …ms”表示该配置可用。“失败: …”表示该配置或其服务器不可用。
- 如果测试失败,请点按 ⋮ →
URL test,然后选择一个可用的配置。参见测试与自动选择器。 - 检查分应用代理:打开
设置(Settings)→TUN / VPN→分应用代理(Apps VPN mode)查看应用列表。选择代理(Proxy)时,只有所选应用使用 VPN;选择绕过(Bypass)时,所选应用不使用 VPN。如果没有选择任何应用,所有应用都会使用 VPN。参见分应用代理。 - 通过 ⋮ →
Routing profile切换到Default路由配置,然后再次测试。如果现在可以正常工作,问题出在你自己的路由配置中的某条规则。参见路由。 - 检查 DNS:
设置→DNS→远程 DNS(Remote DNS),默认为https://8.8.8.8/dns-query。请尝试其他服务器。参见 DNS。 - 如果你在
设置→TUN / VPN中开启了Tun IPv6或Tun routing,请关闭它们后再次测试。仅当你的服务器支持 IPv6 时才使用Tun IPv6。如果某些应用或网站无法访问而其他的正常,请在同一界面中将MTU设为1500并重新连接。 - 要确定问题是否由 VPN 模式引起,请将
设置→General→运行模式(Service mode)设为仅代理(Proxy only)并连接。然后在一个自带代理设置的应用中,将代理设为 SOCKS5 代理127.0.0.1、端口2080(参见设置→Inbound→代理端口(Proxy port))。如果该应用可以正常工作,请切换回VPN模式,并尝试其他TUN 实现(TUN implementation)。参见 VPN 与代理模式。
Throne 关闭时无法上网
Android 的“始终开启的 VPN”与“屏蔽未使用 VPN 的所有连接”(Block connections without VPN)同时处于开启状态。此时只要 Throne 未连接,Android 就会阻止所有流量。请使用可用的配置连接 Throne,或在 Android 的 VPN 设置中关闭该选项。参见始终开启的 VPN。
断开连接后某些应用无法上网
设置(Settings)→ DNS → 启用 FakeDNS(Enable FakeDNS)会为应用提供只能通过 Throne 使用的虚假地址。Throne 会对此发出警告:“可能导致其他应用程序在代理停止后需要重新启动以重新连接到网络”。请重启这些应用,或关闭 启用 FakeDNS。
Throne 在后台被停止
典型迹象:屏幕关闭时 VPN 断开、通知消失、解锁手机后连接不再工作,或者通知或小部件上的按钮没有反应。
- 打开
设置(Settings)→General→Battery optimization。它必须显示“Unrestricted”(不受限制)。如果不是,请点按它,并允许 Throne 不受限制地运行。参见电池优化。 - 打开
设置→General→Background & auto-start。允许 Throne 自动启动并在后台运行。参见厂商设置。 - 保持
当设备从睡眠状态唤醒时重置出站连接(Reset outbound connections when device wakes from sleep)开启(默认)。设备从深度睡眠中唤醒时,Throne 会关闭旧连接,应用随后重新连接。同时也请保持当网络发生变化时重置出站连接(Reset outbound connections when network changes)开启。 - 启用始终开启的 VPN,让 Android 自行重新启动 Throne。参见始终开启的 VPN。
- 在某些设备上,在最近任务列表中划掉 Throne 会停止它。请将它保留在列表中;如果设备支持,也可以将它锁定在列表中。
订阅问题
手动更新订阅时,错误会显示在屏幕底部,格式为分组名称后跟消息。自动更新只会将错误写入 日志(Logs)。
| 消息 | 原因 | 解决方法 |
|---|---|---|
| “Request with proxy but no profile started.”(请求需要经过代理,但没有启动任何配置。) | 设置(Settings)→ 订阅(Subscriptions)中开启了 Use proxy,或运行模式为 仅代理(Proxy only),而 Throne 未连接。 |
先连接。在 VPN 模式下,你也可以关闭 Use proxy。 |
| “Error transferring … - server replied: …”(传输 … 时出错,服务器回复:…) | 服务器拒绝了请求,例如返回 403 或 404。 | 检查 URL。许多服务商只接受部分应用:请设置服务商指定的 User-Agent,或开启 HWID 发送。 |
| “No profiles found in the subscription; it was left unchanged.”(订阅中未找到配置,订阅保持不变。) | 返回内容中没有 Throne 能读取的配置,例如返回的是一个网页。 | 通常同样是 User-Agent 或 HWID 的问题。另请检查导入格式。 |
| “Insecure redirect”(不安全的重定向) | 服务器将 https:// URL 重定向到了 http://。Throne 不会跟随这类重定向。 |
向服务商索取正确的 https:// URL。 |
| “Too many redirects”(重定向次数过多) | 服务器进行了循环重定向。 | 与服务商核对 URL。 |
| “Response larger than 64 MB”(响应大于 64 MB) | 订阅过大。 | 向服务商索取更小的列表。 |
| “Still in use, so kept instead of deleted”(仍在使用,因此已保留而未删除)或“The running profile was kept.”(正在运行的配置已保留。) | 此次更新或其后的某个清理选项本会移除你正在连接的配置,因此 Throne 保留了它。你会在变更报告或 日志 中看到这条消息。 |
无需处理。如果仍要移除它,请在 设置 → 订阅 中开启 Allow stopping the active profile。 |
要为单个分组更改 User-Agent 或 HWID,请在侧边菜单中打开 分组(Groups),点按该分组的 编辑(Edit)按钮,然后打开 Advanced。其中有 User agent 和 Send HWID。适用于所有分组的设置位于 设置(Settings)→ 订阅(Subscriptions)。参见 User-Agent 与 HWID。
服务商只接受来自你自己网络连接的更新
Throne 连接期间,它自己的请求(例如订阅更新)也会经过 Throne,并遵循你的路由配置。有些服务商只接受来自你自己网络连接的更新请求。请添加一条将订阅域名发往 direct 的规则:
- 在侧边菜单中打开
路由(Routing)。打开当前路由配置的菜单,选择编辑(Edit)。 - 选择
Add rule。 - 将
Outbound设为direct。在Domain suffix中输入订阅 URL 的主机名,例如sub.example.com。 - 保存该规则和路由配置。把该规则放在匹配同一域名的其他规则之上。
如果服务商要求请求来自其某台服务器,请改为选择该服务器作为 Outbound。
路由错误
| 消息 | 原因 | 解决方法 |
|---|---|---|
| “The routing profile is referencing outbounds that no longer exist, consider revising your settings”(路由配置引用了已不存在的出站,请检查你的设置) | 某条规则把流量发往一个已被删除的服务器配置,例如被订阅更新删除。 | 打开该路由配置(路由(Routing)→ 其菜单 → 编辑(Edit))。引用已删除服务器的规则会显示“Missing server (#…)”(缺少服务器)。请选择其他出站。 |
| “Unknown rule-set "…" in rule "…" of routing profile "…"”(路由配置“…”的规则“…”中有未知的规则集“…”) | 某条规则使用了 Throne 不认识的规则集名称。 | 在 路由 中点按 Refresh repository list,或使用 .srs 文件的 URL。 |
| “The rule-set list is not available. …”(规则集列表不可用。…) | 规则集名称列表尚未下载。 | 在 路由 中点按 Refresh repository list。 |
| “raw routing profiles are not supported on Android”(Android 不支持原始路由配置) | 你导入了来自 Throne 桌面版的原始(raw)路由配置。 | 使用结构化路由配置或远程路由配置。 |
WARP 错误
| 消息 | 原因 | 解决方法 |
|---|---|---|
| “WARP is enabled but its config has not been generated. Generate it in Settings › Routing › WARP.”(WARP 已启用,但尚未生成其配置。请在“设置 › Routing › WARP”中生成。) | WARP 已开启,但所选模式没有 WARP 配置。 | 打开 设置(Settings)→ Routing → WARP,点按 生成配置(Generate WARP config)。 |
| “失败: Warp is enabled but its config has not been generated. Please generate the Warp config first in Routing Settings.”(Warp 已启用,但尚未生成其配置。请先在路由设置中生成 Warp 配置。) | 同一问题,在连接时显示。 | 同上。 |
| “Failed to generate WARP config”(生成 WARP 配置失败) | 在 Cloudflare 注册失败。某些网络会阻止注册。 | 连接到一个可用的配置,在 设置 → 订阅(Subscriptions)中开启 Use proxy,然后重新生成。 |
| 没有消息,但开启 WARP 时无法加载任何内容 | 在 WireGuard 模式下,WARP 需要一个能转发 UDP 的配置。 |
将 Mode 设为 MASQUE,将 HTTP version 设为 HTTP/2,这样只需要 TCP。为新模式生成配置。 |
参见 Cloudflare WARP。
更新问题
- “The download is signed with a different key than this build, so Android cannot install it as an update. Back up, uninstall this build and install the release from GitHub.”(下载的文件与当前版本的签名密钥不同,因此 Android 无法将其作为更新安装。请先备份,卸载当前版本,然后安装 GitHub 上的正式版本。)你的副本不是用 Throne 发布密钥签名的。请创建备份(侧边菜单 →
工具(Tools)→Create backup),卸载 Throne,安装 GitHub 上的 APK,然后恢复备份。 - “This update cannot be installed from the app (…). Download it from the release page.”(此更新无法在应用内安装(…)。请从发布页面下载。)点按
Open in browser,下载适用于你设备的 APK,并将其覆盖安装到当前应用之上。 - “Could not check for updates”(无法检查更新):Throne 无法访问 GitHub。请连接到一个可用的配置后重试。
- Android 不会在旧版 Throne for Android 之上安装 2.0.0。参见从 1.x 或 NekoBox 升级。
配置在桌面版上可用,但在 Android 上不可用
- 检查配置类型。Tailscale 和额外核心(Extra Core)配置无法在 Android 上工作。TLS 伪装设置在 Android 上会被忽略。
- 比较会影响配置连接方式的设置:
设置(Settings)→Presets中的预设(多路复用、TLS 分片、TLS 技巧、uTLS),以及设置→Core→Xray VLESS preference。VLESS 首选项在导入配置时生效,因此更改后请重新更新订阅。参见 sing-box 与 Xray。 - 要获得与桌面版相同的设置,请恢复桌面版备份。参见在桌面版与 Android 之间迁移。
- 如果仍然失败,请附上两个应用的日志报告问题。
日志
在侧边菜单中打开 日志(Logs)。它显示核心的日志。工具栏中有 更新(Update),用于重新加载视图,以及 Share logs 和 清空日志(Clear logs)。菜单中有 Save logs…、Hide sensitive data 和 Hide destinations。
Share logs 和 Save logs… 会创建一个文本文件,其中包含:
- 文件头,包括应用和核心的版本、Android 版本、设备型号、ABI、运行模式以及一些不包含机密信息的设置;
- 核心日志,以及上一次连接的核心日志;
- 应用系统日志的最后 2000 行。
Hide sensitive data 默认开启,请保持开启。在导出的文件中,它会替换:
- 每个 URL 的路径和查询部分,以及 URL 中的用户名和密码(主机名保留);
- 密码、密钥、令牌、UUID 以及类似的值;
- 配置中的服务器地址、SNI 和主机名;
- 公网 IP 地址(私有地址保留);
- Wi-Fi 名称。
Hide destinations 还会隐藏连接日志行和 DNS 日志行中的域名。只有在 Hide sensitive data 开启时才能开启它,并且应用重启后 Throne 不会保留该设置。隐藏只是尽力而为:发布文件之前,请先自己读一遍。
如需更详细的信息,请将 设置(Settings)→ Core → 日志级别(Log level)设为 info 或 debug,然后点按 应用(Apply)重启应用。重现问题后分享日志。之后请将级别改回 warn。
崩溃后,Throne 会重新启动,并提示你分享一份已隐藏敏感数据的日志文件。
报告问题
请在 github.com/throneproj/ThroneForAndroid/issues 报告 Android 应用的问题。请附上:
- 你做了什么、预期结果是什么,以及实际发生了什么;
- 通过
Share logs或Save logs…生成的日志文件,并开启Hide sensitive data; - 配置类型(例如使用 REALITY 的 VLESS)和运行模式。
日志文件中已经包含应用版本、核心版本和设备型号。一般性建议请参见报告 Bug。