android8.0编译记录

来源:互联网 发布:中国植物数据库 编辑:程序博客网 时间:2024/05/07 14:04
Android8.0的正式版在8月21日正式发布,我打算亲自动手编一个可以跑在nexus 6p上的rom测试一下,下面是编译过程中的一些记录

一、下载前准备

1,我使用自己的mac进行编译,限于存储容量,另外准备了一个移动硬盘。首先要将移动硬盘格式化为区分大小写的,可以使用ma自带的磁盘工具来完成。

2,安装好jdk,最好使用最新的jdk版本来编译Android8.0,一开始没有使用最新的jdk,编译到40%左右的时候遇到了编译错误,重新升级jdk才解决。

3,确保电脑上make、git都已经正确安装

4,安装xz,源码编译到后面好像需要解压缩之类的,可以使用brew进行安装,命令是 brew install xz,非常简单。如果没有安装brew,可以参照我文章后面介绍的进行安装。

二、源码下载

1,由于谷歌被墙,所以我采用清华镜像来进行源码下载。清华镜像关于Android源码的网址为https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

2,下载repo工具。repo是一个Python写的脚本,它建立在git上。通过下面几行命令进行repo的设置和下载

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo
上面网址有问题的话可以使用下面的来替换

https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
3,修改repo脚本

打开~/bin/repo文件,将

REPO_URL = 'https://gerrit.googlesource.com/git-repo'

替换成

REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'

4,开始下载

为了加快代码下载速度,我首先下载了清华镜像中的初始化包,网址为 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar。

下载完成后进行解压,会出现一个aosp目录,进入到这个目录中继续进行代码的下载。

通过下面的命令可以下载代码的master分支代码

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
如果需要某个特定的 Android 版本(列表),可以通过-b来选择分支

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1
接着开始进行代码的同步,使用下面的命令行

repo sync
如果没有问题的话,repo sync执行完毕后就会下载一份完整的代码。当然了,大多数情况下可能不会一次就成功,文章最后是我下载和编译过程中遇到的一些问题以及解决方案。

三、源码编译

1,进入到aosp目录,执行下面的命令

   source build/envsetup.sh #初始化编译环境   lunch  #选择编译目标,我选择的是Nexus6p所对应的angler,即aosp_angler-userdebug   make # 或者 make -j8
2,接下来就是漫长的等待,如果出现了问题就针对性解决,我编了四五次终于成功了,附一张截图


四、下面是Android8.0源码编译过程中出现的错误

1,我使用的清华镜像进行代码下载,在下载代码时出现了Exited sync due to fetch errors,原因应该是下载的负载过重,所以把下载的线程数减少就可以了,使用repo sync -f -j4解决了这个问题

2,Jack server failed to (re)start, see Jack server log Unsupported curl, please use a curl not based on SecureTransport Unsupported curl, please use a curl not based on SecureTransport ninja: build stopped: subcommand failed. make: *** [ninja.intermediate] Error 1这个错误说明使用的curl是基于SecureTransport的,需要重新安装一个其它的。在安装curl时可以使用brew进行安装,由于我电脑上没安装brew,所以我首先对brew进行了安装。brew类似于ubuntu上的apt-get,它的安装可以通过一行命令来完成:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew安装完成后,通过下面两行命令完成新的curl的安装和环境变量配置

brew install curl--with-opensslexport PATH=$(brew--prefix curl)/bin:$PATH

3,build/core/base_rules.mk:238: error: external/googletest/googletest: MODULE.TARGET.STATIC_LIBRARIES.libgtest already defined by external/googletest/googletest. 16:57:43 ckati failed with: exit status 1在编译过程中多次遇到这个问题,问题说的是某些东西重定义了,后来多方查找,原来是我在mac的环境变量中设置过NDK_ROOT和SDK_ROOT,也就是NDK和SDK的路径,然后后面编译Android源码时会与它们产生冲突,所以暂时把设置过的NDK和SDK环境变量取消掉,就可以解决这个问题了。

4,Out of memory error (version 1.3-rc6 'Douarn' (441800 22a11d4b264ae70e366aed3025ef47362d1522bb by android-jack-team@google.com)).GC overhead limit exceeded.

(1)首先停止jack server的运行;

(2)去prebuilts/sdk/tools目录下执行 jack-admin kill-server以杀死Jack server;

(3)然后打开jack-admin文件,在文件中搜索JACK_SERVER_COMMAND,然后将JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME",改为JACK_SERVER_COMMAND="java -Xmx3g -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"。

也就是添加了-Xmx3g选项

5,编译过程中出现了一次java编译器报错,我使用的jdk版本是1.8.0_24,然后升级成了1.8.0_144,问题解决

6,Jack server failed to (re)start, try 'jack-diagnose' or see Jack server log

使用jack-admin kill-server命令杀死后重新make就好了。



原创粉丝点击