Android 的系统碎片化问题可以说是 Android 系统最大的硬伤了,欧博官网自这个系统诞生以来十几年过去了,依然没能很好的解决,碎片化问题也是每个 Android 开发工程师心中的隐痛?,每次处理系统碎片化带来的问题时,血压也能分分钟飙升到 200+,为了减轻其他同仁的痛苦以及此后再遇到类似问题能少踩几个坑,就之前的爬坑经历做个记录吧。 WebView有关 WebieView 的重要性和其使用不是本文的重点,但是有几个相关的属性我们必须了解: 找到合适的 WebView.apk通过上面一通废话,你应该知道了,替换的坑就在如果你换上去的 WebView 包名和原内置的 WebView 包名不一致,就无法使用,欧博所以就需要找一个包名一致的高版本 APK 了,还有一种方法是在系统目录某个配置文件里改个什么值,也就是包名引用,这样你就能换成任何包名的 APK 了,这个暂时没仔细研究,后续有结果了再更新。 APKMirror是一个 APK 镜像站点,在这里可以找到很多 APK 的 release 版本以及历史版本,尤其 Google 全家桶系列的 APK 非常全,我们在这里根据需求直接搜索包名就可以了,我这里需要 com.android.webview ,检索到如下结果,可以看到这些都是从第三方 ROM 里提取出来的。 image-20190122132105477.png 因为 Google 官方早在 WebView 40 的时候就已经将包名换成 com.google.android.webview了,最新的是 72.xxx ,我翻了 15 页才找到最早改名并独立出来的那个版本?。 image-20190122131942432.png 通过 ADB 替换系统 WebView连接到目标机器adb connect 192.168.18.235 获取 su 权限adb shell su 重新挂载 /system 目录获取写入权限mount -o rw,remount /system 移动原目录下的 webview.apk 到备份目录image-20190122162147718.png 这里原目录下的文件分别有 /webview/webview.apk和/webview/lib/arm/libwebviewchromium.so,直接移动 webview 目录下所有文件到 /sdcard/backup/ 下: mv /system/app/webview/* /sdcard/backup/ 将准备好的安装包中的 .so 文件提取出来这里很简单,文件后缀 .apk 直接改成 .zip 然后解压缩,复制出libwebviewchromium.so 即可 image-20190122165310736.png 上传文件到 /system/app/webview先上传文件到设备 /sdcard ,然后执行如下命令移动过去,和原路径以及原文件名保持一致即可。 mv /sdcard/xxx.apk /system/app/webview/webview.apk mv /sdcard/xxx.so /system/app/webview/lib/arm/libwebviewchromium.so 重启设备adb reboot 结语如上一顿操作,其实也没什么难度,主要的坑就是包名一致的问题,还有一些系统目录访问权限之类的问题,之前网上搜了好多,都说不 root 没法换,或者换了会出问题,root 权限其实就是为了访问和写入系统目录,通过重新挂载就解决了,换了会崩掉的问题其实就是历史遗留问题,从 4.x 过度到 5.0 WebView 独立了,所以包名变了,或者是 ROM 定制方不按套路来导致换上去的 WebView 不被系统识别,只要找到合适的包就解决了。 (责任编辑:) |