Mac 10.14 编译Android 8.0源码

编译安卓8.0源码,直接开涮就是了。
我的系统环境:
Mac10.14.5
Mac SDK版本:10.11
make版本3.81
编译安卓版本:android 8.0.0-r31

大纲

1、如何下载安卓源码
2、如何编译安卓源码
看着简单,实际上坑是无比的多,现在就为了减少小伙伴们浪费宝贵时间,这里根据mac当前最新版系统给大家来个安卓8.0源码编译的预热。

1、如何下载安卓源码

一、安装repo:
确保您的主目录中有一个 bin/ 目录,并且它包含在您的路径中:

mkdir ~/bin
PATH=~/bin:$PATH

二、下载 Repo 启动器,并确保它可执行:

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

三、初始化 Repo 客户端 ,挑选一个空目录来安置你的repo工作文件

mkdir filePackageName
cd filePackageName

四、运行 repo init 可以获取最新版本的资源,这里如果你需要获取指定版本的资源,需要后面跟上指定的版本号。
https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds
点击查看安卓版本列表。

repo init
// 指定版本资源,请使用 -b 指定此分支
repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r31
// -u 是指定从什么源下载资源,如果google服务受限,这里你可以使用清华源,具体清华源的只需要把-u后面的地址换成清华源的地址就OK。
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.0.0_r31

五、要将 Android 源代码树从默认清单中指定的代码库下载到工作目录

repo sync

这里就是漫长的同步过程。
sync同步完成后,我们就完成了安卓源码的下载。这里有两个坑:

  • 安卓源码资源较大
  • 因为墙的关系,只能使用第三方镜像,可能受服务稳定性因素影响
    这里插一句嘴,通过谷歌没有拉代码提示time out 的另外一种原因还可能是无权限,需要对谷歌账号授权。https://android.googlesource.com/new-password
    点击此地址按照提示完成授权即可。

2、如何编译源码

这里由于笔者没有Ubuntu,穷的只有单位的mac,这里尴尬只会mac环境配置请见谅。
一、创建文件系统
可以通过 shell 使用以下命令创建文件系统:

hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/AndroidSourceCode/android.dmg

如果后期觉得这个内存小了,可以随时动态命令修改,但是需要先卸载路径

//卸载挂载文件
hdiutil detach /Volumes/android
//重新设置大小
hdiutil resize -size 150g ~/android.dmg.sparseimage
//重新挂载关联,之前笔者是在Code根目录下创建的android.dmg
hdiutil attach ~/Code/android.dmg -mountpoint /Volumes/android

这里有一个坑,笔者在重置大小重启设备后依然没有生效,重复2次操作后才生效。如何验证是否生效。

// 查看盘符大小
df -h
df-h命令.png

二、安装 Xcode 命令行工具
常规命令如下:

xcode-select --install

但是大伙在新版xcode会发报错,Mac最新场景下安装Xcode时已经没有Command Line了,需要单独安装。根据提示在使用命令xcode-select --install 安装时最后结果是不能安装该软件。
解决方案:
Developer Apple上手动下载对应的Command Line Tools 安装即可。
三、安装 MacPortsHomebrew 以进行软件包管理。
如果使用 MacPorts:

POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg bison

如果使用 Homebrew:

brew install git gnupg2 bison gmake libsdl

java jdk这些基础依赖小伙伴们肯定有了,就忽略了啊。
三、设置文件描述符数量上限
在 macOS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。要提高此上限,请将下列行添加到 ~/.bash_profile 中:

# set the number of open files to be 1024
ulimit -S -n 1024

哈哈,此时此刻激不激动,我们要编译了。这里建议大家全部采用mac 自己的bash 不要用zsh或者其他第三方bash,容易出现莫名其妙的问题,笔者就是被这些莫名其妙的问题搞了一天,最终切回系统bash完美解决.
四、编译前的最后一道准备,清除数据

make clobber

这里很多人会遇到下面两个坑:

  • 找不到jdk,这个在根目录的.bash_profile文件中添加
export ANDROID_JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

第二个问题是找不到对应的MacOSX.sdk,比如找不到MacOSX10.12.sdk,你需要到 https://github.com/phracker/MacOSX-SDKs/releases 下载需要的版本,我这里下载的是MacOSX10.12.sdk,解压复制到如下目录

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs

接下来会碰到第三个问题,log如下如下,可能每个人显示的都不一样的,注意看是否有external/bison/这些log。参考build aosp on Mac OS 10.13 failed来解决

Patch [bison fix](https://android-review.googlesource.com/c/platform/external/bison/+/517740) for High Sierra and build bison:

    1. cd /Volumes/AOSP/external/bison
    2. git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160
    3. mm

Replace prebuilt bison binary with patched binary

    1. cp /Volumes/AOSP/out/host/darwin-x86/bin/bison /Volumes/AOSP/prebuilts/misc/darwin-x86/bison/

Build

    1. make  -j12

如果mm命令无法执行,需要回去执行以下命令

1. source build/envsetup.sh
2. lunch 之后回到external/bison目录
3. mm

五、设置环境

source build/envsetup.sh

六、lunch
这里在设备列表里面根据想要刷机的设备自己选择就好了,一般不选择就默认是1.这里建议啊如果是在自己模拟器上跑就是选x86如果是在其他真机中,大部分都是arm.
七、编译代码

make -jN
// 示例:我的电脑是6核心。就是6*2=12
make -j12

-jN 表示编译并行任务数,这个示电脑情况而定,一般取cpu数的1~2倍就可以
如果你按照我的设置都设置过,那你遇到的坑,在上面找不到的就一个了,内存不足的坑,哈哈。
我这里是用Mac SDK10.11编译,如果您的设备SDK不想换就是10.12或者更高版本请参考https://www.jianshu.com/p/1513fc9e1a74
至此,安卓编译8.0源码篇结束,接下来会抽空写如何debug、查阅、完成安卓源码写入设备。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容