手里有台 G0215D 本来已经退役了,但是前段时间匪夷所思地损失了两台手机后,不得已又翻出来重新服役。结果尴尬地发现,格力的手机团队已经跑路了。OTA升级已经挂了,提示有个24M的升级包,但是一直下载不了;应用市场已经打不开了,闪退。很多小问题,不解决根本就没法用。其中最大的问题是 webview 过时,导致很多 app 运行不正常。
下面开整
一、root
我基本上是按照这篇文章操作的: https://blog.csdn.net/qq_26803399/article/details/120018086
基本原理:在高版本上似乎不能正常解锁 Bootloader,需要降级才行。
该文所用的降级固件 G0215D_QFIL_images 版本号类似于 "G0215D-userdebug 6.0.1 MMB29M"。明显是调试用的工厂固件,可以想象会打开很多调试开关。很多人反映该固件卡顿,耗电严重。
刷入该固件后可以进入开发者模式,解锁 Bootloader。然后就可以进入 fastboot 刷入 twrp recovery 了。有了 twrp 就可以刷入 SuperSU, 获取 root 权限。
我尝试过刷入 Magisk 修补过的 boot.img,无限重启,放弃。
二、恢复正常的产品固件
官方固件极难寻找,部分刷机网站有收录,但是要花钱买。关键是花了钱还要捏着鼻子给某网盘充VIP,这就不能忍了。
我在本贴吧闲逛时无意间发现了这样一个链接: http://fotadown.mayitek.com/ota/root_data02_2/gree/GREE8996_6.0/G0215D/zh/other/HALO 1.2.1 D1/2017042519000170843.zip
从这个链接可以下载到 1.2.1 D1 版本的OTA固件,从URL看,这似乎就是官方所使用的OTA平台,我大胆猜测,平台上应该不止这一个版本,但是因为服务器不支持目录浏览,文件名又猜测不出来。所以目前能下载到的只有这个。希望有权限接触到服务器的人能够为社区提供一个备份。
升级到这个版本后,再次用 twrp 刷入 SuperSU, 成功取得 root。
目前这个版本没有大的问题,日常使用没问题。
三、升级 webview
我 root 的目的,其实就是为了升级 webview。
webview 是一个浏览器组件,可以简单地将它理解成一个 chromium 浏览器,它的用处是供第三方app调用,使得第三方app不用自己实现一个浏览器内核就能渲染web页面。很多app依赖webview,比如微信。
G0215d 内置的 webview 版本比较老旧,我记得是 44.x.xxxx,很多app运行不正常(某些页面显示空白),最显著的问题就是无法登陆微信。输入密码之后,原本会弹出一个拼图验证页面,这个页面是用h5实现的,在老旧的手机上,这个验证页面无法正常打开,表现是一直在转圈。这就是 webview 过时的症状。
webview 本身是可以独立升级的,但是问题在于,它经历过一个改名过程。原本的包名是“com.android.webview",后来改成了”com.google.android.webview“。也就是说,即使你安装了新版的webview也没用,因为系统内注册的webview提供者仍然是老旧的 "com.android.webview" 这个包。这个包名已经硬编码在 framework 中了。
下面的升级方法来源于: https://gist.github.com/ppoffice/9ce9790708eeabbec1281467e25139e4
步骤的顺序极为重要, 不要搞反了!
-
从 apkmirror 下载一个老旧的 Android System Webview,我下载的版本是 50.0.2661.86。这里为什么要下载老旧版本后面解释。
-
将下载的下载来的 apk 改名为 webview.apk,它其实是个zip格式的压缩包,用解压缩软件将包里面的
lib
子目录提取出来,和 apk 包本身放在同一级目录底下。结构大概是这样子的:子目录/
|- lib/
| |- arm64-v8a/
| |- armeabi-v7a/
|- webview.apk -
在手机的
/system/app
目录里新建一个子目录,就叫com.google.android.webview
好了。 -
将下载的 webview.apk 连同子目录
lib
一起复制到手机的/system/app/com.google.android.webview
目录下面。重启,确认手机里同时安装了两个Android System Webview
app. 可以在应用管理中查看,最稳妥的是用 adb 检查:adb shell pm list packages | grep webview
package:com.android.webview --> the built-in and outdated webview
package:com.google.android.webview --> our new webview
上面的是系统自带的, 下面是我自己安装的。
-
将手机中的
/system/framework/framework-res.apk
弄到电脑中,用 apktool 反编译(需要事先安装 apktool):apktool d framework-res.apk
得到一个 framework-res 文件夹,编辑其中的 framework-res/res/values/strings.xml
,将
<string name="config_webViewPackageName">com.android.webview</string>
这一行改为:
<string name="config_webViewPackageName">com.google.android.webview</string>
保存,再重新打包:
apktool b framework-res -c
新生成的包位于 framework-res/dist/framework-res.apk
,将它复制到手机的 /system/framework/
目录里面,覆盖掉原来的 apk。此时,系统会自动重启(其实并非真的重启)。进入系统后长按电源键,真正地重启一次。再进入系统应该就正常了。
- 故事到这里本来应该结束了,但是其实还不行。我们安装到系统中的 com.google.android.webview 包运行并不正常。具体什么原因不清楚。打开系统内置的浏览器(其实它是个UC浏览器)闪退。安装了 via 浏览器后报错,打不开任何页面。最后的解决办法是,下载一个新版的 Android System Webview 包,将它安装在用户空间中(更新)。我下载的版本是 106.0.5249.126。安装后再打开内置浏览器,一切正常,打开 via 浏览器也正常。用 via 浏览器搜索一个 html5 测试页面,显示正常,检查浏览器 us-agent, 确认是 106.0.5249.126.
再打开微信,输入登陆密码后,顺利地打开拼图验证页面,成功登陆。
在前面的步骤中,将老旧的 50.0.2661.86 版本安装为系统app的原因是,比它新的版本都可以在用户空间中随意试,随意删除。不再需要改动system分区。
题外:
既然已经有了 root 权限,安装一个 NFC卡模拟 app, 搭配本机的 NFC 功能,可以将门禁卡复制到手机中,用手机开门了。
标签:浏览器,app,格力,framework,折腾,G0215D,webview,com,android From: https://www.cnblogs.com/zh-geek/p/17500761.html