0%

ubuntu 16.04编译android6.0.0_r1

前言

最近一直在折腾这个android源码从Mac到docker再到ubuntu14.04,最后换了ubuntu 16.04,前前后后花了大概2个星期,感觉自己就是自带bug的男人。。。呵呵了,记录一下吧

虚拟机安装

安装虚拟机ubuntu 16.04,并分配200G的硬盘空间,3个处理器,以及4g的内存。

安装jdk7

安装openjdk7

1
2
3
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk

配置OpenJDK.打开/etc/profile文件:

1
sudo gedit /etc/profile

在末尾追加下面代码:

1
2
3
4
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

最终效果

下载依赖包

1
2
3
4
5
6
7
8
9
10
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4

repo工具下载&&配置git用户名

1
2
3
4
5
6
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
git config --global user.name "Simp1er"
git config --global user.email "simp1er_sec@163.com"

静待下载完毕

下载源码

1
2
3
4
5
6
mkdir source
cd ./source
echo export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/ >> ~/.bashrc
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.0_r1 --depth=1

repo sync

静待下载完毕,为了进一步让我们的代码可以在真机上运行,仅仅是下载这部分源码是不够的,我们还需要下载对应的二进制驱动,这里由于我的测试机为Nexus 5,我们从这里下载对应的二进制驱动并解压到源码目录下,并分别运行三个shell文件,

最后解压出vender目录到当前目录
repo sync出现错误

1
2
3
4
get: error: RPC failed; 
curl 56 GnuTLS recv error (-12): A TLS fatal alert has been received.
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up

解决办法

1
2
git config --global http.sslVerify false
git config --global http.postBuffer 1048576000

编译

设置编译器缓存

1
2
3
export USE_CCACHE=1
export CCACHE_DIR=ccache
prebuilts/misc/linux-x86/ccache/ccache -M 50G

导入android源码所需环境

1
source build/envsetup.sh //配置android源码所需环境变量以及其他

选择编译目标

这里我们选择userdebug模式

1
lunch aosp_hammerhead-userdebug


最后编译

1
make -j6

这里的6根据CPU核心个数乘以2加二,最后坐看听着风扇呼呼的吹,然后静待编译成功。

编译过程中出现错误

make: fork: Cannot allocate memory


原因: 内存不够
解决办法: 关机,增加虚拟机内存大小为8g

clang: error: linker command failed with exit code

貌似这是一个ubuntu 16.04会出现的问题,最终解决办法是将art/build/Android.common_build.mk文件第75行ifneq ($(WITHOUT_HOST_CLANG),true)改为ifeq ($(WITHOUT_HOST_CLANG),false)

参考文献

Ubuntu 18.04.3 LTS 编译安卓6.0.0_r1

记一次安卓系统源码编译刷机过程。

Android7.0Rom编译相关

编译Android源码的坑

git error: RPC failed; curl 56 GnuTLS

Android软件安全权威指南(jd链接)