好久之前就想着下载安卓源码了,但是一直没有时间,也没有比较稳定的资源。梯子很是不稳定,速度也不行,所以一直拖着。直到最近换工作了,主要是做framework层的东西,所以又燃起了研究源码的兴趣,于是网上查了一通,失败过,但是很庆幸的是最终我成功了,特来次记录下来,以备不时之需。下面,我以Mac系统为例,介绍源码下载和编译过程。
配置repo
下载repo
首先,新建目录,用来存放repo脚本:
1
2
3
4mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
如果以上地址无法访问,请使用下面地址下载
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo配置环境变量
这里主要是吧下载下来的repo脚本添加到环境变量里面,为了后面使用方面,编辑~/.bash_profile,在其中添加如下脚本。
1
2
3export REPO=~/bin
export PATH=$PATH:$REPO
source ~/.bash_profile添加执行权限
主要是给repo脚本添加执行权限,否则无法执行脚本。配置好后终端输入repo发现可以显示帮助信息,说明配置成功了。1
chmod a+x ~/bin/repo
初始化仓库
这里主要是使用repo脚本来初始化仓库信息,后面可以通过初始化后的仓库信息来下载源码。获取Google最新代码仓库:
1 | repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest |
如果需要下载指定版本的安卓源码,可以到这里查看版本信息,比如下载4.0.1的代码:
1 | repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1 |
获取源码
仓库初始化成功后,就可以进行代码拉取了,需要说明的是,安卓源码的仓库比较大,现在最新的应该有200多个G了,所以要预留好空间,以免下载到最后因为空间不足而失败。全仓拉取大码,更新代码也用这个命令:
1 | repo sync |
源码拉取一般时间比较长,建议选择晚上进行,设置好电脑别休眠了,早上起来应该就下载好了。
编译
加载命令
使用如下命令加载编译指令(envsetup.sh文件存放在Android源代码根目录下的build目录下)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42cd build
source envsetup.sh
这里主要加载的命令有:
function help() # 显示帮助信息
function get_abs_build_var() # 获取绝对变量
function get_build_var() # 获取绝对变量
function check_product() # 检查product
function check_variant() # 检查变量
function setpaths() # 设置文件路径
function printconfig() # 打印配置
function set_stuff_for_environment() # 设置环境变量
function set_sequence_number() # 设置序号
function settitle() # 设置标题
function choosetype() # 设置type
function chooseproduct() # 设置product
function choosevariant() # 设置variant
function tapas() # 功能同choosecombo
function choosecombo() # 设置编译参数
function add_lunch_combo() # 添加lunch项目
function print_lunch_menu() # 打印lunch列表
function lunch() # 配置lunch
function m() # make from top
function findmakefile() # 查找makefile
function mm() # make from current directory
function mmm() # make the supplied directories
function croot() # 回到根目录
function cproj()
function pid()
function systemstack()
function gdbclient()
function jgrep() # 查找java文件
function cgrep() # 查找c/cpp文件
function resgrep()
function tracedmdump()
function runhat()
function getbugreports()
function startviewserver()
function stopviewserver()
function isviewserverstarted()
function smoketest()
function runtest()
function godir () # 跳到指定目录 405选择平台
选择平台编译选项,主要是控制台列出所有可供选择的平台,使用哪个平台根据具体情况而定,例如选择6735_debug1
lauch
编译
这里主要是使用make进行源码编译,例如:1
2
3
4
5
6
7
8
9编译framework
make framework
编译资源apk
make framework-res
构建可以指定分配的的系统资源,如CPU,内存等
比如两核两线差可以指定j4,数字越高编译越快,前提你的电脑硬件要支持:
make framework framework-res -j4
编译system.img镜像
make -j4启动模拟器
1
emulator
切换分支(获取不同版本源码)
- 查看所有版本分支信息
仓库初始化成功后,然后执行以下命令查看所有可切换的分支:
1 | cd .repo/manifests |
切换分支(版本)
如果我们下载了最新的源码,邮箱查看其它版本(例如:4.1.1_r4),可以使用以下方式进行,这样会比单独执行命令下载快的多(因为会进行增量下载):
1 | repo init -b android-4.1.1_r4 |
我这里简单介绍了安卓源码的下载和编译过程,也是为了以后自己能够在忘了的时候有一个可以查看的地方,当然希望能够帮得想要编译源码而不知道如何下手的同学,最后附上清华大学的AOSP教程地址