Android 源码系列文章:
Mac 10.12 快速下载 Android 源码
Mac 10.12 编译 Android 源码
使用 IntelliJ 查看 Android 源码
使用 IntelliJ Debug Android 源码
环境准备
官方文档https://source.android.com/source/initializing.html
这里只讲 Mac 10.12 的环境配置, 其他的我没有尝试过, 不好描述
官方编译环境配置需求https://source.android.com/source/requirements.html
我们需要的编译的是 Android6.0, 所以我们需要 Xcode , Command Line Tool 以及 JDK 7
关于 Xcode 的版本问题, 上面说的是4.5.2 ,其实在 Max 10.12 上是根本安装不了这么低的版本的.
我这边使用的是 Xcode 8, 同样编译成功, 所以 Xcode 版本不是问题
根据官方文档, 我们还需要安装一些其他的依赖
安装 Xcode command line tools :
xcode-select --install
这个一般 Mac 用户都装过
安装 MacPorts
到 MacPorts 的官网 https://www.macports.org/install.php 下载安装即可
安装完后, 需要配置环境变量如下:
export PATH=/opt/local/bin:$PATH
将上面这句话, 复制到.bash_profile 中即可.
通过 MacPorts 安装其他依赖
在 terminal 中执行如下命令即可
POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
设置同时打开文件数量限制
ulimit -S -n 1024
将上面这句话, 复制到.bash_profile 中即可.
到这里官网文档上说的相关环境配置已经安装好了. 接下来可以尝试去编译看看
第一次编译
我们在 Android 源码目录下执行如下清理命令:
make clobber
如果按照上面的配置的话, 会出现如下错误:
build/core/combo/mac_version.mk:38: *****************************************************
build/core/combo/mac_version.mk:39: * Can not find SDK 10.6 at /Developer/SDKs/MacOSX10.6.sdk
build/core/combo/mac_version.mk:40: *****************************************************
build/core/combo/mac_version.mk:42: *** Stop.. Stop.
** Don't have a product spec for: 'aosp_x86'
** Do you have the right repo manifest?
我前面说过, 我们使用 Xcode 8 是没有问题的, 但是这里提示我们缺少相应的 MacOsX sdk
这个 sdk 的目录在 Xcode 的应用程序包里面, 目录如下:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
打开发现这里只用 MacOSX10.12.sdk
所以我们需要下载其他的 sdk 放到这个文件夹下面
我是在这个网站下下的, 没有任何问题 https://github.com/phracker/MacOSX-SDKs/releases
我们编译的是 Android 6.0 可以下 10.9 10.10 10.11 的都可以, 我尝试或10.9 和 10.11 的都编译通过了.
我们把 sdk 下下来, 解压, 并且放到 Xcode 的相应目录下面. 然后创建 名为MacOSX10.11.sdk
的快捷方式入下图:
只要执行如下命令即可
sudo ln -s MacOSX10.11 MacOSX10.11.sdk
加入 MacOSX 的 sdk 后, 我们还需要修改一个文件, 位置如下
源码目录/build/core/combo/mac_version.mk
我们打开这个文件, 发现是一些mac 的环境校验
这个文件我们只要修改一行, 修改为下图那样子就可以了:
自此 Mac 编译 Android 源码的环境配置算是真的结束了.
第二次编译
清理
我们在 Android 源码目录下执行如下清理命令:
make clobber
没有任何异常
设置环境
source build/envsetup.sh
没有任何异常
选择编译目标
lunch
执行 lunch 命令后, 会输出一个列表让我们选择
我这边是计划, 吧编译好的 rom 直接刷到 N5手机上的, 所以这里我选了 aosp_hammerhead_userdebug
这里来简单说一说 列表中各项是什么意思,
其实 lunch
命令的格式是 lunch BUILD-BUILDTYPE
如果我们后面没有输入BUILD-BUILDTYPE
则会弹出一个列表让我们选择
我们就以aosp_hammerhead_userdebug
来看BUILD-BUILDTYPE
aosp_hammerhead
是 BUILD
userdebug
是 BUILDTYPE
hammerhead
其实是 N5 手机的别名, 所以这里我才会选这个
什么是BUILD
BUILD指的是特定功能的组合的特定名称,即表示编译出的镜像可以运行在什么环境.其中,aosp(Android Open Source Project)代表Android开源项目;arm表示系统是运行在arm架构的处理器上,arm64则是指64位arm架构;处理器,x86则表示x86架构的处理器;此外,还有一些单词代表了特定的Nexus设备,下面是常用的设备代码和编译目标,更多参考官方文档
什么是BUILDTYPE
BUILD指的是特定功能的组合的特定名称,即表示编译出的镜像可以运行在什么环境.其中,aosp(Android Open Source Project)代表Android开源项目;arm表示系统是运行在arm架构的处理器上,arm64则是指64位arm架构;处理器,x86则表示x86架构的处理器;此外,还有一些单词代表了特定的Nexus设备,下面是常用的设备代码和编译目标,更多参考官方文档
设备型号 | 设备代码 | 编译目标 |
---|---|---|
Nexus 6P | angler | aosp_angler-userdebug |
Nexus 5X | bullhead | aosp_bullhead-userdebug |
Nexus 6 | shamu | aosp_shamu-userdebug |
Nexus 5 | hammerhead | aosp_hammerhead-userdebug |
如果不需要刷入到手机上的话,选择 arm 或者 x86 的即可
开始编译
通过make指令进行代码编译,该指令通过-j参数来设置参与编译的线程数量,以提高编译速度.比如这里我们设置8个线程同时编译:
make -j8
参与编译的线程并不是越多越好,通常是根据你机器cup的核心来确定:core*2,即当前cpu的核心的2倍.
比如我的 mac 是4核心 4线程的, 所有使用8个线程编译最好
编译一个多小时后, 看到 ### make completed successfully (01:18:45(hh:mm:ss))
表示编译成功了, 如下图:
运行模拟器
如果我们之前选择的是 aosp_arm_eng
这些的话, 那么可以直接运行如下命令启动虚拟机
source build/envsetup.sh
lunch(选择刚才你设置的目标版本,比如这里了我选择的是2)
emulator
如果我们是编译后立即运行虚拟机的话, 由于之前执行过 source 和 lunch 命令, 这里只需要执行 emulator
命令
我这边选择的是 aosp_hammerhead-userdebug
电脑环境不对, 等了好久, 也没看到开机界面.
下载驱动
源码编译好后, 接下来我们需要吧 rom 刷入到 N5 手机上了.
别急着刷, 这里我们还需要针对我们的 AOSP 版本, 选择 N5 手机的相应驱动.
我们下载的是 android-6.0.1_r77
看上图, 编号是
M4B30Z
我们在这个网站中https://developers.google.com/android/drivers搜索M4B30Z即可, 如下图:
我们把上面三个文件下载下来, 并解压到源码目录下,
其实就是三个 shell 脚本文件, 如下图:
然后我们在 termianl 中依次执行者三个文件,例如:
$ ./extract-broadcom-hammerhead.sh
The license for this software will now be displayed.
You must agree to this license before using this software.
Press Enter to view the licensels
回车后查看license,翻到license最后,输入I ACCEPT后回车,这时会将驱动文件释放到vendor目录。
依次将驱动搞定之后,按照前面的步骤再次编译, 这次编译会很快的, 别急.
开始刷机
再次编译完后, 开始使用 fastboot 刷机了
插上手机, 执行如下命令:
#手机连上电脑的情况下
adb reboot bootloader
#cd 到源码编译输出的目录
fastboot -w flashall
等一会, 手机刷完重启后就是自己的编译的 Android 系统了
编译完源码后, 接下来该仔细看看 android 源码了, 使用 IntelliJ 查看 Android 源码