我的Android源码编译过程

前段时间使用了在虚拟机里编译源码和安装双系统编译,由于源码存放的位置是在windows目录下面,文件系统为NTFS,总是不成功,所以就作罢了,前两天重装Ubuntu不小心整体安装了,文件系统变成了EXT,所以又想重新编译一下源码,总算成功了,编译源码就是想Debug源码,有时候看了代码分支太多云里雾里的,不知道自己分析的对不对,可以Debug验证一下,下面是我的编译过程。

我的Ubuntu版本是:14.04LTS

下载源码

由于国内环境原因,同步源码很费劲,特别是在网络不是特别给力的情况下,还好有好心人将源码以7zip的方式打包,放到百度网盘上面了,最新的是Android 6.0的版本,我选择的是Android 5.1.1_r1这个版本。地址如下:

http://pan.baidu.com/s/1ngsZs

下载结束之后就使用7z解压,没有安装7z先安装:

sudo apt-get install p7zip-full

然后解压,我指定了自己的解压目录:

7z x android-5.1.1_r1.7z -o/home/wujingchao/WorkSpace/AOSP2

解压之后源码大约有15G左右

编译环境配置

编译工具安装:

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

编译环境设置:

source build/envsetup.sh

设置C/C++编译器缓存,加快编译速度:

export USE_CCACHE=1
export CCACHE_DIR=/<path_of_your_choice>/.ccache
prebuilts/misc/linux-x86/ccache/ccache -M 50G

设置编译的Target,这里我选择的是arm平台,eng(development configuration with additional debugging tools):

lunch asop_arm-eng

编译的时候会检查JDK版本,需要安装OpenJDK,由于编译的是5.0,安装JDK7就好了,6.0需要JDK8:

sudo apt-get install openjdk-7-jdk

我编译的时候出现了xmllint没有安装导致编译中断,所以编译前检查下是否已经安装:

sudo apt-get install xmllint

然后就执行编译,j后面的参数根据CPU核心数选择:

make -j4

编译结束后大约有42G左右,好了,现在可以运行模拟器:

emulator

原生模拟器比较慢,需要多等一会儿。

导入源码到Android Studio

执行

 mmm development/tools/idegen/

mmm用于编译某个目录下面的模块,编译生成out/host/linux-x86/framework/idegen.jar,这个是用来生成IDE的工程文件。(需要在上面整个源码树编译成功的情况下)

然后在执行:

./development/tools/idegen/idegen.sh

生成Android Studio需要的工程文件android.iml,android.ipr。

使用Android Studio打开已存在的一个工程,经过漫长的indexing就可以在Android Studio查看以及修改源码了。