Android源代码位于Google的Git代码库中,由于Android源代码工程过于复杂庞大,所以Google以Git为基础用Python脚本,写了一个管理工具Repo。
1.安装Repo
在安装Repo之前,假定已经安装好了git。
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
2.初始化Repo
首先创建一个文件夹,用来装即将下载的代码。
madir aosp
cd aosp/
配置Git
git config --global user.name "windcake"
git config --global user.email "windcakewang@gmail.com"
执行init
repo init -u https://android.googlesource.com/platform/manifest
这样下载下来的是master的代码。我个人想研究6.0的代码所以使用-b指定了分支
repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r17
3.下载
repo sync -j4
sync命令用于同步代码,-j4告诉Repo用4个线程下载。
4.安装依赖库
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev
g++-multilib git flex bison gperf build-essential libncurses5-dev:i386
tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev
libsdl1.2-dev libesd0-dev 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 m4
5.安装JDK
add-apt-repository ppa:openjdk-r/ppa
apt-get update
apt-get install openjdk-7-jdk
然后配置JAVA环境,在/etc/profile文件中加入如下几行。
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
重启系统或者执行如下命令让更改生效
source /etc/profile
然后检查JAVA环境是否配置正确
java -version
6.开始编译
为了提高编译效率,需要设置缓存。
echo export USE_CCACHE=1 >> ~/.bashrc
prebuilts/misc/linux-x86/ccache/ccache -M 50G
然后导入编译所需要的环境
source build/envsetup.sh
运行lunch选择编译目标
lunch
选择1后,执行make命令开始编译
make -j8
编译成功之后会有如下日志输出
Creating filesystem with parameters:
Size: 1610612736
Block size: 4096
Blocks per group: 32768
Inodes per group: 8192
Inode size: 256
Journal blocks: 6144
Label: system
Blocks: 393216
Block groups: 12
Reserved block group size: 95
Created filesystem with 1682/98304 inodes and 139413/393216 blocks
Install system fs image: out/target/product/generic/system.img
out/target/product/generic/system.img+ maxsize=1644333504 blocksize=2112 total=1610612736 reserve=16610880
且在/aosp/out/target/product/generic目录下会有system.img、userdata.img和ramdisk.img等文件。
7.运行模拟器
模拟器运行需要四个文件,分别是Linux Kernel镜像zImage和Android镜像文件system.img、userdata.img和ramdisk.img。
执行emulator命令时,如果不带任何参数,则Linux Kernel镜像默认使用AOSP已经编译好的,
而Android镜像文件则默认使用ANDROID_PRODUCT_OUT目录下的system.img、userdata.img和ramdisk.img文件。
所以我们需要预先配置环境
export PATH=$PATH:/aosp/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=/aosp/out/target/product/generic
然后执行
emulator
与从Android Studio的图形界面里调起模拟器一样,首次启动需要漫长的等待。同时,如果启动成功,这个漫长的等待也会放大成功的喜悦。