# 深入 Android 应用

这是深度导览：Android 应用的每个主要界面、各项设置及其出厂默认值，以及与之配套的疑难解答。它假定你已经安装并连接过。如果还没有，先看[入门指南](/docs/getting-started-android)。应用背后的网络如何运作，读[概览](/docs/overview)。

Android 是能力最强的 URnetwork 客户端。它是仅有的两个支持按应用拆分隧道的平台之一（另一个是 Windows），也是唯一能用系统级锁定为断网保护托底的平台。它还暴露了最多的连接机件，包括一个实时展示隧道内部状态的开发者屏幕。应用和它内部的连接引擎都开源，所以这一页可以对着代码核对。尚无独立审计覆盖协议或运营方的服务器代码，而隐私承诺正落在那里。Leviathan Security Group 于 2025 年 5 月在 Google 的 App Defense Alliance MASA 计划下以保障级别 AL2 评估了这个应用，结果通过；Leviathan 把这项工作的范围界定为"仅限于 Application Defense Alliance 的具体要求……不应被解读为整体性的安全评估或全面的渗透测试"。[威胁模型](/docs/threat-model)记录了 2025 年的两项第三方评估及其局限。

## 四个标签页

应用底部是四个标签页，平板横屏时变成侧边的导航栏。选中的标签页染成粉色。

- **连接（Connect）。** 主屏幕：一个显示世界各地提供者的 3D 地球、连接按钮，以及在其上方探出的底部抽屉。把抽屉拖上来可以看连接状态、当前提供者和统计数据。
- **账户（Account）。** 你的套餐、你的共享活动、你的网络名，以及设置的入口。你的账户和网络也可以从设置里删除。那是彻底移除，不是软停用。
- **排行榜（Leaderboard）。** 按近期共享活动排名的提供者网络，定期更新。一个开关控制是否在上面显示你自己的网络名。它默认关闭，所以在你主动选择之前，你以匿名行的形式出现。
- **支持（Support）。** 通过 [feedback.ur.io](https://feedback.ur.io) 联系团队，带一个分享应用日志文件的按钮（详见疑难解答）。

![连接屏幕，抽屉展开](/docs-assets/connect-android.png)

## 连接的真实机制

点连接会启动 `MainService`，一个拥有 tun 设备的 Android `VpnService`，其配置为：

- **MTU 1440**，以非阻塞模式读取
- IPv4 和 IPv6 DNS 服务器都路由进隧道
- 按应用的允许/禁止清单（拆分隧道正是靠它驱动）
- 应用**把自己排除**在自己的隧道之外，所以发往平台的控制流量（本身始终 TLS 加密）永远不会绕回它正在管理的隧道

从 tun 设备出发，流量走网络的短多跳路径：你 → 扩展器 → 运营方 → 提供者 → 互联网。扩展器是一个可达性跳点，原样转发你的加密会话而不读取它；作为你的第一跳，它确实看得到你的地址。客户端同时持有多个提供者，让每个站点固定走一个提供者以便服务看到稳定地址，并把流从表现不佳的提供者上挪走。[概览](/docs/overview)讲解完整路径、为什么止步于四段，以及提供者窗口。

对这个应用的控制项而言，关键是两个中继方之间的分割。提供者永远不知道你是谁，因为运营方站在中间。运营方读不了你发送的内容，因为会话端到端密封直到提供者。全新安装两条都成立，所以没有任何单独一方同时握有你的身份和你的活动。分割背后的控制项是**后量子加密**（Post Quantum Encryption）和**强匿名化**（Strong Anonymization），都在连接抽屉里，都默认开启。它们产生的三种状态：

| 模式 | 运营方看到 | 提供者看到 | 默认与可用性 |
|---|---|---|---|
| **中继密封** | 你的账户和来源连接、你在用哪些提供者，以及密文及其时序和数据量 | 它出网的目的地和一个设备/合同 id，**不含**你的真实 IP | 出厂默认：后量子加密，在连接抽屉里开启 |
| **中继标准** | 你的账户和来源连接、你在用哪些提供者，以及里面的目的地和数据包字节 | 它出网的目的地和一个设备/合同 id，**不含**你的真实 IP | 自行选择开启：关掉后量子加密 |
| **直连** | 更少的中继参与 | **你的真实 IP**及它出网的目的地 | 自行选择开启：关掉强匿名化 |

局限：没有任何机制验证分配给你的提供者彼此独立、且独立于运营方，运营方自己也可以运行提供者。[威胁模型](/docs/threat-model)把这几行逐一对照具名的对手推演，包括恶意的运营方，并明说每一行在哪里失守。

围绕这个服务：

- **支持始终开启的 VPN。** 应用声明了 `SUPPORTS_ALWAYS_ON` 元数据，所以在系统设置 → 网络和互联网 → VPN → URnetwork 里可以启用*始终开启的 VPN*（Always-on VPN）和*屏蔽非 VPN 连接*（Block connections without VPN，即锁定）。
- **开机自启。** 一个开机接收器在重启后恢复连接，所以夜里重启过的手机醒来仍是连接状态。
- **电池与温控感知。** 服务观察省电模式和温控状态，而不是与系统对抗。
- **一个快捷设置图块**可在通知栏里切换连接，但有一个局限，见疑难解答：它无法显示首次运行的 VPN 同意对话框。

## 选择提供者

位置选择器从连接标签页打开。**最佳可用提供者**（Best available provider）是默认项，让网络持续把你路由到快而可靠的提供者。往下浏览列表看到的是国家，每个国家带着此刻在线提供者的实时数量。开始输入后，结果分成**地区**（Regions）、**城市**（Cities）和匹配的设备。城市级定位靠搜索城市名到达，不是靠往下滚动。

数量是实时的成员设备数，随一天中的时段起落。一个位置只在有成员设备在那里在线时才会被列出，平台根据它观察到的连接推导城市，而不是相信提供者自己的申报。在地址块或城市之间跳来跳去的提供者会被标记为无效，从数量和路由中掉出。局限：看起来像数据中心或 VPN 的地址会被检测并降级，而不是被封禁。[概览](/docs/overview)完整讲解覆盖与位置真实性。

## 设置与连接抽屉

Android 的控制项分在两处。**设置**，在账户标签页之后，容纳共享连接、断网保护、同步设备位置、电池豁免、你的恢复短语、账户删除和开发者屏幕。**连接抽屉**，在连接标签页上拖出，容纳固定 IP、强匿名化和后量子加密，其下是分流规则和自定义 DNS、广告与跟踪器拦截，以及实时流量图表。

连接抽屉的设置：

| 设置 | 默认 | 效果 | 主要代价 |
|---|---|---|---|
| 强匿名化 | 开 | 让运营方留在你和提供者之间，提供者永远见不到你的真实 IP | 比直连路径慢 |
| 后量子加密 | 开 | 把会话端到端密封到提供者，运营方中继的是自己没有密钥的字节 | 跳过无法密封的提供者 |
| 固定 IP（Fixed IP） | 关 | 把提供者窗口收窄到一个出口，每个站点都看到同一个稳定地址 | 放弃复数出口 |
| 拦截广告与跟踪器（Block ads and trackers） | 关 | 对隧道承载的一切生效的设备级过滤器，一开即生效 | 过滤是全隧道的，不能按应用 |

- 关掉强匿名化就是直连模式：匿名化跳点退出，吞吐量上升，而那个提供者看到你的真实地址。默认要身份，开口才给速度。
- 密封不会回退。只要后量子加密开着，客户端就不会以明文收发应用数据：无法与之建立密封会话的提供者会被跳过，而不是以未密封的方式使用。代价落在可用性上，不是机密性——你失去的是那个提供者，不是你的加密。当前所有提供者构建都支持响应端，所以这种情况少见。把这个设置关掉，流量才又可以走标准中继路径。应用仍不显示逐连接的"是否密封"结论。

设置里的开关：

| 设置 | 默认 | 效果 | 主要代价 |
|---|---|---|---|
| 共享连接（Provide mode） | 永不 | 把你的闲置带宽共享给网络，或只共享给你自己的设备 | 带宽，以及未豁免时的电池 |
| 允许经蜂窝网络共享（Allow providing on cellular network） | 关 | 让共享跑在移动数据上，而不只是 Wi-Fi | 共享可能花掉你的流量套餐 |
| 断网保护（Kill switch） | 关 | 没有提供者可达时停止本地回落 | 提供者全失联时没有流量 |
| 同步设备位置（Sync device location） | 关 | 应用看到你持有最久的提供者的位置，而不是你的真实位置 | 影响设备上的每个应用；清理要小心 |
| 忽略电池优化（Ignore battery optimizations） | 关 | 请求系统豁免，让隧道和共享在后台活下去 | 以后移除要走系统设置 |

以下各有一节。

### 拆分隧道：两个层级

Android 两种拆分隧道都有，而且可以叠加。

**域名和 IP 规则。** 添加规则，允许或阻止特定域名和 IP 段进入隧道。用它把银行网站留在你的本地连接上，或只强制某些目的地走 URnetwork。

**按应用规则**，URnetwork 客户端里只与 Windows 共有：`VpnService` 是唯一原生支持按应用路由的平台 VPN API（Windows 要靠专门驱动实现同一招）。每个应用可以被：

- **排除（Excluded）。** 该应用完全绕开隧道。
- **包含（Included）。** 这是要紧的开关：包含任何一个应用，隧道就翻转进**白名单模式**。从那时起，*只有*被包含的应用走隧道；其余一切直连。只做排除的清单则保持默认的"一切走隧道"行为。
- **固定（Pinned）。** 该应用的流量粘在单个提供者上，不喜欢出口地址变化的服务会看到一个稳定 IP。

### 自定义 DNS

应用默认使用它最安全的配置：加密的 DNS over HTTPS，经隧道解析。自定义 DNS（Custom DNS）屏幕让你有意识地做取舍：

- **DoH，远程。** 加密，在提供者之外解析。默认项。
- **DoH，本地。** 加密，从你这一侧解析。
- **不加密，远程或本地。** 明文 DNS，如果你网络里有什么东西非它不可。
- **按国家推荐设置（Recommended settings per country）。** 为特定解析器更好用或被强制要求的地方准备的合理预设。
- **恢复最安全设置（Restore to most secure settings）。** 一键回到经隧道的加密 DoH。

**拦截广告与跟踪器**开关在同一张卡片下。它不是一种 DNS 模式，而是上表那个设备级过滤器，一开就对隧道承载的一切生效。

### 断网保护

断网保护禁用回落到本地路由。正常情况下，当没有提供者可达时，客户端可以把流量走你的本地连接，免得你被困住。断网保护打开后它不会这么做：流量停住，而不是让你的设备暴露在隧道之外。它出厂关闭。

它还有第二个效果。被你自己设备的安全过滤器判为丢弃的流量（见共享连接），在开关关闭时走你的本地连接出去，开关打开后被直接阻止。命中文件共享特征的流量则无论开关都被阻止。

这是应用级的保证。要一个即使应用死掉也成立的系统级保证，在 Android 的 VPN 设置里加上系统的*始终开启的 VPN*和*屏蔽非 VPN 连接*。两者互补：开关管客户端的路由决策，锁定让 Android 自己拒绝非隧道流量。每个 URnetwork 应用都带这个开关；Android 多给的是上面那层系统级锁定。浏览器扩展有自己的一个，默认开启。

### 共享连接

共享默认关闭。四档：

- **自动（Auto）。** 你作为客户端连接时对公众共享，断开后退回只服务你自己的设备。
- **始终（Always）。** 对公众共享，无论你连没连接。
- **网络（Network）。** 私有提供者：始终在线，但只服务你自己的设备。
- **永不（Never）。** 默认。完全不共享。

共享你的连接在你自己的设备上过滤。连接引擎的开源 `ip_security` 层就在你设备的出口处检查流量，在文件共享（比如 BitTorrent）和攻击模式流量带着你的地址离开你的连接之前把它们丢弃。同一层也作用在你自己的出站流量上，所以这不是一条你强加给陌生人、自己却能逃开的规则。被记录的只是一个本地计数器：按协议和目的端口统计的被拦数据包和字节数，别无其他。没有地址，没有域名，没有数据包内容。命中文件共享确实会向运营方升起一个滥用标记，但它写的是发送流量的那台设备（当承载者是你时，写的不是你），外加一个布尔值，而运营方今天没有处理它的代码。攻击模式和不透明隧道的丢弃则什么都不升起。这个过滤器在流量到达你的线路之前，就移除了大多数滥用投诉背后的流量，它的威胁清单在每次发布时从公开情报源重建。[服务条款](/terms)约定共享连接的相关条款。

对公众共享是参与 UR protocol，你承载的流量在签名合同下计量。[ur.xyz](https://ur.xyz) 记录了这种参与的奖励如何运作；账户标签页是你自己的参与情况出现的地方。

两项设置随行。**允许经蜂窝网络共享**，就在共享连接下方，默认关闭，所以在你另说之前共享只走 Wi-Fi。设置更上方的通用一节里，**忽略电池优化**处理另一项代价：Android 会激进地让后台应用休眠，这对一个应该在手机插着充电器时持续服务流量的提供者是致命的。这个开关请求系统豁免。以后要移除它，Android 要求你自己去系统设置的应用电池用量里操作。

### 同步设备位置

一个可选功能，让你设备上的应用看到你连接时间最长的那个提供者的位置，而不是你的真实位置。它使用 Android 的模拟位置机制，所以需要开启开发者选项并把 URnetwork 选为模拟位置应用。设置屏幕会一步步带你完成，并写明局限：它影响设备上的每个应用，应用能检测出位置是模拟的，而且你应该先在 URnetwork 里关掉这个功能，再取消选择该应用或卸载。疑难解答一节解释了最后这条为什么要紧。

### 即时账户，以及你必须保存的恢复短语

你不必交出一个身份才能开始。登录屏幕上的**创建即时账户**（Create Instant Account）会做出一个真实、永久的网络：勾选条款框，点一下，不要邮箱、不要手机号、不要密码。保护它的是一份**恢复短语**（seedphrase）：平台生成的一列单词，创建后立即展示一次，之后只以哈希形式保存。那个屏幕出现时账户已经存在，所以退出去也不会撤销它。两个出口都向前进入应用。这一个事实就是局限的全部：

- 恢复短语是唯一的凭证。在点过那个屏幕之前把它写下来。没有它，支持团队无法找回账户，因为运营方手里没有任何可以用来找回的东西。
- 保存之后，它让账户拥有设备本地身份永远没有的持久性：重装应用或换新手机，用短语登录，你的网络、套餐和历史都跟着回来。
- 免费档的每日额度照常适用，和任何免费网络一样。花完之后，经 URnetwork 的数据停止流动，直到额度刷新（当前数字在 ur.io/products）。

匿名账户不是受限账户。加密货币钱包签名是第二种免邮箱的入口，之后你也可以给同一个网络挂上邮箱或手机号，留一条熟悉的回家路。设置里有**生成恢复短语**（Generate Seedphrase），所以邮箱账户可以事后补一份恢复短语，或轮换已有的那份。旧短语随即失效；新短语只显示一次。

## 深度链接

应用注册了两类链接：

- **`https://ur.io/c...`** 链接是经过验证的应用链接（app links），对照站点的 `assetlinks.json` 核验，所以它们直接在应用里打开，不弹浏览器选择器。
- **`ur://`** 是自定义协议，供其他应用和工具把动作递给这个应用。

## 疑难解答

### 点连接没反应，或者隧道一直起不来

最常见的原因是系统的 VPN 同意从未被授予：对话框被关掉了，或者另一个 VPN 应用占着始终开启，这会让 Android 默不作声地拒绝第二个。打开 URnetwork 本体点连接，让同意对话框有机会出现。如果别的应用启用了*始终开启的 VPN*，去系统设置 → VPN 查看。

### 快捷设置图块完成不了第一次连接

按 Android 的设计，图块无法显示 VPN 同意对话框。安装后（或撤销 VPN 权限后）的第一次连接必须发生在应用里。图块会注意到缺少同意，并打开应用让你完成。之后，图块就能独立工作。

### 隧道在后台死掉

几乎总是电池优化在作怪，尤其是激进的 OEM 系统。在设置里打开**忽略电池优化**；它会打开系统的豁免提示。如果你的设备有厂商电池管理器（小米、华为、Oppo 等等），也在那里给 URnetwork 豁免。

### 用过同步设备位置之后，设备位置卡住了

Android 从不自行移除模拟位置提供器：应用崩溃不会，强行停止不会，甚至卸载也不会。而且如果你在功能开着时在开发者选项里取消选择 URnetwork（或关闭开发者选项），应用就失去了清理的能力。你设备的位置会冻结在最后同步的城市，直到你重新把 URnetwork 选为模拟位置应用并关掉该功能，或者重启设备。这就是应用要你先关功能的原因。该功能下次启动时也会在可能时自动清理残留。

### 与支持团队分享日志

支持标签页有一个分享按钮，把连接 SDK 的日志目录打包成可分享的文件。把它附在 [feedback.ur.io](https://feedback.ur.io) 的报告里。日志描述隧道的行为，不含你流量的内容。

### 当你想看机器内部

设置最底部是一个开发者屏幕，实时展示连接内部状态：提供者连接失败、你自己的上行沉默时失败如何判定、探测结果，以及提供者选择的可调参数。如果你在排查时好时坏的连接，或者想写一份好的 bug 报告，它是应用里信息密度最高的屏幕。

## 其他文档

[概览](/docs/overview)端到端讲解这个网络，[FAQ](/docs/faq) 回答常见问题，其他平台的指南在 [iOS](/docs/getting-started-ios)、[macOS](/docs/getting-started-macos)、[Windows](/docs/getting-started-windows)、[Linux](/docs/getting-started-linux)，以及[浏览器](/docs/getting-started-browser)。
