141 lines
4.7 KiB
Bash
141 lines
4.7 KiB
Bash
#!/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}"
|