修复 Android ROM 的 Google 网络定位

一些定制、第三方 ROM 在安装了 Google 框架后,仍然无法使用其网络定位功能。我在网上搜索了许多资料,整理如下。

本文假设你的设备已经 Root,并已经安装了 Google 框架。我测试用的 ROM 为一加氢 OS。

一、准备工具

需要准备的工具有 zip、unzip、apktool、adb、zipalign,以及一个好使的文本编辑器。

(注意 zipalign 工具可能不在 $PATH 中,如 Arch AUR 包 android-sdk-build-tools 安装后会放在 /opt/android-sdk/build-tools/$pkgver/zipalign)

二、提取需要的资源

取出 ROM 中的 framework-res.apk,并反编译得到需要修改的文件:

adb pull /system/framework/framework-res.apk
apktool if framework-res.apk
apktool d framework-res.apk

三、修改文件

修改位置提供商相关设置,使用 Google 提供网络定位。

1、修改 framework-res/res/values/arrays.xml,找到 config_locationProviderPackageNames 的位置,确保 Google 在列表中。如我的 ROM 默认只有 com.android.location.fused 和 com.amap.android.location 两项,这时应当加入 com.google.android.gms,使得最终结果类似这样:

    
        com.google.android.gms
        com.android.location.fused
        com.amap.android.location
    

2、修改 framework-res/res/values/bools.xml,启用 config_enableNetworkLocationOverlay 和 config_enableFusedLocationOverlay。如果原来的值是 false,把它们改成 true:

    true
    true

3、修改 framework-res/res/values/strings.xml,设置 config_networkLocationProviderPackageName 为 com.google.android.gms。

    com.google.android.gms

(我一并修改了 config_fusedLocationProviderPackageName 为 com.android.location.fused,虽然可能是不必要的)

四、应用修改

1、重新编译,并从结果中提取出需要的部分:

apktool b framework-res
unzip -j framework-res/dist/framework-res.apk resources.arsc -d ./

2、将提取出的文件替换到原来的 framework-res.apk 中:

cp framework-res.apk framework-res-modified.apk
zip -0 framework-res-modified.apk resources.arsc

3、对资源进行 4 字节对齐处理:

zipalign 4 framework-res-modified.apk framework-res-aligned.apk

4、将修改后的 ROM 和更新脚本上传到手机:

这个更新脚本是我自己写的,主要处理了权限问题:

install-framework-res.sh

#!/bin/sh
mount -o remount,rw /system
mv "$1" /system/framework-res.apk
chmod 644 /system/framework-res.apk
chown root:root /system/framework-res.apk
mv /system/framework-res.apk /system/framework/framework-res.apk

和修改后的 framework-res-aligned.apk 一起上传到手机:

adb push framework-res-aligned.apk install-framework-res.sh /sdcard/

5、运行脚本,替换 apk 文件:

adb shell

如果此时得到了 $ 命令符,请先获得 root:

su

然后运行脚本:

sh /sdcard/install-framework-res.sh /sdcard/framework-res-aligned.apk

6、重启到 Recovery,清空 Cache & Dalvik Cache,再次重启回到系统。

至此,你的手机应该重新拥有了网络定位功能,赶快打开一个除地图以外的需要定位的 App (比如 Ingress)测试吧!

参考资料:

4 thoughts on “修复 Android ROM 的 Google 网络定位”

  1. 喵菊苣好厉害的样子… 本人有个刷了CM的老HTC的不知道是不是可以用这个办法… xda上没看到过有人说是 google framework 的问题来着…

Leave a Reply

Your email address will not be published. Required fields are marked *

QR Code Business Card