4.1 KiB
4.1 KiB
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
# 在地图应用中观察位置变化
🔍 故障排除
编译错误
- 确保Android编译环境正确设置
- 检查依赖库是否存在
- 验证Android.bp语法
运行时错误
-
检查文件权限:
ls -la /data/vendor/gps/ -
验证文件格式:
cat /data/vendor/gps/custom_location.txt -
查看详细日志:
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行为
📞 技术支持
如果遇到问题,请提供:
- Android版本和设备信息
- 完整的logcat日志
- 文件权限和内容截图
- 具体的错误现象描述