近期关于格力手机2(G0215D)的折腾

手里有台 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

步骤的顺序极为重要, 不要搞反了!

  1. 从 apkmirror 下载一个老旧的 Android System Webview,我下载的版本是 50.0.2661.86。这里为什么要下载老旧版本后面解释。

  2. 将下载的 apk 包改名为 webview.apk,它其实是个zip格式的压缩包,用解压缩软件将包里面的 lib 子目录提取出来,和 apk 包本身放在同一级目录底下。结构大概是这样子的:

    子目录/
      |- lib/
      |   |- arm64-v8a/
      |   |- armeabi-v7a/
      |- webview.apk
  1. 在手机的 /system/app 目录里新建一个子目录,就叫com.google.android.webview好了。

  2. 将下载的 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           --> 这是内置的过时的 webview
package:com.google.android.webview    --> 这是新安装的 webview

上面的是系统自带的, 下面是我自己安装的。

  1. 将手机中的 /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。此时,系统会自动重启(其实并非真的重启,而是系统从严重的错误中恢复)。进入系统后长按电源键,真正地重启一次。再进入系统应该就正常了。

  1. 故事到这里本来应该结束了,但是其实还不行。我们安装到系统中的 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 功能,可以将门禁卡复制到手机中,用手机开门了。

posted @ 2023-06-24 10:14  fmcdr  阅读(1075)  评论(0编辑  收藏  举报