一、准备工作
1.1 系统介绍
Mac系统版本: 12.3.1
内存: 16GB
**CPU: ** 4核i5 2GHz
磁盘:180GB
笔者曾在 Ubuntu中编译该版本,最后占用磁盘空间为154GB。具体请查看 Ubuntu16.04编译Android10源码并刷机Pixel
1.2 AOSP版本选择
1.3 磁盘准备
MacOS会在一个保留大小写,但是不区分大小的文件系统中运行。git不支持。所以需要开辟一块磁盘空间,并重新设计其格式。
在Mac Pro中,格式一块大小为 175GB的磁盘。
hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 175g ~/Downloans/android10.dmg
执行命令后:
如果后期需要调整磁盘空间,可以使用:
hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
挂载磁盘: 可以将挂架命令封装为一个函数,放在shell中,便于后面使用
# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
挂载出错:
解决办法:
将disk相关的任务杀掉。
二、源码下载
2.1 Python2.7安装(可选)
[python2.7 安装包](链接: https://pan.baidu.com/s/1_rxHpvv10FTOm77pl83hxQ 提取码: ndl6
–来自百度网盘超级会员v6的分享)
2.2 repo工具下载安装
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo
chmod +x repo
由于repo指向的google的源码镜像,考虑到网速的问题,要将其换为国内镜像:
方式一: 在 ~/.bash_profile中新增:
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
执行 source ~/.bash_profile
方式二:
修改 repo文件: 将
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
改为:
REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
2.3 源码下载
-
打开termal,将目录切换到 挂载之后的自盘目录(/Volumes/android10/)
-
创建源码存放的文件夹 WORKING_DIRECTORY,并进入该目录
mkdir WORKING_DIRECTORY cd WORKING_DIRECTORY
-
初始化aosp仓库(笔者要下载的是android-10.0.0_r1)
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r1
-
开始下载(开启4个线程去同步源码)
repo sync -j4
同步阶段,有一个同步进度:
同步代码,花去了2.5h
源码同步完成后,占用磁盘空间如下(大概101GB):
三、源码编译
3.1 编译环境准备
1. 驱动下载:
为什么选择这个驱动,可以参考笔者另一篇文章
2. 安装xcode命令行工具
xcode-select --install
3.安装MacPorts工具
并在.bash_profile中添加如下内容:
export PATH=/opt/local/bin:$PATH
source ~/.bash_profile
4.安装依赖库
POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
如果是Mac OSX v10.4 还需要安装bison
POSIXLY_CORRECT=1 sudo port install bison
3.2 编译
//1. 建立android-q开发分支:
repo start android_q --all
source build/envsetup.sh
lunch
// 接下来 等待30s,等待终端弹出 可编译的版本号,然后进行选择
// saifish****userdebug 对应的16
16
make -j8 // 8代表你想要开启的线程数,笔者电脑是4核8线程
经过漫长的等待(大约3.5小时),终于编译成功了:
编译后,整个磁盘占用情况如下(165GB):
3.3 编译遇到的坑
3.3.1 Xcode SDK 版本选择
由于笔者系统版本比较新(12.3) , 但是aosp需要的SDK版本,最高到10.14,之前的解决版本,就是在支持的版本上新增12.3 。 但是经过尝试,发现不断出错。因此 选择下载一个10.14的SDK, 并将系统支持的最低SDK版本改为10.14。
-
下载一个10.14SDK
-
修改系统支持的最小SDK版本
通过xcode修改 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/info.plist文件
由于该文件目录和文件有权限限制 ,需要先复制到当前用户有权限修改的目录下,然后修改,待完成修改后,复制回去:
如:
cp /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/info.plist ~/Downloads
3.3.2 FAILED: out/target/product/sailfish/obj/ETC/treble_sepolicy_tests_27.0_intermediates/treble_sepolicy_tests_27.0
vim system/sepolicy/tests/Android.bp
将stl: “libc++_static” 注释掉
static_libs: [ "libbase", "libsepol", ], // stl: "libc++_static", sanitize: { never: true, },
四、刷机
ANDROID_PRODUCT_OUT=/Volumes/android10/WORKING_DIRECTORY/out/target/product/sailfish
#解锁
fastboot flashing unlock #对于新款设备(2015 年及之后发布的设备)
fastboot oem unlock #对于老款设备(2014 年及之前发布的设备)
fastboot flashing unlock_critical #这条命令只有我这个奇葩机型需要,不过别的机型可能需要别的,哈哈哈
#注:很多设备可能只需第一条命令fastboot flashing unlock即可
adb reboot bootloader #进入fastboot模式(或长按Volume Down + Power键)
fastboot flashall -w #刷机