Kitkat的改变
Google为了加强WebView的功能,在Kitkat引入了Chromium内核。但还是存在着编辑的bug。
我所知道的一个bug是:
Kitkat版WebView在删除Html标签时处理不好,例如<img>
标签,就无法删除。点击删除时直接越过此元素,将光标定位在图片前方,对图片不做处理。
当然,这个bug在Android 5.0 修复了。
Lollipop新策略
Although WebView has been based on Chromium since Android 4.4, the Chromium layer is now updatable from Google Play.
As new versions of Chromium become available, users can update from Google Play to ensure they get the latest enhancements and bug fixes for WebView, providing the latest web APIs and bug fixes for apps using WebView on Android 5.0 and higher.
可见在Lollipop里,可以通过GooglePlay来更新Chromium内核。
但是问题来了:
- 国内容易更新么?
- 如果不是自动更新,用户会手动更新么?当然GooglePlay是自动更新,那国内手机没有自己市场的厂商呢?
- Lollipop以前的版本怎么办? Lollipop目前只有很少用户可以更新。
探索新的富文本编辑方案
显然,即便是有了Lollipop的解决方案,但问题依然很多。我们还是需要一个替代方案,来保证我们在所有的Android手机上表现一致。
这个方案就是在应用中集成Chromium。
由于自己编译Chromium的难度较大,于是转而寻找编译好的Chromium库来使用。
需要声明的是:Chromium内核只能在Android 4.0以上才能使用,之后提到的所有Chromium库都只能在4.0以上平台使用。
过渡方案
最初在寻找替代方案的时候,应该是2013年10月左右,找到了两个Chromium库:
-
chromeview
这个库封装的较好,但是有一个致命的bug是不能滚动。
README中声明:Attempting to scroll the view (by swiping a finger across the screen) does not update the displayed image.
However, internally, the view is scrolled.
This can be seen by displaying a stack of buttons and trying to click on the topmost one.
This issue makes ChromeView mostly unusable in production.注:这个库的README最新声明里面推荐了Crosswalk,作者还是很用心的。
-
android-chromium
这个库整体稳定,不存在上面的bug。用它作为编辑器差不多一年,没有出现什么问题。
但在今年6、7月的时候,突然间发现在三星新出的几款平板上(搭载了Kitkat)表现为花屏,屏幕上出现了各种颜色的横条,无法进行编辑。其他搭载了Kitkat的手机当时没有发现过什么问题。
这里说一下这个库,自从作者看到Kitkat使用Chromium后,作者就声明不再更新了,其实差不多一年前就已经不更新了。
这个库使用起来比较麻烦,需要自己再进行封装,甚至连onPageFinished都需要自己来做。
可以看到,上面的替代方案,到今年6、7月,实际上已经无法使用。
而且非组织维护的代码,通常都有些不可靠的意味。
于是不得不继续寻找替代方案。终于在Google I/O上看到了希望 —— Crosswalk
Crosswalk入门
上面的链接可以看到Crosswalk的介绍,Crosswalk种种吹牛逼的描述我就不写了。
写一下我的使用感受:
- 不用费力搞什么自己封装了,直接像用WebView一样使用。
在使用android-chromium这个库时,不仅要自己封装API来方便使用,还要操心Chromium的初始化,甚至还需要在清单文件里写一堆关于Chromium的东西,用来帮助Chromium建立单独的进程(Crosswalk只会创建Chromium的线程,不需要独立进程)。 - Crosswalk由组织维护,比个人维护强多了。
- 跟随最新的Chromium不断更新,js等不用担心有函数没法使用。而且不断更新过程中,肯定也会修复以前存在的bug,稳定性也是不用担心的。
最新稳定版Crosswalk基于Chromium38编译。
注:此库也可以配合Cordova(PhoneGap)使用。
OK,感受说完,上教程。
集成到应用中
- 下载zip包,解压后导入。
- 关联此Library。
-
在清单文件中写入下列权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
注:使用过程中,观察Logcat可以看到报需要蓝牙权限,可以不用管它,不添加蓝牙权限可以正常使用。
此外,使用XWalkView必须开启硬件加速。XWalkView needs hardware acceleration to render web pages. As a result, the AndroidManifest.xml of the caller's app must be appended with the attribute "android:hardwareAccelerated" and its value must be set as "true".
android:hardwareAccelerated : The default value is "true" if you've set either minSdkVersion or targetSdkVersion to "14" or higher; otherwise, it's "false".
在清单文件Application中声明即可。
<application android:name="android.app.Application"