android源码的获取和编译教程,Google官方有详细的教程,建议直接看官方教程,链接如下:
https://source.android.com/source/requirements.html
编译环境要求
先介绍下我的电脑基础环境:
1.硬件:MacBook Pro
2.系统版本:OS X EI Capitan 10.11.6
一、系统版本要求
以下是官方给出的各个android版本建议对应的系统版本:
GNU/Linux
Android 6.0 (Marshmallow) - AOSP master: Ubuntu 14.04 (Trusty)
Android 2.3.x (Gingerbread) - Android 5.x (Lollipop): Ubuntu 12.04 (Precise)
Android 1.5 (Cupcake) - Android 2.2.x (Froyo): Ubuntu 10.04 (Lucid)
Mac OS (Intel/x86)
Android 6.0 (Marshmallow) - AOSP master: Mac OS v10.10 (Yosemite) or later with Xcode 4.5.2 and Command Line Tools
Android 5.x (Lollipop): Mac OS v10.8 (Mountain Lion) with Xcode 4.5.2 and Command Line Tools
Android 4.1.x-4.3.x (Jelly Bean) - Android 4.4.x (KitKat): Mac OS v10.6 (Snow Leopard) or Mac OS X v10.7 (Lion) and Xcode 4.2 (Apple’s Developer Tools)
Android 1.5 (Cupcake) - Android 4.0.x (Ice Cream Sandwich): Mac OS v10.5 (Leopard) or Mac OS X v10.6 (Snow Leopard) and the Mac OS X v10.5 SDK
二、JDK版本要求
The master branch of Android in AOSP: Ubuntu - OpenJDK 8, Mac OS - jdk 8u45 or newer
Android 5.x (Lollipop) - Android 6.0 (Marshmallow): Ubuntu - OpenJDK 7, Mac OS - jdk-7u71-macosx-x64.dmg
Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat): Ubuntu - Java JDK 6, Mac OS - Java JDK 6
Android 1.5 (Cupcake) - Android 2.2.x (Froyo): Ubuntu - Java JDK 5
编译环境搭建
(以下内容记录的是在Mac上的搭建过程,其余系统请移步android官方文档)
1.建立一个区分大小的分区(OS X中默认分区文件系统是不区分大小写的)
直接在终端运行以下命令,即可建立一块大小为40g的分区,如果要创建其他的大小的分区,将命令中的40改为对应的数字即可。个人实测建议,这个分区尽量大一些,以我自己为例,我下载的是android-6.0 nexus5分支的源码,完成同步并编译之后大概占用了70G1
# hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
上述命令将会生成一个以.dmg或.dmg.sparseimage为后缀的文件
如果已经创建好了这个分区,想再去更改它的大小,可以通过以下命令实现1
# hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
2.将创建好的这个镜像挂载到系统中
在文件~/.bash_profile中配置以下内容。(如果该文件不存在,可通过touch命令先生成,然后再将内容添加)1
2
3
4
5# 挂载镜像文件
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
# 卸载镜像文件
function unmountAndroid() { hdiutil detach /Volumes/android; }
(如果镜像文件是以.dmg.sparseimage为后缀,则将命令中的~/android.dmg 替换为 ~/android.dmg.sparseimage)
3.下载并安装jdk
上oracle官网,对照前面所提的不同的android版本所需jdk下载安装即可
4.在appstore中安装Xcode
5.安装MacPorts
确保path环境变量中/opt/local/bin在/usr/bin之前,否则添加以下内容到~/.bash_profile1
export PATH=/opt/local/bin:$PATH
6.通过MacPorts安装make, git, 和 GPG等1
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
7、在~/.bash_profile中配置文件限制1
2# set the number of open files to be 1024
ulimit -S -n 1024
8、配置缓存
在源码的根目录下,打开终端输入以下命令,即可配置编译运行缓存,建议大小为50~100G1
2
3$ export USE_CCACHE=1
$ export CCACHE_DIR=/<path_of_your_choice>/.ccache
$ prebuilts/misc/darwin-x86/ccache/ccache -M 50G
在.bashrc中加入内容:export USE_CCACHE=1
四、下载源码
1.在home根目录下建立一个bin文件夹并添加到环境变量中:
$ mkdir ~/bin
$ PATH=~/bin:$PATH
2.下载repo工具
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
3.在上面创建的区分大小写的镜像中建立一个编译根目录(名字随意取):WORKING_DIRECTORY
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
4.配置git用户名和账号邮箱信息
$ git config –global user.name “Your Name”
$ git config –global user.email “you@example.com”
5.init源码分支1
$ repo init -u https://android.googlesource.com/platform/manifest
如果提示无法连接到 gerrit.googlesource.com,可以将源换成清华的,编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:
REPO_URL = ‘https://gerrit-google.tuna.tsinghua.edu.cn/git-repo‘
更加详细操作可点击该链接进行查看
如果想clone具体的分支,可加上-b参数,我想编译的是nexus 5,android 6.0,点击这个[链接]可查看具体的分支名,可以看到我想要的具体分支名为:android-6.0.1_r60
所以命令为:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r60
6.开始同步
在源码根目录下打开终端执行:repo sync,即可开始代码同步过程,经历的将是漫长的等待,毕竟即使个G的代码。。。
四、编译源码
1.make clobber:清理out目录,如果每次都想重新编译的话,可执行该命令清除上次编译生成的OUT目录
2.source build/envsetup.sh:初始化编译环境
3.lunch
4.输入对应target的数字(因为我要编译的是userdebug版本 19. aosp_hammerhead-userdebug所以直接输入19即可)
5.make -j4:开始编译,至于是4个线程同时编译还是8个或者16个自行根据自己电脑的配置来决定
五、烧录镜像到机器中
如果编译一切顺利,就可以实行最后一步了,就是我们常说的刷机
cd $OUT:切换到out目录
手机重启进入bootloader模式
fastboot flashall -w:执行该命令开始刷机
六、纪录遇到的坑
1.Xcode版本问题:Can not find SDK 10.6 at /Developer/SDKs/MacOSX10.6.sdk
这个问题是由于我们系统的版本比较高,所以sdk版本也比较高了,此时需要更改sdk配置
cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
ls //查看sdk版本(我的版本为 MacOSX10.11.sdk)
然后编辑build/core/combo/mac_version.mk中的mac_sdk_versions_supported所在的行添加10.11