Files
vendor_redroid/gps/BUILD_GUIDE.md

197 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. 具体的错误现象描述