0x1、名词
① AOSP
中文官网:source.android.google.cn/
Android Open Source Package,安卓系统开源源码包
,Android移动终端平台 (高通、MTK等) 先基于原生的Android代码进行更改,形成自己的平台代码,其他 手机厂商 再根据平台代码提供自己的移动端解决方案 (系统定制
)。
asop源码编译后会生成一系列的产物(out目录下):
- /out/host → Android开发工具相关的产物,包含各种SDK工具,如adb、dex2oat、aapt等;
- /out/target/common → 一些通用的编译产物,包含Java应用代码和Java库;
- /out/target/product/[product_name] → 针对特定设备的编译产物,以及平台相关C/C++代码与二进制文件(如system.img、ramdisk.img、userdata.img、boot.img等);
我们平时在AS里看到的源码库 android.jar
是打包后的 classes.jar
,详细路径:out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar。以前在一些场景,需要使用SDK中隐藏的API (@hide注解),一种解法就是用aosp编译生成的classes.jar替换原生sdk中的android.jar。具体导入示例可见:《Android Studio 3.5导入AOSP编译的classes.jar》
② Gerrit
Android使用Git作为代码管理工具,开发了 Gerrit
进行 代码审核,以便更好地对代码进行集中式管理。实际上就是一个 Git服务器,它为在其服务器上托管的Git仓库提供了一系列 权限控制,以及一个用作Code Review 的 Web页面。
③ Repo
Repo命令行工具,用Python对Git命令进行封装,简化对多个Git库的集中式管理。
0x2、Repo工作流
如下图:
简要描述下关键命令:
repo init
→ 在当前目录下初始化Repo,生成.repo
目录,其中会包含一个manifest.xml
文件,列出每个project的克隆方式 (版本库地址、和工作区地址的对应关系、分支对应关系等);
repo sync
→ 同步所有project到本地工作区;
repo start
→ 创建并切换到本地工作分支;
Git相关命令
→ 本地修改某些Project的代码,常规提交;
repo upload
→ 将代码修改发布到审核服务器;
repo prune
→ 功能开发完,合并后,安全移除过时主题分支;
更详细内容可参见:《源代码控制工作流程》
0x3、系统准备
只是单纯下载源码,啥系统都可以,但如果还想进行编译的话,需要 Linux
或 Mac OS
系统。
Windows想编译的话,可以通过 虚拟机 安装上述系统间接达成,常规方式:Docker
或 VirtualBox
。后者安装示例可见:《Android AOSP基础(一)VirtualBox 安装 Ubuntu》
更详细内容可参见:《搭建构建环境》
0x4、源码下载
走一波下述命令~
# ① 安装Git、Curl、Python,有些系统自带~ sudp apt-get install git sudo apt-get install curl sudo apt-get install python # ② 创建bin,并添加到PATH中 mkdir ~/bin PATH=~/bin:$PATH # ③ 下载Repo工具,并设置为可执行 # Tips:国外源可能有问题,可以替换为国内镜像,比如:https://mirrors.tuna.tsinghua.edu.cn/git/git-repo curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo # ④ 创建工作文件目录 (存源码) mkdir aosp cd aosp # Tips:Repo在运行过程中会尝试访问官方Git源更新自己,如果想用tuna镜像更新,可复制 # 下述内容到~/.bashrc中 export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/' # ⑤ Git设置身份信息(名字、邮箱) git config --global user.name "User Name" git config --global user.email "user@example.com" # ⑥ 初始化仓库 (同样支持替换镜像源) repo init -u https://android.googlesource.com/platform/manifest # 也支持指定分支,可选值查看:https://source.android.com/source/build-numbers#source-code-tags-and-builds repo init -u https://android.googlesource.com/platform/manifest -b android-9.0.0_r8 # ⑦ 同步代码 (拉取aosp源码到工作目录,一般要几个小时) repo sync # Tips:下载过程可能出现某些project找不到,可能是镜像问题,也可能是网的问题, # 试试可以单独同步该项目,支持-jN参数,-j4如: repo sync -c platform/frameworks/layoutlib # 附:asop不包含内核代码,有需要可以单独下载,版本有很多,如: # common → 通用linux内核、goldfish → Android模拟器内核、msm → 高通MSM芯片 mkdir kernel cd kernel git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git cd goldfish # 可以查看有哪些内核版本分支可以下载 git branch -a # 下载对应版本内核代码 git checkout remotes/origin/android-goldfish-3.4
更详细内容可参见:《下载源代码》
另外,国外镜像难免不稳定,也可以直接用 清华镜像,首次同步容易失败,建议先用迅雷等软件直接下载初始化包 aosp-latest.tar 进行初始化,然后再同步。