硬件要求(非硬性指标)

预留500G空间

20g内存

8u

VMware+Ubuntu18.04 磁盘扩容

虚拟机关机
虚拟机设置 -> 磁盘 -> 扩展,选择最大磁盘大小,扩展,保存
Ubuntu安装Gparted工具:

sudo apt install gparted


sudo gparted进入图形化配置界面
可以看到未分配的分区
右键/dev/sda1编辑,更改大小或移动(R)以调整大小,确认
Linux中使用df -h命令看磁盘使用情况

#cd Desktop#mkdir COMPILE#mount /dev/sda2 COMPILE/

增加swap(根据需要)

参考:在Linux上增加swap空间的技巧

Ubuntu 18.04编译环境配置

首先得配置java8

sudo apt-get install openjdk-8-jdk sudo apt-get install openjdk-8-jre

注意这里是配置openjdk,不要弄错了,我之前是按照一篇教程配置了android studio环境,结果配置的jdk不是openjdk,执行java -version时有如下提示

实际上在执行java -version有如下的openjdk提示时(版本号不一定相同),才算是jdk配置成功

然后配置在ubantu 18.04中编译android源码需要的一些依赖,这些依赖包在ubantu 16.04中编译android源码时也是需要的

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilibsudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-devsudo apt-get install git-core gnupg flex bison gperf build-essentialsudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilibsudo apt-get install libc6-dev-i386sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-devsudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4sudo apt-get install lib32z-dev ccache

到这里编译环境配置就算是完成了。

准备aosp源码

安装git和repo并配置

安装git通过下面命令实现

sudo apt-get install git

另外还需要配置好git的user.email和user.name,这个自己随便写就行了

apt updategit config --global user.email "you@example.com"git config --global user.name "Your Name"

下载andriod源码

参考
:https://lug.ustc.edu.cn/wiki/mirrors/help/aosp/

中科大源

首先下载 repo 工具。

mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo  # 如果上述 URL 不可访问,可以用下面的:  # curl -sSL  'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo chmod a+x ~/bin/repo 

然后建立一个工作目录(名字任意)

mkdir WORKING_DIRECTORY cd WORKING_DIRECTORY 

初始化仓库

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest  # 如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的: # REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo' 

如果需要某个特定的 Android 版本(Android 版本列表):

repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-7.1.2_r8 

同步源码树(以后只需执行这条命令来同步):

repo sync

编译Android源码

这里到了最关键也是最容易出问题的一步了,首先cd到应的源码目录,初始化编译环境

如果重新编译 make clean

编译前执行命令去除本地化设置

export LC_ALL=C
cd /root/Desktop/COMPILE/aosp/source build/envsetup.sh

初始化编译环境后,引入了一些执行脚本,其中就包括马上要使用的lunch指令。通过lunch指令可以设置编译目标,所谓的编译目标就是生成的镜像要运行在什么样的设备上。这里我们设置的编译目标是aosp_arm64-eng,因此执行指令

lunch

简单的说明下,aosp表示Android Open Source Project,arm64表示是使用arm64 cpu的设备,eng表示engineer版本,其直接开放了一些root等权限。当然直接使用lunch命令会列出所有可选的编译目标。

最后,我们便可通过如下命令来开始编译andriod源码

make -j8

这里的j8表示可以开启8个线程来参与编译源码,这里指定的线程数一般应该遵从cpu内核数的2倍这个规律,可以通过cat /proc/cpuinfo查看相关cpu信息。

编译错误集锦

错误一:

ubuntu18.04无法安装libesd0-dev

执行如下命令安装:

sudo apt-get install libesd0-dev

却犯了这个错误:

处理

sudo vim /etc/apt/sources.list

在行尾添加如下两行的内容

deb http://us.archive.ubuntu.com/ubuntu/ xenial main universe3 deb-src http://us.archive.ubuntu.com/ubuntu/ xenial main universe

更新软件源并重新安装:

sudo apt-get update && sudo apt-get install libesd0-dev

错误二:

SSL error when connecting to the Jack server. Try ‘jack-diagnose‘

#  这个文件是$HOME/.jack-settings  SERVER_PORT_SERVICE=28076  SERVER_PORT_ADMIN=28077  # 这个文件是$HOME/.jack-server/config.properties  jack.server.service.port=28076 jack.server.admin.port=28077
cd /root/Desktop/COMPILE/aosp712r8jack-admin kill-serverjack-admin start-server