技术标签: chromium webview open source jni ndk Browser webkit
Android KitKat一项重要的更新就是WebView采用Chromium/Blink渲染引擎,本文简要的叙述了新版WebView的主要特性、需要进一步改进的地方以及WebView的代码结构等。
WebView是Android平台上一个非常重要的系统组件,用于将一个显示Web页面的窗口部件view嵌入到应用程序,并提供了一组API接口允许开发者定制页面加载和绘制的行为,比如响应页面加载状态的变化和弹出JavaScript对话框的请求等等。自Android 1.0发布以来,WebView被广泛地使用在应用程序中,最典型的当属Stock浏览器了,它就是基于WebView开发的一个浏览器程序。关于详尽的文档描述,请参看WebView的官方文档。
早期的WebView (在Android 4.4以前)是基于WebKit实现的,可以简单理解为直接在WebKit代码库中增加一个分支,解决Android平台特定的页面渲染方式以及通过JNI接口将WebKit的功能桥接为Java层的API接口。在图形方面,WebView和Android平台一样,采用的是Skia图形库,但没有启用硬件加速,渲染性能非常不好,这也是许多使用者经常抱怨的诟病之一。
随着Android 4.4 (KitKat) 平台的发布,基于Chromium开源项目的WebView成为KitKat平台的一大亮点。新版WebView采用了与Chrome浏览器相同的Blink渲染引擎,v8 JavaScript引擎,网络库以及内存分配器,在HTML5特性支持方面不仅与Chrome保持了更高的一致性,而且还弥补了旧版WebView在渲染性能方面的不足。Android平台上所有使用WebView的应用程序都将无缝透明地受益于新版WebView的特性支持和性能提升。
目前,Android KitKat上的WebView是基于Chromium 30.0.0.0,而Chromium开源项目一直以6周一次的迭代周期在快速演进,Google官方并没有给出一个明确的计划什么时候以什么方式升级WebView组件,也许是通过GMS,但尽管如此,就目前的情形来看,新版WebView只能在Android 4.4系统上使用。这就意味着目前市面大量Android 4.3或以前的设备都不能使用新版的WebView,享用不到新版WebView引入的好处。为什么其他非4.4的设备上不能使用呢?原因主要是Chromium WebView必须与AOSP (Android Open Source Project) 源代码一起才能编译,不能单独从Chromium的代码库中编译一个可以独立安装的软件包。
确切地说,在AOSP中WebView是由三部分代码组成:
如果编译一个完整版的WebView,需要先要下载整个AOSP的代码,运行source build/envsetup.sh和lunch <target>命令后,进入framework/webview目录执行mm –j8编译WebView模块,最后在out目前将会得到libchromiumwebview.so和libwebkit_plat_support.so两个动态链接库,将这两个so文件拷贝到目标设备的/system/lib目录下,重启设备后就可以使用你自己编译的WebView了。
实际上,也从直接从Chromium代码库中编译WebView,但这个WebView并不是一个完整的WebView。前面说到,WebView还包括了Android平台支撑代码,而Chromium代码库并没有包含这部分代码,所以编译出来的WebView只有纯软件的渲染模式。因此,它对帮助验证一个WebView功能性方面的问题还有有用的,对于优化渲染性能只能从AOSP编译了。
根据chromium.org官方文档,下载chromium代码库,配置好环境后运行:
编译成功后,在out/Release/apks目录中会有一个名为AndroidWebView.apk的文件生成,它是一个Shell程序,提供了一个简单的UI,方便开发者验证WebView的核心功能,但AndroieWebView.apk并没有直接使用android.webkit.WebView,而是基于WebView的核心类AwContents实现的,查看manifest文件你会发现它将android:hardwareAccelerated设置为false了,也就是说应用程序没有开启硬件加速,相应地WebView也只是工作在软件渲染模式下。如果强制把android:hardwareAccelerated设置为true,这个Shell程序则不能正常显示网页了,这是意料之中的,硬件加速渲染模式必须要与AOSP一起编译才会有。
[1] WebView SDK,http://developer.android.com/reference/android/webkit/WebView.html
[2] Web程序的迁移,http://developer.android.com/guide/webapps/migrating.html
[3] WebView for Android, https://developers.google.com/chrome/mobile/docs/webview
[4] 远程调试 for Android, https://developers.google.com/chrome-developer-tools/docs/remote-debugging
[5] Android上编译Chromium, https://code.google.com/p/chromium/wiki/AndroidBuildInstructions
文章浏览阅读3.8k次。使用hibernate的Sql方式查询有count的sql时,返回的List的类型为BigDecimal,如果没有表记录,list也不会为null,而是list.get(0)为null,list.size()=1。String sql = "select round(sum(t.data_size/1024),2) from jedis_info t"; //_hibernate返回查询结果的写法
文章浏览阅读1.9k次。wordpress排版插件Are you looking for a WordPress typography plugin to improve your design? Typography plays an important role in web design. It improves readability and the time users spend on your websit..._wordpress文章图片排版
文章浏览阅读352次。Til the Cows Come HomeTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 41196 Accepted: 13984DescriptionBessie is out in the field and wants to get back t
文章浏览阅读494次。【代码】css轮播纵向滚动。_css 纵向滚动
文章浏览阅读7.2k次,点赞2次,收藏9次。网上介绍的都是假的,静态库不能编译过。 本人在xp 32, win7 32, win7 64 下面均试过, 输出同样的结果。 只有编译动态库,引用动态库才能成功。一共两种情况, 第一,如果是使用 nmake /f makefile.vc mode=static VC=10 , 此处为release版本,如果添加DEBUG=yes为debug版本。则在新建工程,使用libcurl库时时出现: ..._libcurl idntoascii
文章浏览阅读1.5k次。注:应用于对每个数组一个固定阈值的。功能:函数适用于多通道数组的固定阈值,函数典型用于一个灰度图像输出的二进制图像(compare 函数也能达到这个目的),或者是为了消除噪声,由此过滤出太小的或者太大的像素。此函数提供了几种阈值类型,他们由参数type来决定。特殊值THRESH_OTSU (大津法)或THRESH_TRIANGLE可以和以上值组合使用。在此类情况下,函数决定最优的阈值使用Otsu或 Triangle算法,并使用它替代确定的阈值。注意: Otsu和Triangle法只能实现于8位单通道_cv threshold 多通道
文章浏览阅读700次。中文名称:罪恶之城英文名称:Sin City别名:原罪之城/罪恶都市资源类型:DVDRip发行时间:2005年04月01日电影导演:昆廷·特拉蒂诺 Quentin Tarantino罗伯特·罗德里格兹 Robert Rodriguez弗兰克·米勒 Frank Mi电影演员:布鲁斯·威利斯 Bruce Willis鲁特格尔·哈尔 Rutger Hauer迈克尔·麦德逊 Michael Ma..._乔什哈奈特sin city
文章浏览阅读1.8k次。玛丽.布莱克(Mary Balck)1955年5月22日生于艾尔(Eire)。 玛丽是深具音乐传统的布莱克家族的一员, 并与之一起灌唱片和演出. 她的父亲是一名小提琴演奏师,母亲是歌唱演员. 她的早期音乐生涯是在都柏林的民歌酒吧里度过的,但是在1983年,"玛丽布莱克"扩充到4名成员, 而且,她的专集还获得了爱尔兰独立音乐艺术奖,很显然,她们想有点大的作为. 此后不久,德.当那(De Dannan
文章浏览阅读1.6w次,点赞8次,收藏26次。此贴总结各种错误。总结的多了之后会加以分类。1、解决Maven项目pom.xml文件报xxx\target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径)问题:(只需简单地clean all projects)http://www.cnblogs.com/zhfei/p/5286827.html(一直更新)_scala软件包名称 '' 与文件路径 'src' 不对应
文章浏览阅读3.2k次,点赞2次,收藏18次。1、为什么使用redis分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。回答:如下所示,分为两点(一)性能如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。_redis优缺点
文章浏览阅读128次。微服务是近年来备受关注的话题,相比于传统的SOA而言,更容易理解,也更容易实践,它将“面向服务”的思想做得更加彻底。有人说它非常好,但就是“玩不起”,why?微服务是一种分布式系统架构,它建议我们将业务切分为更加细粒度的服务,并使每个服务的责任单一且可独立部署,服务内部高内聚,隐含内部细节,服务之间低耦合,彼此相互隔离。此外,我们根据面向服务的业务领域来建模,对外提供统一的API接口。微服务的思想不只是停留在开发阶段,它贯穿于设计、开发、测试、部署、运维等软件生命周期阶段。_springcloud微服务架构
文章浏览阅读458次。http://nyoj.top/problem/61题目描述:小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n)。...