能否对应用隐藏虚拟定位
“怎样让模拟无法被发现”是被问得最多的问题。简短的回答是:隐藏第一个、也是最明显的特征在技术上是可能的,但达不到预期的效果:应用还有三种相互独立的方法发现模拟,而修改系统的代价则完全不成比例。下面说明检测实际上是如何进行的,以及为什么我们既不介绍也不支持这条路线。
应用如何发现模拟
共有四个层面,它们彼此独立。
第一是坐标本身的标记。Android 会用一个单独的字段标记来自测试来源的每个位置,应用只需一行代码就能读取它。这是公开的系统内置接口,而不是什么秘密检查。
第二是设备完整性。解锁的引导加载程序和 root 会被平台认证发现,而与坐标发生了什么无关。应用无需知道您是否在模拟位置:只要知道系统被修改过,就可以直接拒绝工作。
第三是与周围环境比对。手机能看到周围的 Wi-Fi 网络和基站,而它们的组合与您“移动”到的坐标并不相符。服务把两者比对一下很容易。
第四是服务器端分析。一分钟移动五百公里、完全笔直的轨迹、精度一米都不变,这些在服务端无需设备上的任何标记就能看出来。

root 路线能做什么、做不到什么
网上的教程说的都是同一件事:解锁引导加载程序、获取 root、安装一个干预系统层并去掉坐标上模拟来源标记的模块。
这只解决了四个层面中的第一个。解锁引导加载程序后,设备认证必然失败,而且失败的原因不是模拟,而是修改本身。与网络比对和服务器端分析与设备完全无关:它们由服务执行,手机上的任何模块都影响不了。
结果是一种交换:您关掉了最明显的检查,同时打开了第二个、粗暴得多的检查:“设备已被修改”。对于原本关心的那些应用(银行、配送、企业考勤),结果比以前更糟:以前它们还能运行,只是忽略模拟坐标;现在则根本无法启动。
修改后什么会失效
在大多数设备上,解锁引导加载程序会清除所有数据并失去保修,这是厂商的官方立场,而不是藏在小字里的条款。
接下来:银行应用和非接触式支付会拒绝在认证失败的设备上工作;部分政务和企业服务也是如此;OTA 在线更新无法安装,或安装后会破坏系统;完整性检查不再保护您,拥有 root 权限的恶意应用会获得与有用应用相同的能力。
另一项是让手机变砖的风险。在关键分区被锁定的设备上刷机出错,需要送到维修中心修理,而且不一定免费。

为什么它还不稳定
即使不考虑上述所有问题,这种方案的寿命也很短。模拟来源标记随 Android 版本而变化:Android 12 之前应用读取一个字段,从 Android 12 开始读取另一个,旧的绕过方法就失效了。平台认证在服务端更新,而不是在设备上,所以它会在您不知情的情况下、在任意时刻失效。
实际上这意味着要不停地折腾:每次系统、应用或认证本身更新后,都要检查绕过方法是否还有效,然后重新调整。我们认为这是不可接受的,也不向任何人推荐,正因如此,Mock Location 不隐藏这个标记,今后也不会。
账号会有什么下场
检查位置的服务并不是故意刁难:对它们来说,位置是事实证明。快递员标记了送达、员工在现场打了卡、用户为某个价格方案确认了所在地区。伪造这类证明违反服务规则,往往也违反合同。
后果可想而知:封号,不退款也不复核;在工作场景中要和雇主谈话,有时还会面临法律索赔。我们对虚拟定位本身合法性的看法见单独的解答:您有权修改自己的位置,但误导依赖该位置的服务则是另一回事。
如果正当任务需要模拟怎么办
好消息是:绝大多数场景无需任何隐藏就能正常工作,因为其中的应用根本不读取这个标记。
地图和导航、天气、附近搜索、本地信息和价格、测试与位置相关的场景,这些都会照单全收模拟坐标。您需要的应用是否属于这一类,一分钟就能查明:开启模拟,看看它显示什么(如何检查)。
如果应用恰好会读取标记,唯一可行的办法不是绕过检查,而是换一种方式解决任务。地区内容更多需要的是网络而不是 GPS:虚拟定位还是 VPN。测试自己的应用则可以用模拟器和调试版本,那里内置了模拟功能,不会欺骗任何人(QA 讲解)。
总结
无法完全避免模拟被发现:检查共有四个层面,修改系统只能关闭其中一个,同时还会触发“设备已被修改”的标记,让同样的应用更早地拒绝工作。
Mock Location 严格在 Android 内置机制范围内工作:这套机制是什么、为什么不需要 root,以及为什么应用看到的是真实坐标,都有单独介绍。我们不发布绕过检查的教程,不是出于谨慎,而是因为它们解决不了问题,还会给用户带来比原来更大的麻烦。