Mac Mojave编译AOSP趟坑

编译AOSP源码 官方文档写的很详细,Mac上有几个坑需要注意下:(OS 10.14.5)
错误零区分大小写的磁盘分区
官方文档Creating a case-sensitive disk image也是有的,但是我感觉文档放的稍微位置靠后,有时候会导致前面事情白做。原因是Mac文件系统不区分大小写,但是AOSP编译要求区分大小写。
步骤:打开Disk Utility (磁盘工具)然后添加一个Volume,记得选择区分大小写的选项就好了

错误一:找不到 JDK 的 tools.jar 包

build/core/config.mk:663: error: Error: could not find jdk tools.jar at /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/…/lib/tools.jar, please check if your JDK was installed correctly.

我首先 Java -v 看了下 JDK 确实是安装了的,且包含在系统路径下,后来发现编译时使用的环境变量并不是 “JAVA_HOME” 而是 “ANDROID_JAVA_HOME”,解决方法很简单,就是在~/.bash_profile 中添加
export ANDROID_JAVA_HOME=$JAVA_HOME

错误二:找不到对应的 sdk 版本

FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build -t -l out/.module_paths/Android.bp.list -b out/soong -n out -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” “10.13”]
ninja: build stopped: subcommand failed.

运行命令查看本机安装的 sdk 版本

find /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs -iname "*.sdk"

发现我本机安装的版本是 10.14,确实不在配置文件的要求中,最简单粗暴的方法就是修改配置文件,在 /build/soong/cc/config/x86_darwin_host.godarwinSupportedSdkVersions 变量中添加对应的版本。

事实证明,这样子做是不行的,编译之后出现了新的问题,就是 MacOSX10.14.sdk 版本导致的

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSUUID.h:26:49: error: nullability specifier ‘_Nullable’ cannot be applied to non-pointer type ‘uuid_t’ (aka ‘unsigned char [16]’)
(instancetype)initWithUUIDBytes:(const uuid_t _Nullable)bytes;
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSUUID.h:29:30: error: nullability specifier ‘_Nonnull’ cannot be applied to non-pointer type ‘uuid_t’ (aka ‘unsigned char [16]’)
(void)getUUIDBytes:(uuid_t _Nonnull)uuid;

(所以,这个故事告诉我们,不要随便乱改配置文件,别人没有写新的版本肯定是有原因的)
于是下载了一个低版本的 MacOSX.sdk,解压复制到 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ 目录下
注意下载文件是 .tar.xz 格式的,需要先用 xz -d 将 XXX.tar.xz 文件解压成 XXX.tar 格式,然后用tar -xvf 解压

错误三:Mac OS 版本过高导致 bison 有什么问题(我也不太清楚)

FAILED: out/soong/.intermediates/system/tools/aidl/libaidl-common/darwin_x86_64_static/gen/yacc/system/tools/aidl/aidl_language_y.cpp
out/soong/.intermediates/system/tools/aidl/libaidl-common/darwin_x86_64_static/gen/yacc/system/tools/aidl/aidl_language_y.h
BISON_PKGDATADIR=external/bison/data prebuilts/misc/darwin-x86/bison/bison -d --defines=out/soong/.intermediates/system/tools/aidl/libaidl-common/darwin_x86_64_static/gen/yacc/system/tools/aidl/aidl_language_y.h -o out/soong/.intermediates/system/tools/aidl/libaidl-common/darwin_x86_64_static/gen/yacc/system/tools/aidl/aidl_language_y.cpp system/tools/aidl/aidl_language_y.yy
[ 2% 1270/59686] cc out/soong/.intermediates/system/core/adf/libadf/libadf/android_arm_armv7-a_static_core/obj/system/core/adf/libadf/adf.o
ninja: build stopped: subcommand failed.
11:47:11 ninja failed with: exit status 1
make: *** [run_soong_ui] Error 1

解决办法是安装 bison 的补丁并重新编译
首先进入 bison 的目录,并安装补丁

cd /external/bison
git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160

重新编译

mm

这里 mm 命令如果执行失效,则需退回根目录重新执行 source build/envsetup.shlunch XXX,然后再回来执行 mm

编译成功后,替换 bison 目录,然后重新编译即可

cp /Volumes/Android/android-8.1.0_r1/out/host/darwin-x86/bin/bison /Volumes/Android/android-8.1.0_r1/prebuilts/misc/darwin-x86/bison/

错误四:内存不够了

GC overhead limit exceeded.
Try increasing heap size with java option ‘-Xmx’.

怎么操作都提示了,就是增加虚拟机的堆栈

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"

修改后注意重启下服务

./prebuilts/sdk/tools/jack-admin kill-server 
./prebuilts/sdk/tools/jack-admin start-server

编译完了之后,屏幕会出现这样的画面,就表示成功了(顺便吐槽一句编译完整个源码目录大概占了 128 GB 左右的磁盘空间,阔怕)

写着写着,发现了一篇文章写的很好,防止链接过时,拷贝了内容,附链接:
https://www.twblogs.net/a/5c9941bcbd9eee68b3b5abbd/zh-cn

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

推荐阅读更多精彩内容