2014-8-27-8916-QCom browser SWE第一次编译通过记录

前言


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就可以使用


发布了27 篇原创文章 · 获赞 2 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/wlia/article/details/42076129