Android 多进程虚拟定位与环境一致性模块
HLocation 是基于 LSPosed/libxposed API 102 的 Android 虚拟定位与设备环境模拟模块。它以 Android 系统服务为位置数据主边界,以目标应用进程为环境一致性边界,并由独立控制端管理场景状态。
Important
HLocation 当前未公开源代码。SOURCE_URL 指向的是公开产物仓库,仅用于发布签名 APK、完整性校验文件、更新日志和问题反馈,不代表源码仓库。
- system_server 系统级位置注入与应用进程兼容兜底。
- 路线模拟、坐标抖动以及高度、精度、速度和航向模拟。
- GPS/GNSS、NMEA 与卫星状态模拟。
- 可选的 Wi-Fi、基站、蓝牙、网络连接和传感器环境模拟。
- 环境快照与基于 OpenCellID 数据的基站匹配。
- Binder 控制通道与 SharedMemory 多进程实时状态同步。
- 模块激活、Hook 安装、IPC 与运行时状态诊断。
| 项目 | 支持范围 |
|---|---|
| Android | Android 8.0–16(API 26+) |
| CPU 架构 | ARM64 (arm64-v8a) |
| Hook 框架 | LSPosed / libxposed API 102 |
| 坐标契约 | 地图选点使用 GCJ-02,Android Location 输出 WGS-84 |
HLocation 默认只推荐以下系统作用域:
- Android 系统(
system) - 系统框架(
android) - 电话服务(
com.android.phone)
仅在需要应用进程兼容 Hook 或环境模拟时,手动选择对应目标应用。
| 领域 | 技术 |
|---|---|
| Android | minSdk 26、targetSdk 36、compileSdk 37、ARM64 |
| 语言 | Kotlin 2.3.20、C++ 17 |
| 系统扩展 | LSPosed、libxposed API 102 |
| UI | Jetpack Compose、Material 3、Navigation 3 |
| 状态与并发 | Coroutines、Flow、StateFlow |
| 数据与依赖 | Room、KSP、Koin、Kotlin Serialization |
| 地图 | 高德 3DMap 与搜索 SDK |
| IPC | Binder、SharedMemory、版本化快照协议 |
| Native | Android NDK、CMake |
| 构建 | AGP 9、Gradle 9、JDK 17 |
flowchart TB
subgraph Control[控制平面]
UI[Compose 控制端]
Domain[领域状态与场景编排]
Storage[配置与本地数据]
UI --> Domain
Domain --> Storage
end
subgraph Data[数据平面]
Contract[版本化 IPC 契约]
Binder[Binder 控制通道]
SHM[SharedMemory 快照通道]
Contract --> Binder
Binder --> SHM
end
subgraph Runtime[运行时平面]
System[system_server 位置主路径]
Phone[电话服务进程蜂窝边界]
Target[目标应用位置与环境边界]
end
subgraph Integrity[保护平面]
Gate[应用身份与运行时门禁]
Native[ARM64 Native 边界]
Payload[独立受保护运行时]
Gate --> Native
Gate --> Payload
end
Domain --> Contract
Binder --> System
SHM --> System
SHM --> Phone
SHM --> Target
Integrity --> Control
Compose 控制端、地图交互、模拟状态、环境配置与持久化通过 ViewModel 和领域协调器分离。控制端只依赖稳定契约,不直接依赖 Hook 内部实现。
Binder 负责连接、配置提交和兼容事务,SharedMemory 负责多进程高频只读快照。配置版本与运行时位置序号独立推进,策略变更和位置推进拥有不同的仲裁语义。
system_server承载 IPC 骨干和系统位置主路径。- 电话服务进程承载蜂窝服务边界。
- 目标应用进程承载应用侧位置一致性以及 Wi-Fi、Cell、BLE、Sensor、GNSS 和网络环境边界。
系统位置、应用位置和周边环境消费同一份版本化状态,跨进程故障域彼此隔离。
应用身份、受保护运行时与 Native 映像边界独立校验。保护逻辑只约束控制端,不进入 system_server 或目标应用的高频位置路径。
内部场景坐标使用 GCJ-02,进入 Android Location 边界前统一转换为 WGS-84。单次位置构造复用一个原子坐标快照,使经纬度、高度、精度、速度和航向保持同源。
- 配置由单一版本化状态源驱动。
- 系统位置主路径与应用进程兜底路径相互独立。
- 位置字段按单次原子快照保持一致。
- 平台差异集中在 Android/OEM 适配层。
- 高频运行路径不执行网络、持久化或同步文件写入。
- API 27 以上使用 SharedMemory,API 26 保留 Binder 读取路径。
- ARM64 运行时适配 4 KiB 与 16 KiB 设备页尺寸。