Files
vendor_redroid/set_custom_gps.sh

141 lines
4.7 KiB
Bash
Raw Permalink 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.
#!/bin/bash
# Android自定义GPS位置设置脚本
# 适用于修改了frameworks/base的Android系统
# 用法: ./set_custom_gps.sh <纬度> <经度>
# 示例: ./set_custom_gps.sh 39.904989 116.405285
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
if [ $# -ne 2 ]; then
echo -e "${RED}用法: $0 <纬度> <经度>${NC}"
echo ""
echo -e "${BLUE}示例位置:${NC}"
echo -e " ${GREEN}北京天安门:${NC} $0 39.904989 116.405285"
echo -e " ${GREEN}上海外滩:${NC} $0 31.239666 121.499809"
echo -e " ${GREEN}广州塔:${NC} $0 23.109831 113.324504"
echo -e " ${GREEN}深圳地王:${NC} $0 22.544249 114.095298"
echo -e " ${GREEN}杭州西湖:${NC} $0 30.281026 120.019348"
echo -e " ${GREEN}东京塔:${NC} $0 35.658651 139.745415"
echo -e " ${GREEN}纽约时代广场:${NC} $0 40.758896 -73.985130"
echo ""
echo -e "${YELLOW}坐标范围:${NC}"
echo -e " 纬度: -90 到 90"
echo -e " 经度: -180 到 180"
exit 1
fi
LATITUDE=$1
LONGITUDE=$2
# 验证数字格式
if ! [[ $LATITUDE =~ ^-?[0-9]+\.?[0-9]*$ ]]; then
echo -e "${RED}错误: 纬度必须是有效的数字${NC}"
exit 1
fi
if ! [[ $LONGITUDE =~ ^-?[0-9]+\.?[0-9]*$ ]]; then
echo -e "${RED}错误: 经度必须是有效的数字${NC}"
exit 1
fi
# 验证坐标范围
if (( $(echo "$LATITUDE < -90.0 || $LATITUDE > 90.0" | bc -l 2>/dev/null || echo "1") )); then
echo -e "${RED}错误: 纬度必须在 -90 到 90 之间${NC}"
exit 1
fi
if (( $(echo "$LONGITUDE < -180.0 || $LONGITUDE > 180.0" | bc -l 2>/dev/null || echo "1") )); then
echo -e "${RED}错误: 经度必须在 -180 到 180 之间${NC}"
exit 1
fi
GPS_FILE="/data/vendor/gps/custom_location.txt"
GPS_DIR="/data/vendor/gps"
echo -e "${BLUE}🌍 设置GPS位置为: 纬度 ${GREEN}$LATITUDE${BLUE}, 经度 ${GREEN}$LONGITUDE${NC}"
# 检查ADB连接
if ! command -v adb >/dev/null 2>&1; then
echo -e "${RED}❌ 错误: 未找到adb命令${NC}"
echo -e "${YELLOW}请确保Android SDK已安装并添加到PATH${NC}"
exit 1
fi
# 检查设备连接
DEVICE_COUNT=$(adb devices | grep -c "device$")
if [ "$DEVICE_COUNT" -eq 0 ]; then
echo -e "${RED}❌ 错误: 未找到连接的Android设备${NC}"
echo -e "${YELLOW}请确保:${NC}"
echo "1. 设备已连接并启用USB调试"
echo "2. 已授权计算机的USB调试请求"
echo "3. 使用 'adb devices' 验证设备连接"
exit 1
elif [ "$DEVICE_COUNT" -gt 1 ]; then
echo -e "${YELLOW}⚠️ 检测到多个设备,使用第一个设备${NC}"
fi
# 创建临时文件
TEMP_FILE=$(mktemp)
echo "$LATITUDE,$LONGITUDE" > "$TEMP_FILE"
echo -e "${BLUE}📁 正在创建GPS目录...${NC}"
adb shell "mkdir -p $GPS_DIR" 2>/dev/null
echo -e "${BLUE}📤 正在上传GPS位置文件...${NC}"
adb push "$TEMP_FILE" "$GPS_FILE" >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo -e "${GREEN}✅ GPS位置文件上传成功${NC}"
# 设置正确权限
echo -e "${BLUE}🔐 正在设置文件权限...${NC}"
adb shell "chown system:system $GPS_FILE" 2>/dev/null
adb shell "chmod 644 $GPS_FILE" 2>/dev/null
# 验证文件内容
echo -e "${BLUE}📍 当前GPS位置配置${NC}"
CURRENT_LOCATION=$(adb shell "cat $GPS_FILE" 2>/dev/null | tr -d '\r\n')
if [ -n "$CURRENT_LOCATION" ]; then
echo -e " ${GREEN}$CURRENT_LOCATION${NC}"
else
echo -e " ${RED}无法读取配置文件${NC}"
fi
echo ""
echo -e "${GREEN}🎉 GPS位置设置完成${NC}"
echo ""
echo -e "${YELLOW}💡 使用提示:${NC}"
echo "• 新位置将在下次GPS请求时生效"
echo "• 重启GPS服务或应用以立即生效"
echo "• 打开地图应用验证位置是否正确"
echo ""
echo -e "${BLUE}🔍 调试命令:${NC}"
echo "• 查看GPS日志: ${GREEN}adb logcat | grep -i 'custom.*gps'${NC}"
echo "• 删除自定义位置: ${GREEN}adb shell 'rm $GPS_FILE'${NC}"
echo "• 重启位置服务: ${GREEN}adb shell 'setprop ctl.restart location'${NC}"
else
echo -e "${RED}❌ GPS位置文件上传失败${NC}"
echo -e "${YELLOW}可能的原因:${NC}"
echo "1. 设备没有root权限"
echo "2. 系统分区为只读"
echo "3. SELinux策略限制"
echo ""
echo -e "${BLUE}尝试解决方案:${NC}"
echo "• 确保设备已获得root权限"
echo "• 尝试: adb root && adb remount"
echo "• 检查SELinux设置: adb shell getenforce"
fi
# 清理临时文件
rm -f "$TEMP_FILE"
echo ""
echo -e "${BLUE}📱 支持的Android版本: Android 8.0+ (API Level 26+)${NC}"
echo -e "${BLUE}🔧 需要: 已修改frameworks/base的自定义Android系统${NC}"