老板:小X,我这个Android系统你安排定制下

android studio 下载 | 2018-10-13 00:39

老板: 小X啊,我这个手机咋没啥特色啊.你看这个设置页和别人的都没啥区别.小X: emmmm..你想要啥特色?老板: 就是那种能体现我的特色的特色啊.小X: 好好好,特色是吧?安排上.

今天这篇博客就记录了小X是如何通过修改 Android 的系统源码来定制 Android 系统的.

内容主要包括下面几点:

系统环境的预准备

下载 Android 源码

编译 Android 源码

刷写设备

定制 Android 系统

下载 Android 源码并编译网上已经有很多教程了,我这里使用的是 mac 系统编译,如果你也查找过相关博客可以知道 mac 系统编译 Android 源码会遇到很多坑.网上也有利用 docker 来创建 Ubuntu Image 的方式来进行 Android 系统编译的,例如 weishu大佬的这篇<史上最简单Android源码编译环境搭建方法>, 利用了 docker-aosp 开源项目来进行傻瓜式的下载编译.最开始我也尝试使用这种方式,不过发现在新版的 mac 系统,因为 uid 的问题导致无法编译成功(issues19), 我也没有过多的花时间去解决这个 uid 的问题,总之最后我选择使用了传统的方式,尤其是第一次尝试下载编译的,还是不要把这个过程变成一个黑匣子.

下面我会用我的踩坑经验来尽量让大家避免在下载编译,包括刷机时会遇到各种各样的错误.保证按照这个教程最后都能刷机成功,不过由于环境的复杂性,可能还是会遇到其他我没遇到的问题,这时可以 Google 之..

下面是我的初始环境,电脑系统也是刚重装过的

系统: macOS High Sierra 10.13.6

xcode: v9.4.1

手机: Nexus 6

终端: zsh

编译 Android 源码需要保证自己的所在的分区格式是区分大小写的,而一般 macOS 默认是不区分的,所以需要创建独立的分区来编译源码.

创建存放 dmg 的位置

cd ~mkdir asop利用 hdiutil 创建分区

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 200g ~/aosp/android.dmg -volname android

这里我创建 200G 的分区用来下载和编译.最终实际使用了接近 130G.所以建议有足够大小的最好创建超过 150G 的分区大小.

创建挂载的快捷命令

vi ~/.zshrc 将下面内容复制到最后.

# mount the android file imagefunction mountAndroid { hdiutil attach ~/aosp/android.dmg.sparseimage -mountpoint /Volumes/android; }# unmount the android file imagefunction umountAndroid() { hdiutil detach /Volumes/android; }应用配置 source ~/.zshrc

挂载 mountAndroid

这样就会在 /Volumes 目录下创建了 android 目录.这就是之后下载源码的路径,这里我创建了子文件夹来存放: /Volumes/android/ANDROID_SPACE

网上很多教程是用新版本 xcode, 然后通过修改下载后的源码中的某配置来添加支持的方式,如下:

vi build/core/combo/mac_version.mk添加10.13在后面 mac_sdk_versions_supported := 10.8 10.9 10.10 10.11 10.13不过这种方式最后在编译的时候,都会有各种各样的问题.

现在如果你和我一样,都是使用 xcode 8.3.3 的话,还需要到 -SDKs 中下载 10.11 的 mac sdk,否则还是会在编译时出现一些错误.

将下载下来的压缩包解压放到