安装open jdk
在Terminal终端下输入如下命令行:
#添加openjdk8的第三方源
sudo add-apt-repository ppa:openjdk-r/ppa
#执行更新
apt-get update
#安装openjdk8
sudo apt-get install openjdk-8-jdk
查看open jdk的安装路径
在Terminal终端下输入如下图所示的命令:
从上图中可以看到open jdk的安装路径为:/usr/lib/jvm/java-1.8.0-openjdk...
配置/etc/profile以及~/.bashrc文件
按照下图格式配置相关文件,并使用source /etc/profile以及source ~/.bashrc指令是文件修改生效
在Terminal终端下分别输入如下所示指令,安装编译安卓源码所需的依赖包
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
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 libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
下载repo工具
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
上述指令的作用是先在home目录下创建bin目录,然后将其添加到 PATH环境变量中,接着再从清华镜像中下载repo工具,并赋予repo相应权限确保该工具能够被使用
配置~/.bashrc文件
repo工具运行过程中会尝试从官方的git上更新相应的文件,可以将如下所示的内容添加到~/.bashrc文件中,使其使用清华的镜像源进行更新
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
使用source ~/.bashrc指令使该文件生效
下载aosp-latest .tar
首先下载aosp-latest.tar包,清华镜像下载地址为:https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
下载完毕后可以使用tar -zxvf aosp-latest.jar指令解压该文件,解压出来文件夹名称为aosp,里面只有一个叫.repo的隐藏文件夹,该文件夹就是仓库,安卓源代码都在里面,可以使用CTRL+H来查看该隐藏文件夹。
同步下载源代码
使用如下指令,同步并导出源代码
cd aosp
repo sync
PS:repo sync -l // -l表示只导出代码到本地,不通过网络更新代码
repo sync -n // -n表示只通过网络更新代码
上述指令一旦执行,就开始同步Android源代码,在这个过程中如果出现网络中断的情况,重新执行repo sync指令就会继续执行同步下载的过程。也可以编写一个自动下载脚本,确保出错了之后会自动执行repo sync。首先,在aosp文件夹下创建一个脚本xxx.sh(文件名随意),然后将如下代码复制到脚本中:
#!/bin/bash
repo sync -j 8
while [ $? = 1 ]; do
echo “======sync failed, re-sync again======”
sleep 3
repo sync -j 8
done
最后通过sh xxx.sh 指令运行该脚本。(PS:-j 后面的数字可以根据自己的电脑配置进行修改,比如你电脑的CPU核心数为4,就将其修改为-j 4)
同步下载完成后,可以得到如下所示的信息以及相关的文件夹和文件(图中所示为Android 9.0的目录结构):
初始化编译环境
Android的每一个工程都有Android.mk文件,在编译整个Android系统的时候会递归调用这些文件对Android源代码进行编译。而使用到的一些编译命令是 Linux 主机没有的,是在 envsetup.sh 脚本定义的,所以我们需要通过该脚本初始化一个特定的终端,使其可执行诸如 mm、mmm 这类编译 Android 专用的命令。初初始化指令为:
source build/envsetup.sh
PS:在Android源代码的根目录下执行该指令,在本文中该目录为aosp
选择编译目标
使用 lunch 命令设置编译目标
对于X86架构的模拟器,可以选择编译的目标为aosp_x86_64-eng,所以我们的指令为: lunch aosp_x86_64-eng
编译 Android 源码
在 Android 源码根目录内,执行 make 命令就可以开始 Android 源码的编译。但是默认情况下,系统只会使用一个 CPU 核来编译 Android 源码,如果 CPU 是多核的,则可以显示指出使用多个核编译 Android 源码,这样可以大大提高编译效率。比如,CPU为4核的话可以执行make -j 4
运行模拟器
使用emulator 指令运行模拟器