-
参考清华源中aosp说明:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
-
0. 环境准备
-
安装curl以下载repo
-
安装git以便同步代码
-
-
1. 下载repo工具
-
在用户目录下创建一个bin目录,以便保存用户自己的可执行文件,然后创建使用curl将repo下载到该目录
-
mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo
-
因为google被墙,所以上述方式很大概率无法成功执行,因此使用清华源的repo-git镜像,将上面的google地址换为https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
-
mkdir ~/bin PATH=~/bin:$PATH curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo chmod a+x ~/bin/repo
-
-
除此之外还需要将镜像源地址写入到~/.bashrc里,以便repo更新自己,同时将repo写入到PATH里,以便在任何目录下都可以使用该命令。
-
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/' export PATH=~/bin:$PATH
-
-
-
下载aosp代码
-
因为google无法访问的原因,aosp代码的下载还是使用清华源
-
传统代码下载方式:
-
创建工作目录
-
切换到工作目录
-
使用传统方式初始化代码仓库
-
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest #下载主分支 # 或 repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b <分支>
-
- 也可以通过打包下载:打包下载只能下载主分支,可以后续执行分支切换
-
打包下载下载的是清华源对aosp的打包,每月更新
-
wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包 tar xf aosp-latest.tar cd AOSP # 解压得到的 AOSP 工程目录# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录 repo sync # 正常同步一遍即可得到完整目录# 或 repo sync -l 仅checkout代码
-
-
-
-
代码同步及分支切换
-
代码同步即执行repo sync,清华源对同步线程数做了限制,过多会返回503错误,推荐为4;
-
分支切换
-
一种是拉代码的时候就指定分支:repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b <分支>,因为谷歌被墙的原因,可能一开始不知道准确的分支,或者使用清华源的打包方式下载,没法在一开始就指定分支。
-
在.repo/manifests文件夹下切分支,在该文件下使用git branch -a即可看到所有的分支信息,使用git checkout <分支> 切换到对应的分支即可,切换完后返回工作目录重新repo sync 一遍。
-
-
-
aosp代码编译
-
source.android.com虽然被墙了,没法直接下载aosp源码,但是source.android.google.cn还是可以访问的。https://source.android.google.cn/source/requirements 指明了aosp编译所需要的软硬件要求
-
硬件要求:
-
Android2.3及以上需要64位环境
-
硬盘空间至少250G,其中100G用于存放代码,150G用于编译结果及中间文件,如果需要使用ccache,则需要更多空间。
-
内存应不小于16G
-
-
软件要求
-
Ubuntu的长期支持版本(LTS),官方建议Ubuntu 14.04,我的是Ubuntu 18.08
-
主分支带有预编译的OpenJDK,不需要额外编译,如果是其它较低版本,则可能需要单独安装,具体要求见https://source.android.google.cn/source/requirements#older-versions
-
操作系统要求
-
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)
-
Android 6.0 (Marshmallow) - AOSP master:Mac OS v10.10 (Yosemite) 或更高版本,具有 Xcode 4.5.2 和命令行工具
-
Android 5.x (Lollipop):Mac OS v10.8 (Mountain Lion),具有 Xcode 4.5.2 和命令行工具
-
Android 4.1.x-4.3.x (Jelly Bean) - Android 4.4.x (KitKat):Mac OS v10.6 (Snow Leopard) 或 Mac OS X v10.7 (Lion),以及 Xcode 4.2(Apple 的开发者工具)
-
Android 1.5 (Cupcake) - Android 4.0.x (Ice Cream Sandwich):Mac OS v10.5 (Leopard) 或 Mac OS X v10.6 (Snow Leopard),以及 Mac OS X v10.5 SDK
-
-
JDK要求
-
* Android 7.0 (Nougat) - Android 8.0 (O):Ubuntu - OpenJDK 8;Mac OS - jdk 8u45 或更高版本
-
* 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
-
-
Make
-
Android 4.0.x (Ice Cream Sandwich) 及更低版本需要将 make 3.82 还原到较低版本,以避免出现编译错误
-
-
-
其它的python2.6-2.7, GNU Make3.81-3.82,Git1.7及以上,Ubuntu18.08基本都满足要求,没有额外的再配置过。
-
-
-
编译
-
source ./build/envsetup.sh #配置编译环境 lunch #选择编译目标 make -j6 #编译,j6为六线程
-
首次编译必须使用全编,后续可以使用m, mm, mmm 执行全编或模块化编译
-
m:全编,只能在aosp根目录下执行
-
mm:编译当前目录下的所有模块,mma为对应的增量版本,该命令可以cd到模块目录里执行,会在当前目录下查找mk文件,如果没有则向父目录查找
-
mmm:编译指定的模块,如 mmm package/apps/Settings,mmma为对应的增量版本,该命令编译指定路径下的所有模块
-
-
-
-
将源码导入Android Studio(其实个人更推荐导入Idea,当然两者本质上是一样的,可以屏蔽掉很多Android插件,纯粹的以代码的形式阅读,避免很多奇奇怪怪的错误)
-
代码全编后,执行以下命令
-
mmm ./development/tools/idegen #编译idegen模块 . ./development/tools/idegen/idegen.sh #生成项目文件
- 执行完成后会在源码根目录生成一个Android.ipr文件,使用Android Studio或者Idea打开这个文件,即可导入AOSP源码。
-
IDE只能阅读和修改源码,修改后的源码依然只能通过上述方式编译
-
-
-
虚拟机启动
-
使用emulator启动虚拟机,该命令只有在执行完source ./build/envsetup.sh以及lunch后才可见,因此每次重新打开shell都需要重新执行一遍上述两个命令。
-
以这种方式编译的镜像只能供虚拟机启动,即编译目标是arm-eng,如果想要在真机上运行,则应该参考https://source.android.google.cn/source/requirements在aosp代码里预制设备相关的Blob,谷歌亲儿子相对简单很多。如果没有谷歌亲儿子,建议使用Lineage OS的支持设备。
-
LineageOS的下载编译及真机运行见https://blog.youkuaiyun.com/ironlzz/article/details/88922224
-