# 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. 准备源码 确保所有修改的文件都在正确的位置: ```bash vendor/redroid/ ├── gps/ │ ├── com_android_server_location_GnssLocationProvider.cpp │ ├── Android.bp │ └── init.redroid.gps.sh ├── vendor.mk └── redroid.legacy.rc ``` ### 2. 编译系统 在Android源码根目录执行: ```bash # 设置环境 source build/envsetup.sh # 选择目标(根据你的设备调整) lunch aosp_arm64-eng # 编译GPS JNI库 m libredroid_gps_jni # 或者编译整个vendor模块 m vendor-redroid ``` ### 3. 验证编译结果 检查编译输出: ```bash # 检查生成的库文件 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位置文件: ```bash /data/vendor/gps/custom_location.txt ``` 默认坐标(杭州):`30.281026,120.019348` ### 3. 自定义位置 修改GPS位置只需编辑文件: ```bash # 使用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. 查看日志 ```bash # 查看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. 验证位置变更 ```bash # 修改位置 echo "31.239666,121.499809" > /data/vendor/gps/custom_location.txt # 在地图应用中观察位置变化 ``` ## 🔍 故障排除 ### 编译错误 1. 确保Android编译环境正确设置 2. 检查依赖库是否存在 3. 验证Android.bp语法 ### 运行时错误 1. 检查文件权限: ```bash ls -la /data/vendor/gps/ ``` 2. 验证文件格式: ```bash cat /data/vendor/gps/custom_location.txt ``` 3. 查看详细日志: ```bash adb logcat -v threadtime | grep -E "(Gnss|GPS)" ``` ### 权限问题 如果遇到权限错误: ```bash # 重新设置权限 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功能: ```bash # 删除自定义位置文件 rm /data/vendor/gps/custom_location.txt # 系统会自动回退到默认GPS行为 ``` ## 📞 技术支持 如果遇到问题,请提供: 1. Android版本和设备信息 2. 完整的logcat日志 3. 文件权限和内容截图 4. 具体的错误现象描述