Android源码下载及编译

首先关于环境要Ubuntu系统,而且尽量版本比较新,我的版本是18.04,而且至少要200G的磁盘空间,在书写本文时,整个源码下载并编译后占用的空间大小如下

下载源码

国内环境推荐使用清华源镜像下载,具体步骤如下:

下载并解压初始化包

wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
tar xf aosp-latest.tar

虽然是通过清华源服务器下载,但是这个初始化包非常大,在写本文的时候这个包大概有50G大小,中间还会因为网络问题而失败,不过没有关系会断点续传。另外需要注意这是单个50G的文件,确认你的文件系统支持单个这么大的文件。

注意初始化包有50G,解压完还要50G,所以要确保你的磁盘空间足够大

下载repo工具

这里还是使用清华源的镜像

mkdir repo
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo

下载完后将repo目录添加到你的PATH中,以便于在任意目录执行该工具。接着换源,在.bashrc文件中添加下面一行

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

记着重启终端或者执行该文件以生效

同步源码

刚才解压完aosp-latest.tar之后aosp目录是空的,只要一个隐藏的.repo目录,我们需要在aosp目录下执行下面命令

repo sync

这个过程也会很久,耐心等待

编译源码

上一步是下载源码,如果你只需要查看学习源码那么就已经可以了。如果你还想尝试修改编译源码,就需要接下来步骤

安装JDK

需要openjdk8版本及以上,安装如下

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

安装其他程序包

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip

减一直接复制过去执行,已安装过的会自动忽略

编译

  1. 首先进入aosp目录 cd aosp
  2. 设置环境 source build/envsetup.sh
  3. 选择编译目标 lunch aosp_arm-eng。注意直接运行lunch可以显示所有可编译的目标
  4. 开始编译 make -j8 -j8是执行编译线程数,根据自己cpu核数合理选择。这个过程非常漫长,我在一个40核的服务器上,指定了20个线程编译了快4个小时
  5. 启动模拟器 emulator 。注意如果重启终端的话还要执行2、3步之后才能启动模拟器

编译单个模块

在初始化环境(执行编译的2、3步骤)后,使用mmm命令,如编译Music

mmm packages/apps/Music

使用hmm或者查看build/envsetup.sh文件可以查阅更多相关命令说明

更多信息

更多其他信息请参考:Android源码官网

题图来自unsplash:https://unsplash.com/photos/Dd_7xDCuuUo