Mac 下 Android 源码编译从零开始:Day One--环境搭建,下载源码html
参考官网连接(源码下载):source.android.com/source/init…android
总连接(AOSP setup):source.android.google.cn/setup/git
本教程做为记录所用,因为半途而废过好几回,本次会认真记录下每个步骤和遇到的坑,当作给本身一个交代。shell
一、一周内,搭建好环境,并编译成功:from 2019.5.7 到 2019.5.14。 2019.5.7 - 2019.5.8 完成搭建、下载源码 二、掌握对源码进行断点调试。api
三、根据参考书《Android 开发艺术》和《Android 进阶解密》,对 framework 层进行扫盲。四大组件为重点,其余只作涉猎。xcode
执行期限:2019.5.7-2019.6.7 一个月时间bash
本目标目测过于乐观,先试行1周,看进度和时间投入如何,再定详细目标。服务器
To do : 此处列出很多于五个阶段和执行期限。网络
·curl
·
·
编译要求:须要区分大小写的文件系统中对 AOSP 源文件进行操做。避免 Git 命令出现异常。
经过 shell 使用如下命令建立磁盘映像:
hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 110g ~/android.dmg
复制代码
坑点:8.0源码下载下来就60G,编译以后会更大,网上查不到确切的容量下限,此处设置为110G,以知足编译容量需求。不然可能遇到编译失败,若是把分区卸载了从新加载再编译,会重头开始编译,意味着你可能又须要60G 以上的空间,因此编译存储空间预留大一点。
这将建立一个 .dmg文件,该文件在装载后可用做具备 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; }
复制代码
注意:若是系统建立的是 .dmg.sparseimage 文件,请将 ~/android.dmg 替换成 ~/android.dmg.sparseimage。
要在执行 umountAndroid 时卸载磁盘映像,请运行如下命令:
# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }
复制代码
装载 android 存储卷后,您将在其中开展全部工做。您能够像对待外接式存储盘同样将其弹出(卸载)。
要查看在开发各类 Android 版本时要使用的 Java 版本,请参阅相关要求。
安装所需的程序包 使用如下命令安装 Xcode 命令行工具:
xcode-select --install
经过 macports.org 安装 MacPorts。
注意:请确保在路径中 /opt/local/bin 显示在 /usr/bin 以前。不然,请将如下内容添加到 ~/.bash_profile 文件中:
export PATH=/opt/local/bin:$PATH
注意:若是主目录中没有 .bash_profile 文件,请建立一个。
经过 MacPorts 获取 Make、Git 和 GPG 程序包:
POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
若是您使用 Mac OS X v10.4,还须要安装 bison:
POSIXLY_CORRECT=1 sudo port install bison
设置文件描述符数量上限 在 Mac OS 中,可同时打开的文件描述符的默认数量上限过低,在高度并行的编译流程中,可能会超出此上限。
要提升此上限,请将下列行添加到 ~/.bash_profile 中:
# set the number of open files to be 1024
ulimit -S -n 1024
复制代码
·
Repo 是一款工具,可以让您在 Android 环境中更轻松地使用 Git。要详细了解 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 后,设置您的客户端以访问 Android 源代码代码库:
一、建立一个空目录来存放您的工做文件。若是您使用的是 MacOS,必须在区分大小写的文件系统中建立该目录。为其指定一个您喜欢的任意名称:
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
复制代码
注意:进入挂载的映像目录,须要 cd ..
两次退到系统根目录,ls
能够看到有 Volumes,以下图所示:
此目录下会包含咱们默认的系统盘和本身挂载上去的映像,此处咱们命名为 android, cd android/WORKING_DIRECTORY
坑点:此处衔接上面建立的android.dmg.sparseimage
磁盘映像,你须要 mount
这个磁盘映像,进入并在这里面建立WORKING_DIRECTORY
,这个磁盘映像就是区分大小写的目录,case-sensitive directory.
若是只是把 WORKING_DIRECTORY
随便建立在主目录下,因为当前Mac 默认是不区分大小写的,因此后面进行编译时,会在 make clobber
这一步 报错,以下所示:
Case Insensitive Filesystem
If you are building on an HFS filesystem on Mac OS, you may encounter an error such as
************************************************************
You are building on a case-insensitive filesystem.
Please move your source tree to a case-sensitive filesystem.
************************************************************
复制代码
二、使用您的真实姓名和电子邮件地址配置 Git。要使用 Gerrit 代码审核工具,您须要一个与已注册的 Google 账号关联的电子邮件地址。确保这是您能够接收邮件的有效地址。您在此处提供的姓名将显示在您提交的代码的提供方信息中。
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
复制代码
坑点:此处邮箱最好填写为 gmail,而且该邮箱就是 GitHub 的注册邮箱,对应GitHub名。
三、运行 repo init 以获取最新版本的 Repo 及其最近的全部错误更正内容。
坑点:如下两条命令都是在初始化repo,二选一,建议选第二条命令,能够配置本身想要的分支。
您必须为清单指定一个网址,该网址用于指定 Android 源代码中包含的各个代码库将位于工做目录中的什么位置。
repo init -u https://android.googlesource.com/platform/manifest
复制代码
不带参数的 manifest命令用于获取master上最新的代码,可是能够经过-b参数指定获取某个特定的android版本,好比咱们想要获取android-8.0.0_r17分支,那么命令以下:
repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r17
复制代码
要查看分支列表,请参阅 源代码标记和版本
初始化成功后,系统将显示一条消息,告诉您 Repo 已在工做目录中完成初始化。刚才建立的客户端 bin 目录中如今应包含一个 .repo 文件,大小 29k,清单等文件将保存在该目录下。
要将 Android 源代码树从默认清单中指定的代码库下载到工做目录,请运行如下命令:
repo sync
复制代码
Android 源代码文件将位于工做目录中对应的项目名称下。初始同步操做将须要 1 个小时或更长时间才能完成。要详细了解 repo sync 和其余 Repo 命令,请参阅开发部分。
参考连接:www.jianshu.com/p/ef35a1eef…
坑点中的坑点:因为此处连端口号都修改了,会致使后面编译时,jack-server(Android 源码自带编译工具) 没法启动,由于 jack-server 默认配置的端口是 8077,而蓝灯代理的端口不是这个,须要修改 .jack-setting 文件中的端口号配置,如图:
注意,jack-server 目录是隐藏文件,是在编译以后才生成的,此处也是回过头来补充的坑点中的坑点,须要将隐藏文件显示出来才能看到。
修改如图:
此处因为国内网络访问不了谷歌,解决方案是设置代理,我用的是蓝色的灯笼这个,在网页上找到设置 ->高级设置 ->HTTP(S)代理服务器 具体方法
找到 HTTP(S)代理服务器:127.x.x.x:xxxxx,在终端输入一下命令, 你的代理IP和端口号一并复制黏贴上去, 就能够进行 repo sync 了,不然只能是failed。
export {http,https}_proxy='http://127.x.x.x:xxxxx'
复制代码
让终端走代理的方法有不少种,这个办法的好处是简单直接,而且影响面很小(只对当前终端有效)。
正常下载源码如图所示,放它下载一夜,屏幕设置为不关闭,省得进入休眠状态致使断网。
如何知道下载好的 AOSP 是什么版本?
找到 build/make/core/version_defaults.mk
文件打开,搜索PLATFORM_SDK_VERSION
,找到了 PLATFORM_SDK_VERSION := 26
,即本次下载的Android O 源码本人啦。
下载完毕的提示以下图所示:
Syncing work tree: 100% (568/568), done.