截至目前mac环境下android源码编译最新避坑指南
避坑方法
源码、SDK、机型版本一定要清楚,有些特殊的版本需要特殊的方法,官网可能有说明,之前看别人的blog,大家写得都差不多,但由于我的os比别人新,系统使用的sdk位置被改了。。。,还有我机型比较特殊(pixel 2 xl),这个需要加一条特殊命令才能使驱动可用。。。,我不敢保证其他机型没有这种情况,所以出现奇怪的问题时最好仔细看看官网教程。
配置(不说配置的都是耍流氓)
os: macos11.3.1 SDK: 10.15(注意不要看错了,我之前下成了10.1.5。。。) Java Version: 1.8 android源码:android-10.0.0_r1 代号、标记和细分版本号、源码下载(根据对应代号、标记下载相应版本源码) 机型:Pixel 2 XL
下载
下载repo(一种源代码同步工具,类似于git),这儿加环境变量是为了方便使用repo同步源码树
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o ~/bin/repo #使用tuna的git-repo镜像
chmod a+x ~/bin/repo #为repo文件添加权限
#为了能够到tuna上找镜像,需要将bin文件夹下的repo文件中的REPO_URL更改
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
#改为
REPO_URL = 'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
初始化repo客户端 这儿需要注意的是macos上默认的文件系统是不区分大小写的,而android源码是区分大小写的,所以不能直接放在默认的文件系统上,方法一:在文件系统上分区(这儿要选择区分大小写,日志式);方法二:在外置移动硬盘上进行分区(同样选择区分大小写,日志式),如果外置移动硬盘已经是该格式,则不需要做该操作。我出于内置ssd空间大小的考虑,采用了第2种方法,这里建议分个300G以上。
#建立工作目录,工作目录可以改成任何你喜欢的名字,这儿建议改成android版本,
#例如android_10。由于我是在外置的磁盘上放入android源码,
#因而该目录放在外置磁盘区分大小写和日志式的分区下。
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
#初始化仓库
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
#下载特定的android版本(我这儿下的是android-10的第1个版本),
#不加-b xxxx会默认下载最新版本。
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r1
下载android源码树
repo sync
编译
编译一时爽,翻车火葬厂,这儿是踩坑最多的地方,虽说命令就那么几条,但可能报各种错误。 准备工作
- 第一步
mac下需要下载xcode,注意这儿新版xcode使用的sdk路径很可能不是/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/,可以使用xcrun --show-sdk-path命令查看xcode使用的sdk路径,我这儿是放在/Library/Developer/CommandLineTools/SDKs/目录下,把sdk10.15(强烈建议使用这个,使用别的虽然在修修补补之后也能成功,但可能需要几个小时才报错。。。) 放在前面的目录下,然后在 ./build/soong/cc/config/x86_darwin_host.go (.表示android源码根目录,就是那个WORKING_DIRECTORY目录)中的darwinSupportedSdkVersions添加一个10.15(就是刚才放入对应目录下的sdk版本)。 - 第二步
驱动下载 一定要下载对应机型的对应android版本的驱动,将两个文件下载后,均解压,放在android源码的根目录下。下图为我需要下载的驱动版本,你根据自己需要进行选择。
现在才可真正地进入编译了(祝你一帆风顺) 这里需要进入进入到android源码根目录,cd到WORKING_DIRECTORY中。
#可以换成make clean,它用来清除上次编译的产物,
#第一次编译可不用这条命令,后续编译需要加这条命令
make clobber
#初始化编译环境
source build/envsetup.sh
#选择与设备对应的编译版本,
#可查看https://source.android.google.cn/setup/build/running?hl=zh-cn#selecting-device-build
lunch
#x是一个数字,选择机器核的个数的两倍最为适宜,我机器为6核,则x取12,make -j12
make -jx
第一次编译至少得3h吧,如果没啥报错的话,最终会正常退出,显示出一条绿色成功的消息,告诉你编译花了多长时间。
烧录
本来编译完之后,剩下的事情应该很轻松了,但我却踩了个大坑,原因就是这个机型特殊,我们先看官方教程 它说只对loader版本早于TMZ20a的Pixel 2 XL机型使用(这里我要吐槽一万遍),好家伙,我按照别人的烧录过程做了一遍又一遍,总是出现开机启动界面和bootloader界面无限重启的现象,结果是这个原因。。。,所以各位在遇到奇怪的问题或是别人没遇到的问题时,一定要仔细看看官方教程,我不敢保证除了这一个机型或者android源码,其他不需要加些额外的东西。
那么知道了这个之后,就可以正常烧录了。如有不清楚的地方,请看官方烧录指南
#首先设置一下ANDROID_PRODUCT_OUT,这个变量就是告诉手机到电脑的哪里找镜像烧录。
echo ${ANDROID_PRODUCT_OUT} #如果输出为空,则说明未设置,否则已经设置
#这儿是我编译好的镜像所在目录,你设置成你自己的,
#由于这里我为省事,没有加入环境变量,电脑重启后需要重设,当然也可以选择加入环境变量
ANDROID_PRODUCT_OUT=/Volumes/AOSP/android-10/out/target/product/taimen
#解锁
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 #刷机
正常情况下,刷机后,手机会自动重启,能正常开机则成功了
注意事项
本教程还未经过验证,这是我编译、烧录完之后隔了一段时间才想起来写的,可能有些内容写得不够详细,但一些很关键的问题我都有指出,如有问题,请不吝指正。
|