Tours

深入 Android 应用

14 分钟阅读View as markdown ↗

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

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

四个标签页

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

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

连接的真实机制

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

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

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

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

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

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

围绕这个服务:

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

选择提供者

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

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

设置与连接抽屉

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

对公众共享是参与 UR protocol,你承载的流量在签名合同下计量。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 的报告里。日志描述隧道的行为,不含你流量的内容。

当你想看机器内部

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

其他文档

概览端到端讲解这个网络,FAQ 回答常见问题,其他平台的指南在 iOSmacOSWindowsLinux,以及浏览器