binsys 最近的时间轴更新
binsys

binsys

V2EX 第 65368 号会员,加入于 2014-06-17 12:54:45 +08:00
binsys 最近回复了
good job
2 天前
回复了 qqhahaboy 创建的主题 Android Android WebView 中嵌入原生控件
百度搜索 小程序同层 找相关文章,很多。
其实最终还得走上自己编译 chromium webview 的路线,差别无非是用原类名包名或者都改成自己的取舍问题。
真心不想以自己这技术水平以非专业团队的身份修改打包这个体量的代码。(国内下代码下工具就困难,代码量又真多)。
X5 又不能用( X5 改了包名,类名,ionic capacitor 之类的写死了 webview 类,不能用了,最重要的是官方不支持离线,必须在线分发,还不支持模拟器)。

crosswalk intel 开源技术中心 又不维护了。
回个旧帖子吧,Tencent X5 虽小但并不和胃口啊。

google 以及手机 vendor 安全原因,限制自己编译的 webview 通过系统提供的接口替换系统 webview (通过包名以及签名限制),如果你不 root 能做到,可以找 google 拿奖金的,那是安全问题了。

大概研究了下国内各大长各有各的方案,各有千秋,干了一堆活就为了解决 webview 碎片化(附加防被手机长加广告吧)。

比如我目前就遇到 vue3 的 webview 兼容问题,ES6 proxy 之类的 坑不少(不是做前端的,不太懂,都是更新 webview 就能解决的问题)。

1. 自己编译自己的 webview ,全面改包名及类名,东西都是自己的了,相当于引用一个正常的 aar ,干啥都行。

优点:
可与系统 webview 并存,完全自己的,干啥都行。甚至可以打包上 playstore 。

缺点:
工作量太大,tracking upstream 太累,毕竟把包名类名都改了,漏下一处肯恩就是 bug ,没专门团得的小厂不好消化。
包太大,100+版本的 webview 轻松增加 100MB 以上
没生态(特指大厂不需要的 phonegap ionic capacitor reactnative 之类的生态),因为这类框架里面有的写死了对 android/webkit/WebView 类的引用,你没完美办法让他们调用 android/webkit/WebView 时转向你自己的 WebView 类。

2. 还是自己编译自己 webview ,包名类名不改,app 启动时通过对 ClassLoader 和 webviewupdate 服务及 WebViewFactory.getProvider 的某些 hook 操作,让自己的 WebViewProvider 为 WebView 服务( 5.X+以后 WebView 基本上是个壳子,实际工作交给了 Provider ),

优点:
生态在(我等小厂喜欢),工作量没 1 大,减少了一些兼容问题,

缺点:
但增加了一些兼容问题,在 android 9 + 上得考虑如何安全的越过 hidden api 限制( Provider 是 hidden api )
部分魔改 WEBVIEW 机型兼容性问题,以及资源加载问题。

3. 偷懒取巧办法(大厂可能涉到 apk 分发及授权问题)
用原厂 Google 的 webview ,(比如从 apkmirror 上找到合适版本),当 app 启动时检测当前 webkit 版本,当过低,引导用户下载并安装官方原版 webview (因为墙,得放一个合适的国内 cdn 上)。然后重启 app ,再检测新的 webview apk 包有没有,如果有,获取当前使用 webview 是否是新包,如果是,恭喜你省事儿了。但就有一些手机 rom 厂商写死了不用你安装的 google 官方原版 webview ,这时候就得重复部分 2 里的方法,在你自己 APP 级别上 hook 一些东西,让你的 app 的 webview 找 provider 时强制用 google 的 webview 。(自己的 app 自己的进程,不是替换系统共享 webview ,那不在计划内)

优点:连 webview 都不用编译了,有 google 官方维护,香。
缺点:
得引导用户从未知来源安装这个虽然是官方未修改,但依旧被各种 rom 判定并警告的 apk ( MIUI 未知来源开关界面不定位到列表的具体 apk 上,得用户自己在大列表里翻找到你想开未知来源的 app ,且被判定为系统组件,必须在开发者选项里关掉 MIUI 优化后才能安装),其他手机接触少,华为 锤子(存量用户真有啊)没这些麻烦。

在自己 app 里替换 webview provider 代码参考:
https://github.com/anxinxu/bugs
49 天前
回复了 dc2002007 创建的主题 程序员 求一款开源的应用商店技术方案
ios 一个企业 in-house 证书都多少钱了。。贵得很
50 天前
回复了 acbot 创建的主题 Android 手机厂商为自定义 ROM 设置了哪些障碍
固件签名( Boot 链式校验,公钥私钥,SecureBoot 3.0 等)
设备参数及配置
Vendor 驱动及库
(有些 so ko 手机厂商也没代码,是 SOC Vendor ,HW Vendor 私有的,涉及大版本变动时,API 修改了等,直接挂,除非网上有人上各种黑科技 wrapper 套娃等方法让他跑起来,但厂商人员不会这么干,生命周期外会直接停更放弃)
Linux kernel 涉及变更版本时,源码兼容都无法保证,更别说二进制兼容了。
只能是广大网友有时间有精力有技术的贡献支持。
58 天前
回复了 igarashikenshin 创建的主题 Apple 工行万事达无法为开发者账号续费?
我个人总结必须是银联双标卡,单标目前还没一次成功过。
ubuntu+vscode+(vbox+win 有些方案刷机工具只有 win 的)
167 天前
回复了 adnoh 创建的主题 全球工单系统 米家挂了?
挂了
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1273 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 18ms · UTC 20:01 · PVG 04:01 · LAX 12:01 · JFK 15:01
Developed with CodeLauncher
♥ Do have faith in what you're doing.