前言
一直想下载、编译、调试一下Android源码 ,加强对一些framework的理解,搞了好多次,终于可以正常编译调试了。
但是一直没有记录过程,导致每次需要下载的时候都要重新查找一下过程,这里进行一下总结。
1. 下载准备
Android源码到模拟器运行,主要有的四个步骤:
- 下载源码
- 搭建编译环境
- 准备编译
我使用的环境是Ubuntu16.04 、openJDK8、Android 9.0.0
硬件要求:
- 如果是 Android 2.3.x (Gingerbread) 及更高版本(包括 master 分支),需要使用 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。
- 如果要检出代码,至少需要 250GB 可用磁盘空间;如果要进行编译,则还需要 150GB。如果要进行多次编译,则需要更多空间。
- 如果在虚拟机中运行 Linux,则至少需要 16GB 的 RAM/交换空间。
2. 下载源码
下面的命令,是从清华源下载repo工具,这样脚本中的路径就是指向清华源的aosp
2.1 下载repo
mkdir ~/bin # 在home下创建bin文件夹
PATH=~/bin:$PATH # 把bin文件夹加入环境变量的
//我使用的是google源:https://gerrit.googlesource.com/git-repo
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo #下载repo脚本
chmod a+x ~/bin/repo #添加权限
执行完上述步骤后,就可以在~/bin/repo文件中看到以下代码:
# repo default configuration
#
REPO_URL = os.environ.get('REPO_URL', None)
if not REPO_URL:
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
REPO_REV = os.environ.get('REPO_REV')
if not REPO_REV:
REPO_REV = 'stable'
2.2 下载源码
初始化
repo init -u https://android.googlesource.com/platform/manifest
上述命令会要求Repo下载最新的Android源代码,也就是master分支,如果想下载其他分支
repo init -u https://android.googlesource.com/platform/manifest -b android-9.0.0_r3
同步Android源代码
repo sync
2.3 更新源码
如果遇到源码有更新,如果只需要某一块的代码,就可以进入到有git的目录下面执行repo sync .
2.4 repo配置
主要有以下几个配置文件
- .repo/manifests.git/config
- .repo/manifest.xml
- .repo/manifest/default.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="aosp"
fetch=".."
review="https://android-review.googlesource.com/" />
<default revision="refs/tags/android-9.0.0_r3"
remote="aosp"
sync-j="4" />
//此处都是加载的项目
...
<project path="" name="" groups="" />
<repo-hooks in-project="platform/tools/repohooks" enabled-list="pre-upload" />
</manifest>
3. 编译源码
source build/envsetup.sh # 初始化编译环境
lunch # 选择编译目标,运行lunch后出现所有目标,选择一个输入回车即可,这里使用模拟器运行选择aosp_x86_64-eng
make -j4 # 开始编译,后面的参数为编译使用CPU资源,普通电脑推荐用4核进行编译,编译输出目录为out