前言最近一直在折腾这个android源码从Mac到docker再到ubuntu14.04,最后换了ubuntu 16.04,前前后后花了大概2个星期,感觉自己就是自带bug的男人。。。呵呵了,记录一下吧(求大佬勿喷)
虚拟机安装安装虚拟机ubuntu 16.04,并分配200G的硬盘空间,3个处理器,以及4g的内存。
安装jdk7安装openjdk7
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk
配置OpenJDK.打开/etc/profile文件:
sudo gedit /etc/profile
在末尾追加下面代码:
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
最终效果
下载依赖包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用户名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"
静待下载完毕
下载源码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
出现错误
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
解决办法
git config --global http.sslVerify false
git config --global http.postBuffer 1048576000
编译设置编译器缓存
export USE_CCACHE=1
export CCACHE_DIR=ccache
prebuilts/misc/linux-x86/ccache/ccache -M 50G
导入android源码所需环境
source build/envsetup.sh //配置android源码所需环境变量以及其他
选择编译目标 这里我们选择userdebug模式
lunch aosp_hammerhead-userdebug
最后编译
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链接)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)