因为公司的手机项目采用混合开发模式,使用了sencha touch的js框架,不同的手机平台对此的兼容方面有些差异,公司指派我来解决这个问题。首先分析下问题的原因在什么地方,如果我们使用sdk提供的webivew加载html文件是调用的系统内置的webkit来解析渲染页面。而不同手机生产厂商对浏览器有些定制,因此造成兼容方面的差异,如果我们能使用自己的浏览器内核去解析,这个问题也就解决了。好在google有个chromium的开源项目可以利用,在android4.4系统中,google已经将基于webkit的webview实现换成了基于chromium的webview实现。也就是说如果大家都使用android4.4的系统也就不存在兼容的问题,但是必竟还是有许多其他低版本的手机存在,而且手机厂商都会进行一些定制,所以还是要靠在项目中来解决这个问题。
为了验证chromium确实能在不同手机上跑通sencha touch(在测试的时候也就小米手机不能执行),我首先对chromium项目进行了编译,生成了apk文件。怎么来做呢,google公司的网站上其实有步骤了,不过全是英文(事实说明英文对于一个程序猿真的很重要,自己平时还要多学些专业的英语,不能只是能看懂文档)。
http://www.chromium.org/Home 这是google chromium项目的网址,按着上面的步骤来就能成功编译了,不过国内去下载源码真心慢啊,得有些耐心。
我使用的是ubuntu,所以下面的步骤都是按照在Linux系统的步骤进行的。
一:首先是要获取源码,google有一套自己的源码管理,所以要先安装一些工具才可以。既然是开源项目,那么你也就可以对源码进行修改,而且也可以提交给google,在这儿google要求提交者要有一个svn账号。我只是要下载下来进行编译,所以这一步略过。
1.安装git版本控制工具(linus大神的两大成就之一,膜拜)。Linux系统直接一条命令搞定:sudo apt-get install git
2.安装depot_tools,同样很简单:git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git 然后配置环境变量 打开用户的配置文件 vi .profile 添上这么一句:$ export PATH="$PATH":
`pwd`/depot_tools保存,这里的pwd就是你下载好的depot_tools的路径。
3.在下载好的depot_tools中有下载chromium源码的脚本文件,只需要运行其中的命令就可以下载啦。
在命令行中输入这条语句 fetch android --nosvn=True 然后你就可以看到开始下载了,你要做的就是等待。
4.下载成功以后:会在你的当前目录,也就是你执行下载命令时所在的目录下生成一个src文件
cd src
./build/install-build-deps-android.sh
二:准备编译
编译之前需要执行配置GYP
:echo "{ 'GYP_DEFINES': 'OS=android', }" > chromium.gyp_env然后要确保你已经安装好了jdk,并且配置好了环境变量。在Linux系统下执行sudo apt-get install openjdk-7-jdk默认安装的是open-jdk,如果你想安装oracle jdk,可以执行下面的命令
sudo apt-get install python-software-properties sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java7-installer
然后执
java -version
你会看到下面的信息:
这就说明你已经安装成功了。
java version "1.8.0" Java(TM) SE Runtime Environment (build 1.8.0-b132) Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
open jdk和oracle jdk有什么异同呢,网上介绍的很多,这里就不介绍了,想了解的可以google去(做一个环保的程序猿,请从拒用百度开始)
现在就可以来进行编译了
这里我是对android的webview进行实验,所以编译了这个版本,google的网站还有其他两个版本的编译,我没有实验,感兴趣的可以自行编译出来看看。~/chromium/src$ ninja -C out/Release android_webview_apk
编译过程也十分缓慢,实在不想等,可以出去转转。编译好之后,会out/Release/Android_webview_apk/下生成一个
AndroidWebView.apk
的apk文件.