关于Chrome for Android
1, Chrome for Android与Chromium for Android
Chrome是google的一个商标, 所以我们谈及Chrome的时候特指由Google发布的Chrome浏览器,而Chromium则是Chrome浏览器的对应的开源项目(http://www.chromium.org/)。 简单的说Chrome即是在Chromium的源代码基础上做一些产品化的工作并由Google发布出来的浏览器。Chrome for Android亦是如此。
2, Chromium for Android的源代码
目前,Chromium for Android的源代码并没有完全开放出来。 开放出的元带埋在Chromium的源代码目录树中,只需要很少的配置即可变异出Android版本的Chromium所需要的核心模块。 在Chromium的源代码中, 主要的部分已经开源并可以工作(WebKit、多进程框架、页面渲染、基本的事件处理、单元测试模块以及一个用于测试的基本的浏览器Shell程序)。 可以采用Git来检出所有的源代码:
http://code.google.com/p/chromium/wiki/UsingNewGit
3, 编译Chromium for Android及测试运行Shell程序(Content Shell)
关于编译,具体可参照官方的链接:
http://code.google.com/p/chromium/wiki/AndroidBuildInstructions
有几点需要注意的是:
(1) 在gclient sync之前.gclient文件中必须有target_os = [‘android’], 以确保编译Android版本所需要的第三方库都能够被正确的检出。
(2) 编译X86版本时,先运行“. build/android/envsetup.sh –target-arch=x86”,官方的链接中并没有更新到最新。
(3) 目前只支持Linux下的编译,推荐使用64-bit的系统。
编译完成后便可以在你的设备/模拟器上运行Content Shell以测试基本的网页浏览功能。 Content Shell是一个包含了浏览/渲染网页功能的精简浏览器,它比完整的浏览器缺少了诸如多标签、历史记录管理、隐私模式等浏览器外围功能,但是却包含了浏览网页的所有基本功能,可以认为它是一个MiniBrowser。
4, Chromium/Chrome for Android的多进程架构
与桌面版的Chrome相同,Chrome for Android同样是多进程架构。
$ adb shell ps |grep chrome u0_a14 30488 133 640160 108380 ffffffff 40073823 S com.android.chrome u0_i183 30507 133 586036 51800 ffffffff 40073823 S com.android.chrome:sandboxed_process0 u0_i185 30607 133 589576 54368 ffffffff 40073823 S com.android.chrome:sandboxed_process2
其中com.android.chrome为browser进程,com.android.chrome:sandboxed_process*为renderer进程。类似的Content Shell也是同样的实现:
$adb shell ps |grep content u0_a82 30654 133 802692 95876 ffffffff 40073823 S org.chromium.content_shell u0_i186 30683 133 742732 54528 ffffffff 40073823 S org.chromium.content_shell:sandboxed_process0
Chrome for Android的renderer进程是Android Service, 而其sandbox则依赖于Android (4.1, Jelly Bean)的UID isolation(http://source.android.com/tech/security/#the-application-sandbox)特性。
5,Chromium for Android的渲染
目前Chromium for Android仅支持hardware-accelerated compositing,且没有像其他平台一样采用GPU进程,而是使用在Browser进程里的GPU线程。 硬件加速的实现依赖于Android SurfaceView。