Files
vendor_redroid/gps/BUILD_GUIDE.md

4.1 KiB
Raw Blame History

Redroid 自定义GPS位置构建指南

本指南详细说明如何构建和使用Redroid的自定义GPS位置功能。

📋 修改的文件列表

1. 核心实现文件

  • gps/com_android_server_location_GnssLocationProvider.cpp - 主要的JNI实现
  • gps/Android.bp - 编译配置文件(新增)
  • gps/init.redroid.gps.sh - GPS初始化脚本

2. 集成配置文件

  • vendor.mk - 添加GPS JNI库到产品包
  • redroid.legacy.rc - 调整GPS目录权限

🔧 构建步骤

1. 准备源码

确保所有修改的文件都在正确的位置:

vendor/redroid/
├── gps/
│   ├── com_android_server_location_GnssLocationProvider.cpp
│   ├── Android.bp
│   └── init.redroid.gps.sh
├── vendor.mk
└── redroid.legacy.rc

2. 编译系统

在Android源码根目录执行

# 设置环境
source build/envsetup.sh

# 选择目标(根据你的设备调整)
lunch aosp_arm64-eng

# 编译GPS JNI库
m libredroid_gps_jni

# 或者编译整个vendor模块
m vendor-redroid

3. 验证编译结果

检查编译输出:

# 检查生成的库文件
ls -la out/target/product/*/vendor/lib*/hw/libredroid_gps_jni.so

🚀 部署和使用

1. 系统启动

当Android系统启动时redroid.legacy.rc会自动:

  • 创建/data/vendor/gps目录
  • 执行init.redroid.gps.sh脚本
  • 设置正确的权限

2. 默认位置

系统会创建默认的GPS位置文件

/data/vendor/gps/custom_location.txt

默认坐标(杭州):30.281026,120.019348

3. 自定义位置

修改GPS位置只需编辑文件

# 使用adb连接设备
adb shell

# 修改GPS位置例如北京天安门
echo "39.904989,116.405285" > /data/vendor/gps/custom_location.txt

# 或者使用adb push
echo "39.904989,116.405285" > custom_location.txt
adb push custom_location.txt /data/vendor/gps/

4. 实时生效

  • 修改文件后新的GPS位置会在下次位置请求时自动生效
  • 无需重启系统或GPS服务
  • 系统会检测文件修改时间并自动加载新坐标

📍 支持的坐标格式

逗号分隔格式

纬度,经度
39.904989,116.405285

空格分隔格式

纬度 经度
39.904989 116.405285

坐标范围

  • 纬度:-90° 到 +90°
  • 经度:-180° 到 +180°

🧪 测试验证

1. 查看日志

# 查看GPS相关日志
adb logcat | grep -i gnss
adb logcat | grep -i "custom.*gps"

# 期望看到的日志:
# I/GnssLocationProviderJni: Custom GPS location loaded: lat=39.904989, lon=116.405285
# I/GnssLocationProviderJni: Using custom GPS location: lat=39.904989, lon=116.405285

2. 使用GPS应用

  • 打开地图应用如Google Maps
  • 启用位置服务
  • 应该显示自定义的GPS位置

3. 验证位置变更

# 修改位置
echo "31.239666,121.499809" > /data/vendor/gps/custom_location.txt

# 在地图应用中观察位置变化

🔍 故障排除

编译错误

  1. 确保Android编译环境正确设置
  2. 检查依赖库是否存在
  3. 验证Android.bp语法

运行时错误

  1. 检查文件权限:

    ls -la /data/vendor/gps/
    
  2. 验证文件格式:

    cat /data/vendor/gps/custom_location.txt
    
  3. 查看详细日志:

    adb logcat -v threadtime | grep -E "(Gnss|GPS)"
    

权限问题

如果遇到权限错误:

# 重新设置权限
adb shell
chown system:system /data/vendor/gps/custom_location.txt
chmod 644 /data/vendor/gps/custom_location.txt

📱 兼容性

Android版本

  • 支持Android 8.0+API 26+
  • 测试过的版本Android 11、12、13

架构支持

  • ARM64
  • ARM32
  • x86_64通过Android.bp的compile_multilib配置

🔄 回退到默认GPS

如果要禁用自定义GPS功能

# 删除自定义位置文件
rm /data/vendor/gps/custom_location.txt

# 系统会自动回退到默认GPS行为

📞 技术支持

如果遇到问题,请提供:

  1. Android版本和设备信息
  2. 完整的logcat日志
  3. 文件权限和内容截图
  4. 具体的错误现象描述