一、综述
现如今,很多应用都有内部打开网页的需求,体验上好像原生页面一样,又或者不想跳转到外部浏览器,造成用户体验上的割裂感。安卓由于碎片化太严重,导致内部集成WebView有很多坑。这里就自己在开发过程的经验做一个常用解决方案的总结。这里只是做方案的总结,分析优缺点,给还在纠结解决方案的同学一些参考。不涉及详细的集成和使用教程(我会给一些自己搜集的相关链接,不做重复劳动)。
主要有四种:
1、调用系统WebView集成
2、使用腾讯X5内核集成
3、集成Crosswalk开源Web引擎
4、使用Chrome的CustomTabs API
二、方案分析
1、系统WebView
Android中的WebView组件,在4.4以前的版本是WebKit的内核,4.4以后才换成chromium的内核,由于安卓版本碎片化太严重(安卓开发者心中永远的痛),因此也导致各个版本之间的运行效率参差不齐。而且即使是chromium内核的版本,也因为要考虑兼容以前的版本,实现上很是麻烦。而且,内存泄露问题也是很严重,网上一搜一大把。
所以,应用主要需求对webview依赖过多,对性能和兼容性要求较高的,还是不建议使用这种方案。这种方案的好处就是不会过多增加App体积,如果只是少数场景需要在内部打开网页(用户指南,用户协议之类的),不需要太多功能(不调用过多webview接口,或者只在高版本才有的API),可以考虑使用这种方案,毕竟简单方便。
优点:不增加应用体积,简单快速
缺点:版本不兼容,API上也有很多坑,运行效率参差不齐,内存泄漏问题严重
适用场景:打开简单网页,不涉及主要需求。
系统WebView使用相关的博客:Android:最全面的 Webview 详解
2、腾讯X5内核
TBS(腾讯浏览服务)的优势
1) 速度快:相比系统webview的网页打开速度有30+%的提升;
2) 省流量:使用云端优化技术使流量节省20+%;
3) 更安全:安全问题可以在24小时内修复;
4) 更稳定:经过亿级用户的使用考验,CRASH率低于0.15%;
5) 兼容好:无系统内核的碎片化问题,更少的兼容性问题;
6) 体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能;
7) 功能全:在Html5、ES6上有更完整支持;
8) 更强大:集成强大的视频播放器,支持视频格式远多于系统webview;
9) 视频和文件格式的支持x5内核多于系统内核
10) 防劫持是x5内核的一大亮点
上面是官网的介绍,本来这可能是最实用的一个方案,然而还是有坑,下面会说到。
腾讯X5内核已经在腾讯家的很多产品使用,包括微信,QQ,QQ浏览器,兼容性、功能性和性能已经得到验证(兼容性才是大家关注的),而且集成也不会增加App过多体积,SDK+so库只有不到300K,打包后增加的会更少。
X5内核集成后,可以使用宿主x5内核,也就是如果手机安装了微信、QQ、QQ浏览器等包含X5内核的应用,就可以不需要在后台下载X5内核(目前官网说23M左右,wifi条件下下载),直接调用。这个还是很方便的,要知道,在大陆,微信,QQ这两个软件可是几乎都装的。当然,如果没装,在下载好X5内核之前,SDK会切换到系统WebView,不至于应用不可用。
说到坑,就是X5内核目前只提供armeabi 32位so库(没有"armeabi-v7a","arm64-v8a",更没有其他),如果你的应用需要用其他so库,就只能保留这一个文件夹,如果对性能有要求的话,这点就比较坑了。当然,如果没有性能上的需求,所有so库都只保留armeabi版本也可以的,看具体情况了。
优点:上面的“TBS(腾讯浏览服务)的优势”已经说的很全面了,另外,可以调用宿主X5内核,集成不会增加多少体积
缺点:跨平台支持较差,深入使用也会有些坑,但应付一般场景够了。
适用场景:涉及主要需求,对兼容性,功能性要求高的应用,和其他so库使用不冲突。
TBS官方接入文档:X5内核接入文档
3、Crosswalk
这个我没有实践过,要求最低版本 minSdkVersion 14。但从兼容性和功能性上说,也是个不错的选择。X5内核有的这个基本也都有,它还提供64位支持,毕竟是单独的SDK,不受安卓版本碎片化影响,所以总的来说,如果应用需求有大量复杂网页和H5,可以考虑接入。
说的那么好,为什么周围用的这么少呢?主要就是集成的体积较大,一般如果已内嵌方式集成,应用会增加20M-40M体积,对于移动应用来说是很难忍受的。很多人会说,还不如用X5呢,确实。
但Crosswalk也提供了其他集成方式:
a、使用Crosswalk Lite,它会去除一些不常用的模块 (也可以自己配置去除哪些模块),以及使用一些压缩功能,可以消减10M左右的大小。不足之处是第一次启动可能较慢(需要解压缩)。
b.使用Crosswalk 共享模式。这样应用只会包含薄薄的Crosswalk一层Wrapper。真正应用运行时,如果系统中还未安装Crosswalk,会提示在相应应用商店下载(这个在国内还是不太现实)。同时这个Crosswalk可以给不同应用共享,Crosswalk的升级更新可以和应用的更新分离。 不足之处,如果系统未安装Crosswalk shared APK,需要额外的安装过程。
优点:类似与X5内核,性能好,兼容性好,功能多,多平台支持。
缺点:集成代价较大,会增加应用过多体积。
适用场景:对性能要求很高,跨平台要求高的
Crosswalk官方文档:Crosswalk安卓设备配置
相关博客:Crosswalk 开发浅析,忘掉那些Webview的坑
4、CustomTabs
CustomTabs作为一个备用选项,因为它依赖于Chrome(准确来说是Chrome45以上版本)而且,鉴于国内的情况,手机安装Chrome的用户应该不多,不过毕竟还是有人用,中国人多嘛。不过很多比较轻或新的App都集成了(比如酷安和一些个人开发者的应用)。
这种方案,说白了就是调用Chrome的服务,所以,你不能对像集成WebView那样,做很多自定义处理,包括界面和功能。只能说是单纯的打开一个网页,功能上既然由Chrome提供技术支持,自然不缺,主要是界面和交互不能改,只能自定义标题相关属性(颜色,标题显示,图标),转场动画之类的。效果就是下面这样。
优点:非常方便,不需要自己解决WebView配置等问题,很多都可以共享Chrome(历史纪录,账号信息,书签等等)。
缺点:依赖Chrome,自定义性较差
使用场景:只能作为一个备用选项,仅仅内部打开外链的情况,如果可用,比自己封装的WebView可能要好用一点。