关于chromium的android移植
转载时请注明出处和作者联系方式: https://mogoweb.net(betway官网首页) betway官网首页@gmail.com
在写下<<Chromium for Android第一手尝鲜>>这篇博客后,陆陆续续收到一些回馈,看来大家都还挺关注这个开源项目的。可能是这个标题取的有些哗众取宠,另有些读者产生了误解,为此,我在本文将说明一下我对于chromium的android移植的一些理解。
首先声明一下,我并没有在android平台上移植chromium,而是在一个专有的操作系统上移植。在移植的过程中,发现chromium中的android移植代码非常有参考价值,所以就一边研究android移植代码,一边做chromium的移植。所以说,总体来说,对于android开发,我只处在入门级的水平。好在有internet,英语阅读能力还行,遇到不懂的都可以上网找到答案。所以关于一些android的问题,我实在是没有能力解答。
其次,我现在是基于Content API做浏览器,而不是移植整个的chromium浏览器。chromium源码中包含了一个ContentShell例程,这是一个简单的浏览器外壳,严格来说,它算不上一个浏览器,不过具有成长为一个现代浏览器的潜质。
下面就一些读者关心的问题做一个说明:
1)Chrome for android开源了?
chrome for android并没有开源,不过google也放出了一部分移植代码,你可以从这里下载部分代码。不过其中只包含了android平台的移植代码,并没有包含完整的chrome代码,如果您想根据这份代码编译出Chrome.apk,恐怕要失望了。如果您希望修复Chrome for android内核的BUG,那这份代码就是你想要的了。里面包含了一个README.Chrome_for_Android_SourceDistribution,说明了如何编译libchromeview.so,以及如何替换官方版本的Chrome.apk中的libchromeview.so。
2)Chrome浏览器开源吗?
严格来说,Chrome浏览器并没有开源,开源的是chromium,但Chrome浏览器是基于chromium开源项目的,在windows/linux下,chromium浏览器和Chrome浏览器的差别非常小。android平台下,还无法build出chromium浏览器。Chrome for android是在一个私有分支上进行开发的,看不到源码。
3)目前chromium的android移植状况
chromium在两个层次上提供了API: 一个是Webkit API,test_shell就是在这个层次的示例程序。另一个是Content API,content shell是基于这个层次的API开发的例程。
chromium代码树上出现了越来越多的chromium移植代码,但只能编译出content shell,而且这个content shell非常不完善,如果需要基于这个开发浏览器,需要付出很多的努力。
4)ContentShell可以在android模拟器上运行吗?
可以,但需要android 4.0以上的版本,模拟器需要开启硬件加速。模拟器开启硬件加速的方法:
注意,需要添加GPU emulation属性,并且属性值设置为yes。
5)build content shell需要android源码么?
不需要。最新的trunk分支甚至已经包含了android sdk和android NDK的下载,您甚至不需要事先下载android SDK和android NDK。
6)代码可以调试吗?
可以,c++部分的代码可以使用gdb_content_shell调试。如果希望调试java部分的代码,可以尝试如下脚本创建android工程:
#!/bin/bash CURRENT_DIR="$(readlink -f "$(dirname $BASH_SOURCE)/../")" if [[ -z "${CHROME_SRC}" ]]; then # If $CHROME_SRC was not set, assume current directory is CHROME_SRC. export CHROME_SRC="${CURRENT_DIR}" fi if [[ "${CURRENT_DIR/"${CHROME_SRC}"/}" == "${CURRENT_DIR}" ]]; then # If current directory is not in $CHROME_SRC, it might be set for other # source tree. If $CHROME_SRC was set correctly and we are in the correct # directory, "${CURRENT_DIR/"${CHROME_SRC}"/}" will be "". # Otherwise, it will equal to "${CURRENT_DIR}" echo "Warning: Current directory is out of CHROME_SRC, it may not be the one you want." echo "${CHROME_SRC}" fi cp ${CHROME_SRC}/content/shell/android/java/src -r ${CHROME_SRC}/c4a/java/ find ${CHROME_SRC}/c4a/java -name ".svn" |xargs rm -r cp ${CHROME_SRC}/base/android/java/src -r ${CHROME_SRC}/c4a/java/ find ${CHROME_SRC}/c4a/java -name ".svn" |xargs rm -r cp ${CHROME_SRC}/content/public/android/java/src -r ${CHROME_SRC}/c4a/java/ rm ${CHROME_SRC}/c4a/java/src/org/chromium/content/common/common.aidl find ${CHROME_SRC}/c4a/java -name ".svn" |xargs rm -r cp ${CHROME_SRC}/media/base/android/java/src -r ${CHROME_SRC}/c4a/java/ find ${CHROME_SRC}/c4a/java -name ".svn" |xargs rm -r cp ${CHROME_SRC}/net/android/java/src -r ${CHROME_SRC}/c4a/java/ find ${CHROME_SRC}/c4a/java -name ".svn" |xargs rm -r cp ${CHROME_SRC}/content/shell/android/res -r ${CHROME_SRC}/c4a/java/ cp ${CHROME_SRC}/out/Debug/content_shell/libs -r ${CHROME_SRC}/c4a/java/ cp ${CHROME_SRC}/out/Debug/content_shell/assets -r ${CHROME_SRC}/c4a/java/
7)如何跟上最新chromium代码
这也是我一直希望有人能够回答的问题,chromium代码的更新太疯狂了,每天都有大量的提交,代码结构调整是常有的事情。我现在只能是选择某个版本的chromium源码作为基础版本,以后如何跟进chromium最新代码,我也没有想好。
转载时请注明出处和作者联系方式: 关于chromium的android移植(betway官网首页) betway官网首页@gmail.com
build libchromeview.so需要完整的ANDROID源代码树,不需要SDK,NDK。
1.chromium for ANDROID在一个完整的ANDROID源代码树中展开才可以BUILD,必须依靠有关的环境变量。
2.build android的过程将创建SDK和NDK。然后才可以build libchromeview.so。
3.chromium for ANDROID创建过程中实际需要若干个JAR文件。如果了解的话可以直接拷贝到相关的目录,省去build android的过程。
4.目前chromium for ANDROID严重依赖于chromium 18.0.x.166分支,但最新的CHROMIUM稳定版是22.x.x.x.毫无疑问,可以按文档在UBUNTU上轻松的BUILD出22.x.x.x。
5.chromium for ANDROID用JAVA重写了chromium中关于“BROWSER”的C++部分。但没有释放全部的JAVA源码(占至少70%)。如果自己尝试创建chromium for ANDROID的eclipse 的JAVA project至少需要3个工作日—代码树太大,必须手工找齐。
6.千万不要尝试跟踪最新的chromium 代码,特别是手头的机器配置不高时。BUILD非常非常费时间。一般的要求是4-8核的CPU,16GB的RAM,256GB的SSD。
7.PC版的chromium与chromium for ANDROID的架构差别极大。ANDROID至少砍了30%的代码,去掉了很多特色,比如ADDON,native client.
非常佩服。如果是为了修复内核BUG或者增加内核功能,在android源码树中编译libchromeview.so是可以的。但是缺少部分java代码,要自己根据接口来补齐这部分代码,3个工作日恐怕不够。将chrome for android的代码搬到22.x.x.x也不是很容易吧,毕竟接口发生了很多变化。
基于content shell的浏览器开发(PORT)有个缺点。开发出来的浏览器好像没有WEB remote debugging功能(自己添加一堆代码也行)。对WEB DEVELOPER,没有remote debugging可是很不方便。
更多Chromium for Android Java code被google放出来了。
hi,怎么我在https://src.chromium.org/chrome/releases/下的chromium最新版本都是9.0.X.0/啊,不是22.x.x.x,这样有没有问题啊?
你刷新一下看看,这个页面是一串长长的清单,最新的都已经到25.x.x.x了
仍然不够完整,总有些莫名其妙的问题。比如html的文本输入框实现就很不完善。
陪google玩,得做好被玩死的准备啊。