如何编译Chrome for Android

Screenshot_2012-12-11-10-21-43

 

 

 

编译Chrome for Android目前有两种方式,一是在ROM编译环境下编出libchromeview.so,二是用Chromium主干的代码编译出ContentShell(一个测试用的外壳,只包含核心的代码,不包含Chrome的扩展特性,说明参见http://www.chromium.org/developers/content-module),这两种方式目前都只支持在64位Ubuntu下面进行。


在ROM编译环境下编出libchromeview.so
这种方式比较简单,下载当前版本Chrome for Android的tarball(http://chromium-browser-source.commondatastorage.googleapis.com/chrome_android_tarball.html),解压后把Chrome目录放入ROM目录的$ROM/external下面,然后按照README.Chrome_for_Android_SourceDistribution里面的说明进行编译即可。
  1. 编译出来的libchromeview.so,可以按照README.Chrome_for_Android_SourceDistribution说明打一个新的Chrome.apk运行,也可以直接替换掉手机里面/data/data/com.android.chrome/下面的libchromeview.so运行;
  2. 不知道是不是版本不匹配的关系,用最新的Chrome搭配自己编译的libchromeview.so,复杂的网页会崩溃,简单的网页就还OK;
  3. 可以输出日志(#include “/base/logging.h”),但是没法调试和跟踪(理论上应该可以使用命令行gdb进行调试,不过配置起来应该比较麻烦,没有去尝试);

用Chromium主干的代码编译出ContentShell
这种方式比较麻烦,具体步骤请参考(https://code.google.com/p/chromium/wiki/AndroidBuildInstructions)。
  1. 下载Chromium的tarball(http://chromium-browser-source.commondatastorage.googleapis.com/chromium_tarball.html)后需要使用gclient sync -nohooks同步新的代码,tarball里面的svn记录是1.6版本的,如果你的svn是1.7版本,需要先downgrade到1.6版本;
  2. 同步最新代码的时候,如果提示guava和jsr-305这两个目录同步错误,需要先移除$SRC/third_party/guava和$SRC/third_party/jsr-305后再重新同步(后续新的tarball应该不需要了);
  3. gclient runhooks一直失败,不过貌似也不影响编译;
  4. 如果编译时提示缺少$SRC/build/util/LASTCHANGE文件,可以从上面的Chrome for Android的tarball里面copy过来;
  5. 运行build/android/adb_gdb_content_shell就可以使用gdb进行调试;
  6. adb_gdb_content_shell实际上调用了adb_gdb,adb_gdb在中文Ubuntu环境下有一个bug,第861行”if [ “$STATE” != “Running” ]; then“可能会失败,因为在中文环境STATE实际值可能是”运行中“,这一行需要改成”if [ “$STATE” != “运行中” ]; then“;
  7. 如果提示权限不够,可以把849,859这两行改成”(“$ADB” shell su -c “$TARGET_GDBSERVER :$TARGET_PORT \
    –attach $PID” > $GDBSERVER_LOG 2>&1) &“,不过需要已Root的设备和开启ADB的Root权限;