Android Troubleshooting
Fix common problems in Throne for Android.
Find the message or symptom you see. Messages are quoted as the app shows them in English. For Throne desktop, see Troubleshooting.
The VPN does not start or has no traffic
When a start fails, Throne shows the reason at the bottom of the screen, with a Logs button.
| Message | Cause | What to do |
|---|---|---|
| "Permission denied to create a VPN service" | You declined the VPN request, or another VPN app is set to Always-on VPN. | Connect again and allow the request. If none appears, turn off Always-on VPN for the other app in Android's VPN settings. |
| "VPN confirmation unavailable" | The device has no screen for the VPN request. | See VPN permission. |
| "Failed: …" with "configure tun interface" | Android refused to create the VPN interface. | Disconnect other VPN apps, make sure none is set to Always-on VPN, and restart the device. |
| "Failed: Profile … has a type this build cannot use: …" | The profile type exists only on desktop, such as Tailscale or Extra Core. | Use another profile. |
| "Could not connect: the network's DNS (…) did not answer. …" (or "the system DNS") | Direct DNS did not answer. By default (localhost), it is the DNS server of the current network. |
Tap DNS in the message and set Direct DNS to a server that answers on this network, for example tls://1.1.1.1. See DNS on Android. |
| "Could not download the rule-sets: …" | A rule uses a rule-set that was never downloaded, and the download failed. | Tap Connect anyway, then Connect. These rules match nothing until the download works. |
"Could not download geoip.dat from …" (or geosite.dat) |
An Xray config with geoip: or geosite: rules needs the file. |
Tap Geo assets, connect with another profile and tap Download now, or choose another Source. |
For any other "Failed: …" message, tap Logs and read the last lines.
Connected, but nothing loads
- Tap the bar at the bottom of the screen. "HTTP: … ms" means that the profile works; "Failed: …" means that the profile or its server does not.
- If it failed, use ⋮ →
Test→URL testand select a profile that works. See Testing & Auto Selector. - If
Settings→TUN / VPN→Apps VPN modeis on, turn it off and test again. See Per-app proxy. - Set
Settings→Routing→Current routing profiletoDefaultand test again. If that helps, a rule in your routing profile is the cause. If Throne says that the group uses its own routing profile, set the group'sRouting profiletoDefault (…)instead. - Try another
Remote DNSinSettings→DNS, or in the routing profile if it uses its own DNS servers. See DNS. - If you turned on
Tun IPv6orTun routinginSettings→TUN / VPN, turn them off. If some apps or websites fail while others work, setMTUthere to1500and reconnect. - To check whether VPN mode is the cause, set
Settings→General→Service modetoProxy only, connect, and set an app's own proxy setting to SOCKS5127.0.0.1, port2080. If that app works, check steps 3 and 6 again.
No internet while Throne is off
- Android's Always-on VPN with "Block connections without VPN" blocks all traffic while Throne is not connected. Connect Throne, or turn the option off in Android's VPN settings. See Always-on VPN.
- With
Settings→DNS→Enable FakeDNS, some apps lose their connection when Throne stops. Restart those apps, or turn offEnable FakeDNS.
Throne stops in the background
Signs: the VPN disconnects while the screen is off, the connection stops working after you unlock the phone, or the notification disappears.
Settings→General→Battery optimizationmust show "Unrestricted". If it does not, tap it. See Battery optimization.- In
Settings→General→Background & auto-start, allow Throne to start automatically and to run in the background. See Manufacturer settings. - Keep
Reset outbound connections when device wakes from sleepandReset outbound connections when network changeson (the defaults) inSettings→General, so that apps connect again after deep sleep or a lost network. - Turn on Always-on VPN, so that Android starts Throne again by itself. See Always-on VPN.
- On some devices, swiping Throne away from the recent apps stops it. Leave it there, or lock it there.
Subscription problems
A manual update shows its errors at the bottom of the screen. Automatic updates write them only to Logs.
| Message | Cause | What to do |
|---|---|---|
| "Request with proxy but no profile started." | Settings → Subscriptions → Use proxy is on, and Throne is not connected. |
Connect first, or turn off Use proxy. |
| "Error transferring … - server replied: …" | The server refused the request, for example with 403 or 404. | Check the URL. Many providers accept only some apps: set the user agent your provider names, or turn on HWID sending. |
| "No profiles found in the subscription; it was left unchanged." | The answer has no profiles that Throne can read. | Often the same user agent or HWID problem. Also check the import formats. |
| "The server returned a web page instead of a subscription. …" | Often a CAPTCHA or a bot check. | Try another TLS version, HTTP version or User agent in the group's Advanced settings. |
| "The name filters left out all … profiles of the subscription; it was left unchanged." | The group's name filters removed every profile. | Check Only names matching and Remove names matching under Filter in the group's settings. |
| "Insecure redirect", "Too many redirects" or "Response larger than 64 MB" | The server redirected https:// to http:// (Throne does not follow that), redirects in a loop, or sends more than 64 MB. |
Check the URL with your provider. |
The user agent and HWID are in Settings → Subscriptions, and for one group in Groups → the group's Edit button → Advanced. See User-Agent and HWID.
The provider accepts updates only from your own connection
While Throne is connected, its own requests, such as subscription updates, follow your routing profile too. If your provider accepts updates only from your own internet connection, add a rule that sends the subscription's domain to direct:
- Open
Routingin the drawer, then the menu of the current routing profile →Edit→Add rule. - Set
Outboundtodirect, enter the host name of the subscription URL (for examplesub.example.com) inDomain suffix, and save the rule and the routing profile. The rule must be above other rules that match the same domain.
If the provider wants the request to come from one of its servers, choose that server as the Outbound instead.
Routing errors
| Message | Cause | What to do |
|---|---|---|
| "The routing profile is referencing outbounds that no longer exist, consider revising your settings" | A rule sends traffic to a deleted server profile, for example after a subscription update. | Edit the routing profile: rules with a deleted server show "Missing server (#…)". Choose another outbound. |
| "Unknown rule-set "…" in rule "…" of routing profile "…"" or "The rule-set list is not available. …" | A rule uses a rule-set name that Throne does not know, or the list of names was not downloaded. | In Routing, tap Refresh repository list, or use the URL of an .srs file. |
| "raw routing profiles are not supported on Android" | You imported a raw routing profile from Throne desktop. | Use a structured or remote routing profile. |
WARP errors
| Message | Cause | What to do |
|---|---|---|
| "WARP is enabled but its config has not been generated. …" (when you connect: "Failed: Warp is enabled but …") | There is no WARP config for the selected mode. | In Settings → Routing → WARP, tap Generate WARP config. |
| "Failed to generate WARP config" | The registration at Cloudflare failed. Some networks block it. | Connect to a working profile, turn on Settings → Subscriptions → Use proxy, and generate again. |
| No message, but nothing loads while WARP is on | In WireGuard and AmneziaWG mode, WARP needs a profile that forwards UDP. |
Set Mode to MASQUE and HTTP version to HTTP/2, which needs only TCP, and generate a config for it. |
See Cloudflare WARP.
Update problems
- "The download is signed with a different key than this build, …": your copy was not signed with the Throne release key. Create a backup (drawer →
Tools→Create backup), uninstall Throne, install the APK from GitHub and restore the backup. - "This update cannot be installed from the app (…). …": tap
Open in browser, download the APK for your device and install it over the current app. - "Could not check for updates": Throne could not reach GitHub. Connect to a working profile and try again.
- Android cannot install Throne for Android 2.0 or newer over 1.x. See Upgrading from 1.x or NekoBox.
A profile works on desktop but not on Android
- Tailscale and Extra Core profiles do not work on Android, and TLS spoof settings are ignored.
- Throne for Android does not import subscription profiles that its core cannot run, for example with a transport that sing-box does not have, or XHTTP on a profile type other than VLESS.
Logsshows why each one was skipped. - An Xray config with
geoip:orgeosite:rules needsgeoip.datandgeosite.dat, which Throne downloads from theSourceinSettings→Core→Xray geo assets. If the installed file lacks a category that the config needs, choose a source that has it, such as the one your desktop uses. - Compare
Settings→Presetsand, inSettings→Core,Xray VLESS preferenceandTrust system certificates in Xray. The VLESS preference is applied at import, so update the subscription after you change it. On Android, trusting system certificates does not include certificates that you installed yourself. - To get the same settings as on desktop, restore a desktop backup. See Moving between desktop and Android.
Logs
Open Logs in the drawer. It shows the core log and, for Xray profiles, the Xray log in lines marked xray:.
Share logs and Save logs… create one text file with the versions, the device model, the core logs of this and the previous connection, and the app's system log.
Hide sensitive data in the menu is on by default; keep it on. It hides URL paths, credentials, keys, server addresses, host names, public IP addresses and Wi-Fi names in the file. Hide destinations also hides the domain names in connection and DNS lines. The hiding is best effort: read the file before you post it.
For more detail, set Settings → Core → Log level to info or debug and tap Apply to restart the app. For Xray profiles, also set Xray log level on the same screen: Xray lines appear only when both levels allow them. Reproduce the problem, share the logs, then set the levels back to warn and warning.
Diagnostics
For freezes, high CPU use or a fast-draining battery, the developers may ask for a Diagnostics file. It records what the core does for 30 seconds and contains nothing from your configs.
- Bring Throne into the state with the problem.
- Open
Settings→Diagnosticsand turn on the options the developers asked for:Lock contention,Execution trace (larger file)orInclude Throne logs. With logs included, keepHide sensitive dataon. - Tap
Start. The recording goes on when you leave the screen, so you can reproduce the problem meanwhile. - Tap
ShareorSave…and attach the filethrone-profile-<date>-<time>.zip.
Reporting a problem
Report problems at github.com/throneproj/ThroneForAndroid/issues with what you did, what you expected and what happened, the file from Share logs with Hide sensitive data on, the profile type (for example VLESS with REALITY) and the service mode. See also Reporting a Bug.