android8.0编译记录
来源:互联网 发布:中国植物数据库 编辑:程序博客网 时间:2024/05/07 14:04
一、下载前准备
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 -j82,接下来就是漫长的等待,如果出现了问题就针对性解决,我编了四五次终于成功了,附一张截图
四、下面是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就好了。
- android8.0编译记录
- Android8.0
- Android8.0 Setupwizard 定制
- Android8.0广播使用
- Android8.0 安装apk
- Android8.0 AlarmManagerService
- Android8
- 如何在本机编译android8.0环境,适用于Ubuntu16.04
- Android8.0曝光--新功能简化
- Android8.0“未知来源”安装
- Android8.0 Oreo新特性
- Android8.0 ZenMode 静音模式
- Android8.0 修改默认音量
- Android8.0新系统刷机新尝鲜
- android8.0的vdex文件格式分析
- android8.0/android O 新特性
- Android8.0有关行为变更小结
- Android8.0新特性和API
- Linux查找某个大小范围内的文件
- 排序算法——选择排序
- SSH整合项目修改字段不成功但页面可以跳转解决办法
- android 活动的启动模式
- HDU 2356 Find a multiple(鸽巢原理)
- android8.0编译记录
- 简单实现 Android M 指纹识别(附源码)
- CFI定义
- maven+ssm框架搭建+oracle
- 1077. Kuchiguse (20)
- SpringMvc+Mybatis实现一个简单人事管理系统(三)
- zoj 3556 How Many Sets I(容斥原理)
- Dijkstra算法和Floyd算法概述
- mint-ui —— cell swipe的使用