前言 最近一直在折腾这个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 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/ >> ~/.bashrcrepo 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=1export CCACHE_DIR=ccacheprebuilts/misc/linux-x86/ccache/ccache -M 50G
导入android源码所需环境
1 source build/envsetup.sh //配置android源码所需环境变量以及其他
选择编译目标 这里我们选择userdebug模式
1 lunch aosp_hammerhead-userdebug
最后编译
这里的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链接)