@
jim9606 26# 你的这几个问题一个一个来说。
1.Q: [“就算 AOSP Webview 不能更新,也可以……?”]
A:不行,并不是自己安装了不同的 webview 之后在开发者选项里就一定可以选择,是否在开发者选项里可以选择是系统编译时写死了的,你可以通过
adb pull /system/framework/framework-res.apk
aapt d xmltree framework-res.apk res/xml/config_webview_packages.xml
进行查看,只有在输出中含 [packageName="com.google.android.webview"] 字样时,你安装包名为此的 webview 才会在开发者选项中可选(其它包名同理),否则安装后也不可选(之前用魅族时即是如此)。
2.Q: [“不过我知道国内 APP 通常引用腾讯 TBS 或……”]
A:目前用腾讯 x5 的比较多,微信团队自己维护的 xweb 。如果 APP 没有浏览文档、视频播放、小游戏等需求,也没啥动力非得自带个内核。
3.Q: [“Google 为啥要将 TrichromeLibrary 和 Webview 拆开……”]
A:这个问题比较长,谷歌做了多次改动,每次改动都是为了适应当时的环境变化。
安卓 5+开始,webview 变为一个单独的 apk ,目的是为了在不更新安卓系统的情况下实现对 webview 的更新。但同样问题解决的不“完美”,如果我在安卓上安装了一个 Chrome 浏览器,webview 和 Chrome 之间存在着大量的相同代码,意味着手机上存在多余的存储和性能开销。
安卓 7+开始,webview 和 Chrone 合二为一,解决了上面的问题,你喜欢用 Chrome ,只装一个 Chrome 就可以同时作为 webview ,你不喜欢用 Chrome 那就单独只装 webview 。但仍存在问题,理想状态下 32 位系统上的 APP 全是 32 位的,64 位系统上的 APP 全是 64 位的,但现实中 64 位的安卓系统需要同时兼容 64 位和 32 位的 APP ,64 位的 APP 调用 64 位的库,32 位的 APP 调用 32 位的库,除非等明年 armv9 的 soc 完全取消对 32 位的兼容。这样一个 Chrone 既要做浏览器,又要做 webview ,还要同时兼容 64 位和 32 位的 webview 调用,一个浏览器将变得巨大无比,对性能和维护都有很大的挑战。目前安卓 7 上如果安装一个 arm64&arm32 的 Chrome.apk ,将包含一个完整的 32 位浏览器(没错)+64&32 位的 webview ,单个 apk 体积就达到了近 200M 。
安卓 10+上,便又重新拆分为 Chrome(64 位)、webview(64&32)、Trichrome Library(64&32)三个部分,彼此之间没有重复部分。
目前 Trichrome Library 安装之后确实不会有显示,也确实不会在更新时覆盖旧版本,所以更新几个版本后手机中就会存在几个版本的 Trichrome Library 残留,目前未 root 可以通过 adb 对多余的库进行卸载 [例如 pm uninstall com.google.android.trichromelibrary_463807434] 最后数字为版本号。