环境准备

官网 描述得已经相当清楚了 ,这里稍微总结一下:

创建区分大小写的磁盘映像

mac系统默认是不区分大小写的,所以我们需要创建一个区分大小写的文件系统

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 60g ~/android.dmg
复制代码

这将创建一个.dmg.sparseimage文件,该文件在装载后可用作具有 Android 开发所需格式的驱动盘。

按官网所说完成编译至少需要 25GB 空间,相信我,其实至少需要60G。当然,空间大小后面还可以通过以下命令修改

hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
复制代码

为了方便,我们还可以往环境变量配置文件(~/.bash_profile--bash,~/.zshrc--zsh)添加辅助函数

  • 装载函数
# mount the android file image
mountAndroid() { hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android;
复制代码
  • 卸载函数
 # unmount the android file image
umountAndroid() { hdiutil detach /Volumes/android; }
复制代码

安装所需的软件

  • JDK

    各种 Android 版本使用的 Java 版本不一样,请参阅相关要求

    我这里是编译Android8.1.0 ,所以使用java1.8

  • Xcode 命令行工具

xcode-select --install
复制代码
  • MacPorts

    从macports.org 下载安装,请确保 /opt/local/bin 在路径中显示在 /usr/bin 前面。否则,请将以下内容添加到环境变量配置文件(~/.bash_profile--bash,~/.zshrc--zsh)中:

export PATH=/opt/local/bin:$PATH
复制代码

通过 MacPorts 获取 Make、Git 、 GPG、BISON 软件包

POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg bison
复制代码

设置文件描述符数量上限

在 Mac OS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。要提高此上限,请将下列行添加到环境变量配置文件(~/.bash_profile--bash,~/.zshrc--zsh)中:

# set the number of open files to be 1024
ulimit -S -n 1024
复制代码

下载源代码

Android 源代码树位于由 Google 托管的 Git 代码库中。为了在 Android 环境中更轻松地使用 Git,Google开发了Repo。

安装 Repo

  1. 确保主目录下有一个 bin/ 目录,并且该目录包含在路径中:
mkdir ~/bin
PATH=~/bin:$PATH
复制代码
  1. 下载 Repo 工具,并确保它可执行
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
复制代码

repo 初始化

进入我们一开始创建的文件系统,创建一个空目录

➜  ~ mountAndroid
/dev/disk3              GUID_partition_scheme
/dev/disk3s1            EFI
/dev/disk3s2            Apple_HFS                       /Volumes/android
➜  ~ cd /Volumes/android
➜  ~ mkdir aosp
➜  ~ cd aosp
复制代码

指定需要checkout对应的源代码标记和编译版本

repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r50
复制代码

初始化成功后,目录中应包含一个 .repo 目录。

下载

这时候就可以开始漫长的下载过程了

repo sync
复制代码

同步操作顺利的话将需要 1 个小时或更长时间完成,

下载驱动

从官网下载对应机型驱动即可,下载完成后解压,依次执行里面的sh文件,如:

$ ./extract-huawei-angler.shThe license for this software will now be displayed.
You must agree to this license before using this software.Press Enter to view the licensels
复制代码

执行完毕,驱动文件会释放到vendor目录。

编译

清理

make clobber
复制代码

设置环境

source build/envsetup.sh
复制代码

选择目标

➜  ~ lunchYou're building on DarwinLunch menu... pick a combo:1. aosp_arm-eng2. aosp_arm64-eng3. aosp_mips-eng4. aosp_mips64-eng5. aosp_x86-eng6. aosp_x86_64-eng7. aosp_deb-userdebug8. aosp_flo-userdebug9. full_fugu-userdebug10. aosp_fugu-userdebug11. mini_emulator_arm64-userdebug12. m_e_arm-userdebug13. mini_emulator_mips-userdebug14. mini_emulator_x86-userdebug15. mini_emulator_x86_64-userdebug16. aosp_flounder-userdebug17. aosp_angler-userdebug18. aosp_bullhead-userdebug19. aosp_hammerhead-userdebug20. aosp_hammerhead_fp-userdebug21. aosp_shamu-userdebug22. aosp_bullhead-userdebug23. aosp_angler-userdebug
复制代码

因为我要编译nexus6p,这里选择23,其他设备可以参考选择设备编译系统

编译代码

make -j8
复制代码

-jN 表示编译并行任务数,这个示电脑情况而定,一般取cpu数的1~2倍就可以

编译遇到问题

找不到对应的macOS.sdk

  • 报错日志
[44/44] bootstrap out/soong/.minibootstrap/build.ninja.in
[4/4] out/soong/.bootstrap/bin/minibp out/soong/.bootstrap/build.ninja
[860/861] glob vendor///Android.bp
[54/54] out/soong/.bootstrap/bin/soong_build out/soong/build.ninja
FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build -t -b out/soong -d out/soong/build.ninja.d -o out/soong/build.ninja Android.bp
internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12"]
ninja: build stopped: subcommand failed.
17:53:06 soong failed with: exit status 1复制代码
  • 解决方法

    修改/build/soong/cc/config/x86_darwin_host.go文件,添加10.14支持,如下

darwinSupportedSdkVersions = []string{
"10.10",
"10.11",
"10.12",
"10.14", // 添加mac sdk 10.14
}
复制代码

遇到bison 错误

  • 报错日志
FAILED: out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.c out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.h
BISON_PKGDATADIR=external/bison/data prebuilts/misc/darwin-x86/bison/bison -d --defines=out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.h -o out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.c external/selinux/checkpolicy/policy_parse.y
[ 0% 309/87784] //external/libcxx:libc++_static header-abi-dumper src/random.cpp [arm]
ninja: build stopped: subcommand failed.
18:05:05 ninja failed with: exit status 1 复制代码
  • 解决办法
cd /Volumes/AOSP/external/bison
git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160
mm
# 用新生成的bison替换掉原bison文件
cp /Volumes/AOSP/out/host/darwin-x86/bin/bison /Volumes/AOSP/prebuilts/misc/darwin-x86/bison/
# 重新编译
make -j8
复制代码

刷机

经过漫长的等待和反复折腾后,终于到了最后一步---刷机。

# 手机连接电脑情况下
adb reboot bootloader
# 进入源码编译输出的目录
fastboot flashing unlock
fastboot flashall -w 复制代码

Done

参考链接

source.android.com/setup/build…

www.jianshu.com/p/1c3d47b20…

Mac 10.14 编译Android 8.1源码及刷入nexus 6p相关推荐

  1. 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fuchaosz/article/details/52473660 1 前言 经过一周的奋战,终于从谷 ...

  2. android源码编译并刷入nexus 6p手机

    来自"梧桐那时雨"的博客:https://blog.csdn.net/fuchaosz/article/details/52473660 1 前言 经过一周的奋战,终于从谷歌官网上 ...

  3. [Android编译(二)] 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机

    1 前言 经过一周的奋战,终于从谷歌官网上下载最新的Android 6.0.1_r62源码,编译成功,并成功的刷入nexus6p,接着root完毕,现写下这篇博客记录一下实践过程. 2 简介 自己下载 ...

  4. Ubuntu 12.04(64位)下载并编译 Android 4.1 源码[只有2条命令]

    2019独角兽企业重金招聘Python工程师标准>>> Ubuntu 12.04(64位)下载并编译 Android 4.1 源码[只有2条命令] ================= ...

  5. android 源码编译core dumped,Ubuntu18.04 编译Android 8.1 源码出现的问题及解决笔记

    Ubuntu18.04 编译Android 8.1 源码出现的问题及解决笔记 经过不断的尝试并经过一晚上的编译终于在ubuntu18.04的虚拟机内编译成功Android 8.1,下面我列举以下在编译 ...

  6. 编译Android 9.0内核源码并刷入手机

    目的:修改内核源码,并刷入手机 步骤如下: 1.获取手机对应的内核下载地址 参考https://source.android.com/setup/build/building-kernels 我的设备 ...

  7. lineageOS编译aosp源码并刷入小米Mix2S

    本篇文章教大家修改Android系统源码并刷入到自己的国产手机,这对于手上没有pixel手机的小伙伴来说是个好消息,本文以mix2 为例,其他手机基本可以才考这篇文章的思路去做,定制属于自己的操作系统 ...

  8. 3288 android5.1 编译,【DLT-RK3288试用】8. RK3288 编译 Android 5.1 源码

    首先下载源码,在官方资料包里面有这个源码,路径为 Android 5.1 源码\dlt-rk3288.tar.gz复制代码 上贴中已经通过虚拟光驱加载到ubuntu中了. 然后就是检验MD5码,查看源 ...

  9. 自己动手编译Android 8.0源码

    转载自:http://blog.csdn.net/dl6655/article/details/78869501 安装git并且配置 sudo apt-get install git git conf ...

最新文章

  1. Ext-第一课基本配置
  2. html input不可编辑
  3. Codeforces Round #540 (Div. 3) A,B,C,D2,E,F1
  4. BEA Workshop Studio有什么用?
  5. [转]hibernate------HQL总结
  6. pytorch 常用的 loss function
  7. 算法(14)-leetcode-explore-learn-数据结构-二叉树的遍历
  8. c语言变量的值也可以不改变6,C语言学习复盘整理笔记(六)
  9. .NET Remoting Basic(9)-上下文(CallContext)
  10. 零基础多久能学会python_零基础小白多久能学会python
  11. GPS从入门到放弃(十九) --- 精密星历
  12. 量子计算机的加密安全性,公钥加密机制被量子计算机攻破,传统加密方式不再安全...
  13. Qt通过ODBC连接opengauss数据库
  14. 9_林业专题图的制作
  15. python 管道游戏_用Python做flybird游戏
  16. mysql校对集_MySQL校对集问题
  17. shuipFCMS后台去版权
  18. 搜索结果Refinement 行为总结之 multi-selection refinement
  19. 玩转Spring Cloud Security OAuth2身份认证扩展——电话号码+验证码认证
  20. 东南大学计算机专硕录取分数线,东南大学研究生录取分数线

热门文章

  1. 使用Nginx抵御DDOS攻击
  2. L298P控制引脚测试报告
  3. 转一封菜鸟来信及关于如何提问,还有其他
  4. 简易博客搭建(html与css学习)(静态网页)
  5. 基于多软件的STK模型转换应用研究
  6. 检测设备是否支持Google Play服务
  7. Java5年经验字节社招:半月3次面试,成功拿到Offer
  8. hadoop集群部署
  9. 什么是缺陷清除率、缺陷率和缺陷密度
  10. vue开发者工具无法使用问题汇总