没有 Google 服务的 Huawei 上的模拟位置

没有 Google 服务的 Huawei 和 Honor 手机用户经常听到一种说法:他们无法使用虚拟定位。这是错误的:模拟位置是 Android 自身的一部分,而不是 Google 在其上附加的组件,在没有 Google Play 的手机上,这套机制的工作方式完全相同。区别只在于从哪里获取应用,以及 EMUI 把需要的设置放在哪里。

  1. 确认不需要 Google 服务

    应用需要 Android 8.0 或更高版本、开发者模式和位置权限,任何 Huawei 手机都具备这些。既不需要 Google 账号,也不需要 Google Play 服务或 root:模拟通过系统自带的测试位置提供程序机制实现。

    在没有 Google 服务的 Huawei 上安装 Mock Location:应用通过 Android 自带的机制工作
  2. 通过 APK 文件安装应用

    这些手机上没有 Google Play,因此需要从网站下载 APK。安装前请核对校验和:文件的 SHA256 公布在下载页面上,校验步骤见 APK 安装说明。

    网站下载页面:版本、文件大小以及用于校验的 SHA256 校验和
  3. 开启开发者模式

    设置 →“关于手机”→ 连续点按“版本号”七次。之后“开发人员选项”会出现在“设置 → 系统和更新”中(在较早的 EMUI 版本中就是“系统”)。

    Android 设置中的“关于手机”界面:“版本号”已高亮,底部提示还需点按的次数
  4. 选择模拟位置信息应用

    在开发人员选项中找到“选择模拟位置信息应用”,选择 Mock Location。同一时间只能有一个应用提供坐标,这是 Android 的限制,而不是 EMUI 的。

    选择模拟位置信息应用:已勾选 Mock Location,未选择“无”
  5. 设置应用启动管理

    设置 →“电池”→“应用启动管理”→ 找到 Mock Location,为它关闭“自动管理”。会弹出带三个开关的窗口:“允许自启动”“允许关联启动”和“允许后台活动”,把三个都打开。这是关键一步:在自动管理模式下,EMUI 会自行决定关闭后台服务。

    Huawei 设置:已为 Mock Location 关闭自动管理,三个开关均已开启
  6. 检查效果

    点按地图开始模拟,然后打开另一个地图应用。如果它显示的是所选位置,说明机制在系统层面生效,没有 Google 服务并无影响。

    其他地图应用显示的位置就是模拟位置:模拟已生效

为什么模拟不依赖 Google

模拟位置在 Android 本身中实现:系统允许一个被选中的应用注册测试提供程序并向其中写入坐标,然后把这些坐标提供给所有以常规方式请求位置的应用。Google Play 服务与这套机制无关:它在系统 API 之上提供自己的位置 API,但并不取代系统 API。

实际结果是:在没有 Google 服务的手机上,模拟可以正常工作。而只通过 Google API 获取坐标的应用,在这类手机上即使不模拟也无法工作,原因与模拟无关。

三个开关缺一不可

“允许自启动”让系统在关闭应用后可以把它重新拉起。“允许关联启动”允许应用因其他应用或系统的事件而启动,重启后恢复模拟靠的就是它。“允许后台活动”让服务在应用切到后台时继续运行。

关闭第三个开关和关闭第一个一样,都会让模拟中断,所以请把三个都打开,而不只是最显眼的自启动。

HarmonyOS 和 Honor

在 HarmonyOS 上,各项设置的位置与 EMUI 几乎相同:开发者模式同样通过点按七次开启,这一项位于“系统和更新”中,启动管理位于“电池”中。名称可能差一两个字,思路相同。

两家公司分开后,Honor 有了自己的系统,但也保留了带同样三个开关的应用启动管理,请在电池设置中查找。

如果模拟仍然停止

检查应用是否又回到了自动启动管理:系统大版本更新有时会重置这项设置。服务存活的标志是通知栏中的常驻通知;如果通知消失了,说明系统关闭了服务。

其他原因与厂商无关,单独讲解见为什么模拟会在后台中断。

Mock Location — 免 root 的 Android 虚拟定位

免费,不经 Google Play 分发。安装前可以核对文件校验和。

下载 APK