一、下载源码
需要curl和Git,没有需要装一下
sudo apt-get install curl
sudo apt-get install git
git需要配置用户名和邮箱
git config --global user.name "xxxxxx"
git config --global user.email "xxxxxx@xxx.com"
用curl下载一份repo文件,这是个Python脚本
curl https://storage.googleapis.com/git-repo-downloads/repo > repo
移到/usr/bin/里去
sudo mv repo /usr/bin/
由于某些原因,直接下载源码是下不来的,需要使用大陆镜像。可以用清华的镜像
将REPO_URL配置到环境变量里
sudo gedit /etc/profile
添加
export REPO_URL=https://aosp.tuna.tsinghua.edu.cn/git-repo
终端输入如下使之生效
source /etc/profile
选择想要下载的版本,版本号可以在这里查看
https://source.android.com/source/build-numbers#source-code-tags-and-builds
比如需要下载7.1版
先建个文件夹
mkdir android-7.1
进文件夹初始化
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.1.1_r24
同步源码到本地,不加-f有可能报错
repo sync -f -j4
等着,大概3、40G
二、编译源码
1. 操作系统要求
2. JDK版本要求
3.依赖库
Ubuntu16.04中的依赖
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib flex bison gperf build-essential libncurses5-dev:i386 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev libsdl1.2-dev libesd0-dev gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev libgl1-mesa-dev libxml2-utils xsltproc unzip m4 lib32z-dev ccache
7.1的编译需要openjdk-8
没有需要安装一下
sudo apt install openjdk-8-jdk-headless
如果同时存在多个Java版本,需要切换一下
sudo update-alternatives --config java
sudo update-alternatives --config javac
修改jack的配置,不知道这不是不是必须的,我不改的话会报错
build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed
修改android-7.1/prebuilts/sdk/tools/jack-admin,找到
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"
改为
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096M -cp $LAUNCHER_JAR $LAUNCHER_NAME"
然后在android-7.1目录执行
source build/envsetup.sh
lunch
选择要编译的版本,可以选aosp_arm-eng的,编译
sudo make -j8