mac下编译android源码避坑指南(新)

截至目前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      #刷机

正常情况下,刷机后,手机会自动重启,能正常开机则成功了

注意事项

本教程还未经过验证,这是我编译、烧录完之后隔了一段时间才想起来写的,可能有些内容写得不够详细,但一些很关键的问题我都有指出,如有问题,请不吝指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值