开始前准备
一台电脑,装有Linux系统(当然你要是非要用windows当我没说)
使用Ubuntu的同学可以参照这个Android官方的链接
Android Source Code initializing
安装必要的软件
sudo apt-get install g++ curl flex libxml2-utils git git-core
当然不能jdk肯定是要安装的。对于15.10之后的ubuntu,其默认的软件仓库中已经包含了jdk8的版本,直接使用命令安装就好。当然也可以通过如下链接自行下载deb包使用dpkg -i 进行安装
openjdk-8
重点下载下面这三个deb包就可以啦
- openjdk-8-jre-headless_8u45-b14-1_amd64.deb
- openjdk-8-jre_8u45-b14-1_amd64.deb
- openjdk-8-jdk_8u45-b14-1_amd64.deb w
下载repo文件
可以通过google官方网站进行下载。
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
不能fan-q的话可以下载这里的repo文件
下载源码
每次下载android 源码的时候,sync git仓库是最费时费力的。这里推荐使用清华大学的android aosp源。我们可以先讲所有的git仓库的下载下来。然后进行同步,这样就快很多。详情可以参照这里Tsinghua AOSP
wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
总共26G的数据,尽可能在晚上下载,避开高峰。下载完成之后当然就是同步啦。
tar xf aosp-latest.tar
cd AOSP # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码
编译
在编译的过程中遇到了不少问题。
- jdk问题,不要使用甲骨文官方网站的jdk版本。android在编译的时候要求使用openjdk
- java Xmx size问题(try increasing heap size with java option ‘-xmx’.)。需要修改java Xmx的大小,参照下面的patch修改,主要Xmx2048m。设置完成之后,现将jack server stop,在restart
jack-admin stop-server jack-admin start-server
diff --git a/tools/jack-admin b/tools/jack-admin
index ee193fc..33cb913 100755
--- a/tools/jack-admin
+++ b/tools/jack-admin
@@ -451,7 +451,7 @@ case $COMMAND in
if [ "$RUNNING" = 0 ]; then
echo "Server is already running"
else
- 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 -Xmx2048M -cp $LAUNCHER_JAR $LAUNCHER_NAME"
echo "Launching Jack server" $JACK_SERVER_COMMAND
(
trap "" SIGHUP
- 其他的一些奇葩问题,没解决。最后尝试单独编译systemimage成功了
Communication error with Jack server (56). Try ‘jack-diagnose’
android ninja: fatal: fork: Cannot allocate memory
最后就等着编译完成吧。