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

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

注意事项

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

mac下编译android源码避坑指南(新)相关推荐

  1. Mac下编译Android源码,并导入IntelliJ IDEA进行源码阅读

    macOS High Sierra 版本 10.13.4 Xcode 9.3 aosp分支:android-8.1.0_r20 准备编译环境 具体参考官方文档 安装 jdk8u45 or newer ...

  2. mac下编译安卓源码

    资源 Mac OS10.12 编译Android源码8.1 aosp编译-需翻墙 Mac下编译安卓源码 手把手教你在Mac OS下载.编译及导入Android源码 步骤 准备 磁盘空间大于180G 安 ...

  3. 安卓源码避坑指南3——拨打电话的SIM卡无效导致蓝牙断开连接

    安卓源码避坑指南3--拨打电话的SIM卡无效导致蓝牙断连 它来了.它来了,它带着BUG赶来了,欢迎大家查看本期的安卓源码避坑指南.本期的问题场景比较特殊,电话SIM卡是无效的(欠费过期了,很是贫穷-) ...

  4. MAC下载编译Android源码及BUG

    前言 配置如下: MAC 10.13 xcode: Version 9.2 jdk: 1.8.0_131 android源码版本: android-8.1.0_r1 最后下载完,.repo 约30G, ...

  5. 【转】ubuntu 11.10(32位系统)下编译android源码

    原文网址:http://www.cnblogs.com/dwayne/archive/2011/11/16/2251734.html 本文介绍在ubuntu 11.10系统下编译android 2.3 ...

  6. android .9编译,在Ubuntu 9.04下编译Android源码

    一直都是刷官方的版本,准备自己编译一下刷机. 首先是下载,Android的源码是托管在Linux Kernel的源码站点,所以版本工具是git.关于git的使用和安装请见我的另一篇文章<在Ubu ...

  7. linux3.10.46源码下载,Ubuntu11.10下编译android源码4.0.3

    1.初始化编译环境 软件需求: Python2.5-2.7,可以http://www.python.org/download/下载(Ubuntu11.10自带). JDK6:编译Gingerbread ...

  8. mac下调试android源码,MacBooK pro调试Android 8.1源码

    工具的选择 1.Android Studio(能够看,能够调试) 2.understand (只适合看)html macbook pro基本上只有这两款能够选择,刚开始用了understand发现并不 ...

  9. android编译空间大小,编译Android源码的坑

    完整的过程见这里http://source.android.com/source/index.html 我只是记录一下中间可能遇到的坑.我用的环境是ubuntu 16.04,源码用的Android 6 ...

最新文章

  1. iphone默认的heic格式怎么在电脑中打开
  2. C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字
  3. 端口号属于协议还是进程
  4. Hyper-v Server 2012 Release Candidate 部署体验
  5. 一张图来看看.NETCore和前后端技术的演进之路
  6. Java Web App体系结构
  7. 具有GlassFish和一致性的高性能JPA –第1部分
  8. 机器学习中的距离和损失函数
  9. Java工作笔记-接入互联网的免费WebService
  10. 存储知识学习之--IP网络存储iSCSI的概念与工作原理
  11. 2021-06-24相对定位
  12. 腾讯地图api_为你的小程序插上地图的“翅膀”,腾讯位置服务亮相阿拉丁大会...
  13. 2018java面试集合
  14. Quartus-ll 采用三种方法实现 D 触发器功能仿真及时序波形仿真详细步骤
  15. 如何制作数据透视表?超详细教程为你解答
  16. 几种常用的显示器分辨率
  17. 清华姚班和100个“张小龙”| 中国AI天才养成计划
  18. 使用Python开发一个恐龙跳跳小游戏,玩起来
  19. React 高阶组件(HOC)
  20. 辐射3特殊武器拿法(修正版)

热门文章

  1. 女孩,你为什么不沉住气奋斗
  2. c语言里的fun是什么函数,c语言fun函数有什么作用
  3. 学习VRRP虚拟路由器冗余协议与项目实例
  4. 《从程序员到项目经理》读后感-直率
  5. 又来了!针对VMware ESXi的新型勒索软件出现
  6. 微信公众平台使用百度API查询天气预报
  7. 数据库Navicat建表出现1064错误原因
  8. 10月11日 驱动开发
  9. 使用Docker部署eos-2.1 测试节点
  10. STM32驱动WK2168串口扩展芯片完整教程