本帖最后由 Jimoy 于 2020-2-29 23:36 编辑
前言一些定制、第三方 ROM 在安装了 Google 框架后,仍然无法使用其网络定位功能。我在网上搜索了许多资料,整理如下。本文假设你的设备已经 Root,并已经安装了 Google 框架。当然,修改其它定位,也是类似,可作为参考》
一、准备工具 需要准备的工具有 zip、unzip(解压缩工具就不用另外准备了)、apktool(反编译工具)、adb、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,使得最终结果类似这样: - <string-array name="config_locationProviderPackageNames">
- <item>com.google.android.gms</item>
- <item>com.android.location.fused</item>
- <item>com.amap.android.location</item>
- </string-array>
复制代码
2、修改 framework-res/res/values/bools.xml,启用 config_enableNetworkLocationOverlay 和 config_enableFusedLocationOverlay。如果原来的值是 false,把它们改成 true: - <bool name="config_enableNetworkLocationOverlay">true</bool>
- <bool name="config_enableFusedLocationOverlay">true</bool>
复制代码
3、修改 framework-res/res/values/strings.xml,设置 config_networkLocationProviderPackageName 为 com.google.android.gms。 - <string name="config_networkLocationProviderPackageName">com.google.android.gms</string>
复制代码
(我一并修改了 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)测试吧! |