作为一个android开发从业者,如果我们想不停的进度,没有android源码怎么能行呢!众所周知,Android开放源代码master分支历来都是在 Ubuntu Long Term Support (LTS) 版本中进行开发和测试,但您也可以使用其他 Ubuntu 分发版本。下面我们就在Mac上下载和编译源码。
参考链接(官方):
环境:http://source.android.com/source/initializing.html
下载:http://source.android.com/source/downloading.html 编译:http://source.android.com/source/building-running.html
系统要求
Mac OS (Intel/x86)
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 版本的预编译路径和安装说明,请参阅安装 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 还原到较低版本,以避免出现编译错误。
主要软件包
python.org 中提供的 Python 2.6 - 2.7
gnu.org 中提供的 GNU Make 3.81 - 3.82
git-scm.com 中提供的 Git 1.7 或更高版本
创建磁盘映像
我们可以直接在电脑磁盘上创建映像也可以在移动硬盘上,但是如果是校验代码,至少需要 100GB 可用磁盘空间;如果要进行编译,则还需要 150GB。如果要进行多次编译或使用 ccache,则需要更多空间。在Mac上的磁盘那么贵的前提下,我建议还是使用移动硬盘吧!
您可以使用磁盘映像在现有的 Mac OS 环境中创建区分大小写的文件系统。要创建磁盘映像,请启动磁盘工具,然后选择“新建映像”。完成编译至少需要 25GB 空间;更大的空间能够更好地满足未来的需求。使用稀疏映像有助于节省空间,而且以后可以随着需求的增加进行扩展。请务必选择“Case sensitive, Journaled”存储卷格式。
您也可以通过 shell 使用以下命令创建磁盘映像:
#hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
这将创建一个 .dmg(也可能是 .dmg.sparseimage)文件,该文件在装载后可用作具有 Android 开发所需格式的存储卷。
如果您以后需要更大的存储卷,还可以使用以下命令来调整稀疏映像的大小:
# hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
对于存储在主目录下的名为 android.dmg 的磁盘映像,您可以向 ~/.bash_profile 中添加辅助函数:
- 要在执行 mountAndroid 时装载磁盘映像,请运行以下命令:
# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
- 要在执行 umountAndroid 时卸载磁盘映像,请运行以下命令:
# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }
装载 android 存储卷后,您将在其中开展所有工作。您可以像对待外接式存储盘一样将其弹出(卸载)。
安装所需程序包
可以参照官方文档安装就是。
设置文件描述符数量上限
在 Mac OS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。
要提高此上限,请将下列行添加到 ~/.bash_profile 中:
# set the number of open files to be 1024
ulimit -S -n 1024
安装 Repo
要安装 Repo,请执行以下操作:
确保主目录下有一个 bin/ 目录,并且该目录包含在路径中:
mkdir ~/bin
PATH=~/bin:$PATH
下载 Repo 工具,并确保它可执行:
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
初始化 Repo 客户端
必须使用之前创建的区分大小写的文件系统,一般挂载的新的盘是在/Volumes/ 路径下的
我分出来的区分大小写的文件系统名字是android 所以我cd进去就ok了
创建一个目录 mkdir XXX (XXX 是你自己取得名字)
cd XXX配置git信息
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
- 运行 repo init 以获取最新版本的 Repo 及其最近的所有错误更正内容。您必须为清单指定一个网址,该网址用于指定 Android 源代码中包含的各个代码库将位于工作目录中的什么位置。
repo init -u https://android.googlesource.com/platform/manifest
如果遇到repo: command not found 问题 请在初始工作目录输入
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
export PATH=$PATH:$HOME/bin
第三步过程中可以通过梯子下载,由于首次更新非常大,可以使用国内镜像下载。
- 清华镜像下载
下载 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar,下载完成后记得根据 checksum.txt 的内容校验一下。
由于所有代码都是从隐藏的 .repo
目录中 checkout 出来的,所以我们只保留了 .repo
目录,下载后解压 再 repo sync
一遍即可得到完整的目录。
使用方法如下:
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
即可保持同步。 强烈建议您保持每天同步,并尽量选择凌晨等低峰时间
- 科大源
请参照如下链接操作:
https://lug.ustc.edu.cn/wiki/mirrors/help/aosp
Android Studio导入Android源码
在AS的bin目录下,打开studio64.vmoptions文件,修改成如下数值:
-Xms1024m
-Xmx1024m
生成AS项目配置文件
1、首先全局编译一次。
2、查看out/host/linux-x86/framework/idegen.jar是否存在;
若已不存在,先执行下面命令以生成它:
source build/envsetup.sh
lunch [选择刚全局编译时的参数]
mmm development/tools/idegen/
3、执行以下命令以生成所需配置文件。
development/tools/idegen/idegen.sh
导入系统源代码至AS
1、此时在根目录下,就已经生成了android.ipr、android.iml,可以将整个源代码导入AS。
2、(可选)设置模块过滤
有些不想导入AS的模块,可以通过在android.iml中加入excludeFolder,达到过滤效果。
<excludeFolder url="file://$MODULE_DIR$/.repo"/>
<excludeFolder url="file://$MODULE_DIR$/abi"/>
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/>
<excludeFolder url="file://$MODULE_DIR$/art"/>
<excludeFolder url="file://$MODULE_DIR$/bionic"/>
<excludeFolder url="file://$MODULE_DIR$/bootable"/>
<excludeFolder url="file://$MODULE_DIR$/out"/>
<excludeFolder url="file://$MODULE_DIR$/pdk"/>
<excludeFolder url="file://$MODULE_DIR$/prebuilts"/>
<excludeFolder url="file://$MODULE_DIR$/sdk"/>
<excludeFolder url="file://$MODULE_DIR$/system"/>
<excludeFolder url="file://$MODULE_DIR$/tools"/>
<excludeFolder url="file://$MODULE_DIR$/trusty"/>
<excludeFolder url="file://$MODULE_DIR$/vendor"/>
...
第一次导入时间有点长,耐心等待。
取消默认JDK和SDK依赖
我们导入完源码后,我们就可以查看整个系统的源码啦,但是我们在跳转公共的类时,并没有跳转到frameworks目录下对应的源码类,而是jar包中的类,这不是我们想要的,我们需要让其跳转到相应的类中。我们就需要新建一个没有任何jar库的SDK给到系统源码项目的依赖。
那我们要怎么创建一个没有jar的SDK呢?步骤如下:
-
右键项目名->Open Module Settings->Project->New(JDK)
然后选择SDKs->新建一个jdk->删除Classpath目录下的所有包并命名为1.8(No Libraries) 如下图所示:
-
选中Modules->Source->Excluded添加过滤,如下图:
再选择Modules->Module SDK选择对应的api版本,并删除下面所有依赖包->然后通过"JARs or directores"依次只添加frameWork和external。
最后点击apply->ok,大功告成,完成上面的步骤后,公共的类就直接指向系统的源码啦。