首页 > chromium研究 > 关于chromium的android移植

关于chromium的android移植

2012年10月25日 发表评论 阅读评论

转载时请注明出处和作者联系方式: http://mogoweb.net mogoweb@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移植 mogoweb@gmail.com

分类: chromium研究 标签: ,
  1. gameplayer
    2012年10月26日22:26 | #1

    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.

  2. alex
    2012年10月30日08:44 | #2

    gameplayer :
    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也不是很容易吧,毕竟接口发生了很多变化。

  3. gameplayer
    2012年11月16日17:40 | #3

    基于content shell的浏览器开发(PORT)有个缺点。开发出来的浏览器好像没有WEB remote debugging功能(自己添加一堆代码也行)。对WEB DEVELOPER,没有remote debugging可是很不方便。

  4. gameplayer
    2012年11月19日19:34 | #4

    更多Chromium for Android Java code被google放出来了。

  5. 飞飞
    2012年11月20日09:58 | #5

    hi,怎么我在http://src.chromium.org/chrome/releases/下的chromium最新版本都是9.0.X.0/啊,不是22.x.x.x,这样有没有问题啊?

  6. alex
    2012年11月20日10:29 | #6

    飞飞 :
    hi,怎么我在http://src.chromium.org/chrome/releases/下的chromium最新版本都是9.0.X.0/啊,不是22.x.x.x,这样有没有问题啊?

    你刷新一下看看,这个页面是一串长长的清单,最新的都已经到25.x.x.x了

  7. alex
    2012年11月20日10:30 | #7

    gameplayer :
    更多Chromium for Android Java code被google放出来了。

    仍然不够完整,总有些莫名其妙的问题。比如html的文本输入框实现就很不完善。

  8. Good
    2012年11月26日14:51 | #8

    陪google玩,得做好被玩死的准备啊。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.