前言
QCom高通平台采用的浏览器没有直接集成在平台源代码中,需要单独下载和编译。项目主页:https://www.codeaurora.org/xwiki/bin/Chromium+for+Snapdragon/WebHome
8916 1.1(QRD)截止2014年8月1日release note中SWE的信息:
本文只是对高通官网上面编译流程的补充
Build machine requirements
https://www.codeaurora.org/xwiki/bin/Chromium+for+Snapdragon/Setup请按照该地址配置环境。我只对其中某些小节做一点补充。
Linux distribution
Internally, our development platform has been a variant of Ubuntu 12.04 (Precise Pangolin)
请使用ubuntu12.04进行编译,使用10.04不但不能成功,还会破坏APT的包,很难修复。请不要用10.04配置环境。
如果电脑里面同时安装VMWare和VirtualBox,会导致VMWare workstations桥接模式下不能自动获取IP地址,解决办法是禁止掉vbox的虚拟网卡 VirtualBox Host-Only Network
Installing build dependencies
git clone git://codeaurora.org/quic/chrome4sdp/chromium/src
build/install-build-deps.sh build/install-build-deps-android.sh
第一个命令执行时可以带上参数 --no-chromeos-fonts .因为要访问googleapis,不使用代理是会失败的。
build/install-build-deps.sh --no-chromeos-fonts
subprocess.CalledProcessError: Command '['curl', '-L', 'https://commondatastorage.googleapis.com/chromeos-localmirror/distfiles/notofonts-20121206.tar.gz', '-o', '/usr/local/share/fonts/chromeos/notofonts-20121206.tar.gz']' returned non-zero exit status 35
这一步通过apk,dpkg按照编译相关的包(有兴趣可以通过 grep -rHniE "apt|dpkg" build/install-build-deps.sh 和build/install-build-deps-android.sh简单了解)。执行时间较长。受网络连接影响较大。可以在使用代理的情况下多做几次这两步。因为安装包安装后不会重复安装,所以这两部执行的时间会越来越短。如果包都安装好了,很快就会结束。
如果很快执行完成并且有error表示执行过程是有问题的。
如果这两部反复执行后都不顺利,也没关系。可以直接执行后面的步骤,
Oracle Java JDK
通过java --version就可以检查。虚拟机里面应该配置的有,没有就自己再配置一下。
$ java -version java version "1.6.0_45" Java(TM) SE Runtime Environment (build 1.6.0_45-b06) Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
Build the code
请按照该链接执行https://www.codeaurora.org/xwiki/bin/Chromium+for+Snapdragon/1599-qrd_build_instructions
这里做一些补充说明
我工作环境中SWE的目录结构。
$ tree msm8916_swe/ -L 1 msm8916_swe/ ├── depot_tools ├── gitdiff.sh ├── gitreset.sh ├── gitstatall.sh └── src
其中gitdiff.sh,gitreset.sh,gitstatall.sh是我写的小脚本。
如下内容仅是个人笔记:
src下面有很多项目,都使用git管理代码。可以猜想chromium项目可能会使用repo进行管理,这里简单省事,就进入每个git仓库执行git diff, git reset --hard, git status .
由于我的电脑从移动硬盘拷贝代码时,会导致git一些状态改变,但是实质上并没有修改文件,所以要进每个git库git reset --hard.通过脚步gitreset.sh完成。
PS:有同学说gclient本身就是源码管理工具,有这些功能。。。
Sync and Build
gclient sync -n --no-nag-max
gclient sync -n --no-nag-max cd src
但是鄙人如此执行以后,在之后的步骤执行编译时提示
gyp:Undefined variable use_system_icu in src/build/all.gyp
然后进入src执行gclient sync -n --no-nag-max再执行后面的编译就没问题了。
GYP_DEFINES="$GYP_DEFINES clang=0" gclient runhooks -v
这一步是从googleapi下载很多tar包,如果要按照编译工具执行则必须使用代理。问题是,这里每次下载tar包都会把已有的包删掉,而下载的过程中由于网络不问题,经常下载失败。
解决方法打印Log,知道需要下载的包,通过其他办法将这些包下载,放入其指定位置,不让gclient执行的脚本去进行删除,下载这些包,直接执行下载之后的操作。
需要编译的包列举如下,如果因为机器不一样而导致包不同,只需要根据报错,重新下载,放入即可):
$ ls src/native_client/toolchain/.tars/ binutils_arm_i686_linux.tgz gcc_arm_i686_linux.tgz gcc_libs_arm.tgz naclsdk_pnacl_linux_x86.tgz newlib_arm.tgz binutils_arm.tgz gcc_arm.tgz naclsdk_linux_x86.tgz naclsdk_pnacl_translator.tgz toolchain_linux_x86.tar.bz2
工具脚步修改
1 diff --git a/build/download_toolchains.py b/build/download_toolchains.py 2 index 16240fc..7a20031 100755 3 --- a/build/download_toolchains.py 4 +++ b/build/download_toolchains.py 5 @@ -234,12 +234,18 @@ def SyncFlavor(flavor, urls, dst, hashes, min_time, keep=False, force=False, 6 # Put it in the download dir and add back extension. 7 filepath = os.path.join(download_dir, '.'.join([filepath, ext])) 8 filepaths.append(filepath) 9 + print "leo comment out download_utils.SyncURL" 10 + print download_dir 11 + print filepath 12 + print filepaths 13 + print url 14 + #leo add 15 # If we did not need to synchronize, then we are done 16 - if download_utils.SyncURL(url, filepath, stamp_dir=stamp_dir, 17 - min_time=min_time, hash_val=hash_val, 18 - stamp_index=index, 19 - keep=keep, verbose=verbose): 20 - need_sync = True 21 + #if download_utils.SyncURL(url, filepath, stamp_dir=stamp_dir, 22 + # min_time=min_time, hash_val=hash_val, 23 + # stamp_index=index, 24 + # keep=keep, verbose=verbose): 25 + need_sync = True 26 index += 1 27 28 if not need_sync: 29 diff --git a/build/linux/install-arm-sysroot.py b/build/linux/install-arm-sysroot.py 30 index 56be4a57..a96cd81 100755 31 --- a/build/linux/install-arm-sysroot.py 32 +++ b/build/linux/install-arm-sysroot.py 33 @@ -50,13 +50,13 @@ def main(args): 34 return 0 35 36 print "Installing ARM root image: %s" % sysroot 37 - if os.path.isdir(sysroot): 38 - shutil.rmtree(sysroot) 39 - os.mkdir(sysroot) 40 + #if os.path.isdir(sysroot): 41 + # shutil.rmtree(sysroot) 42 + #os.mkdir(sysroot) 43 tarball = os.path.join(sysroot, TARBALL) 44 - subprocess.check_call(['curl', '-L', url, '-o', tarball]) 45 + #subprocess.check_call(['curl', '-L', url, '-o', tarball]) 46 subprocess.check_call(['tar', 'xf', tarball, '-C', sysroot]) 47 - os.remove(tarball) 48 + #os.remove(tarball)
ninja –C out/Release swe_system_package
这一步请用手敲,不要复制粘贴。正确的应该是ninja -C out/Release swe_system_package
Integrate SWE Android Package in Android Build
src$ find out/ -name *.zip out/Release/swe_system_package.zip
预制入系统按照官网的流程。
生成的目录是
src/out/Release/swe_system_package$ tree . . ├── Android.mk ├── apps │ ├── Android.mk │ └── Browser.apk ├── libs │ ├── Android.mk │ ├── libstlport_sh_r8e.so │ ├── libswenetxt_plugin.so │ ├── libsweskia.so │ ├── libswev8.so │ └── libswewebviewchromium.so └── README
把apk push进system/app, libs push进system/libs就可以使用