MacOS 10.13 编译 Android 源码

MacOS 下载 Android 源码
MacOS 10.13 编译 Android 源码
Android 源码目录结构解析
Android 手机 Root、debug 模式(修改源码方式)

前言

原来下载下来编译其实还挺简单的,直接照官方指导执行就行了,结果现在再编译就各种问题,搞了大半天才算彻底搞定,主要是因为系统、软件等版本问题,记录下,避免以后别人再采坑了。

以下顺序不要搞错,不然会来回返工反而费时费力:

  • 检查 jdk 版本
  • 检查 Xcode 版本
  • 检查 Xcode 命令行工具是否安装
  • 安装 MacPorts
  • 安装 Make、git、GPG 等
  • 编译

环境准备

切换 Java 版本到 1.7

关于 java sdk 的版本要求可以看 jdk 版本要求

我要编译的是 Android 6.0,需要的 java 版本是 1.7,但是我平时使用的是 1.8,所以可以在 ~/.bash_profile 添加如下代码:

export JAVA_7_HOME="$(/usr/libexec/java_home -v 1.7)"
export JAVA_8_HOME="$(/usr/libexec/java_home -v 1.8)"

#默认JDK 8
export JAVA_HOME=$JAVA_8_HOME

alias jdk7="export JAVA_HOME=$JAVA_7_HOME"
alias jdk8="export JAVA_HOME=$JAVA_8_HOME"

当编译 Android 版本时直接命令行执行如下命令就可以直接切换到 Java 1.7 了:

jdk7

Xcode 降级

对于 Xcode 9.0 版本的童鞋需要降级到 8.+ 版本才可使用,不然报错如下:

In file included from external/libcxxabi/src/cxa_exception.cpp:18:
external/libcxx/include/cstdlib:159:44: error: declaration conflicts with target of using declaration already in scope
inline _LIBCPP_INLINE_VISIBILITY long abs(  long __x) _NOEXCEPT {return labs(__x);}
 ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/stdlib.h:111:44: note: target of using declaration
inline _LIBCPP_INLINE_VISIBILITY long abs(  long __x) _NOEXCEPT {return labs(__x);}
 ^
external/libcxx/include/cstdlib:134:9: note: using declaration
using ::abs;
 ^
external/libcxx/include/cstdlib:161:44: error: declaration conflicts with target of using declaration already in scope
inline _LIBCPP_INLINE_VISIBILITY long long abs(long long __x) _NOEXCEPT {return llabs(__x);}
xcode_downgrade_tip.png

具体上下文可参见XCode 9 - new LLVM headers causing errors,流程就是如下两步:

  • 完整卸载 Xcode 9,依次删除如下文件(或者使用其他工具)
  1. /Applications/Xcode.app
  2. /Library/Preferences/com.apple.dt.Xcode.plist
  3. ~/Library/Preferences/com.apple.dt.Xcode.plist
  4. ~/Library/Caches/com.apple.dt.Xcode
  5. ~/Library/Application Support/Xcode
  6. ~/Library/Developer

安装 Xcode 命令行工具,执行命令如下:

xcode-select --install

安装 MacPorts

MacPorts 官网 下载安装

请确保 /opt/local/bin 在路径中显示在/usr/bin 前面。否则,请将以下内容添加到 ~/.bash_profile 文件中:

export PATH=/opt/local/bin:$PATH

安装 Make、git、GPG 等

POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg2

编译

然后就是编译啦,在源文件根目录(此处我的示例就是 /Volumes/android/android-6.0.1_r77)依次执行如下命令:

清空以前编译操作的遗留的输出

make clobber

初始化环境

source build/envsetup.sh

选择要编译的目标:

lunch
Lunch menu... pick a combo:
 1\. aosp_arm-eng
 2\. aosp_arm64-eng
 3\. aosp_mips-eng
 4\. aosp_mips64-eng
 5\. aosp_x86-eng
 6\. aosp_x86_64-eng
 7\. aosp_deb-userdebug
 8\. aosp_flo-userdebug
 9\. full_fugu-userdebug
 10\. aosp_fugu-userdebug
 11\. mini_emulator_arm64-userdebug
 12\. m_e_arm-userdebug
 13\. mini_emulator_mips-userdebug
 14\. mini_emulator_x86-userdebug
 15\. mini_emulator_x86_64-userdebug
 16\. aosp_flounder-userdebug
 17\. aosp_angler-userdebug
 18\. aosp_bullhead-userdebug
 19\. aosp_hammerhead-userdebug
 20\. aosp_hammerhead_fp-userdebug
 21\. aosp_shamu-userdebug
 Which would you like? [aosp_arm-eng]

然后选择你想执行的,我选的是 aosp_hammerhead-userdebug,然后 Enter 键执行选择

编译

make -j8
make_completed.png

硬件配置:2015顶配 MBP,Intel i7 2.5GHz、4核、16G内存、500 ssd,用时 1小时 11分钟

刷机

先转到 FastBoot 模式,执行命令如下:

adb reboot bootloader

跳转到输出 img 的目录:

cd 源码位置/out/target/product/hammerhead/

然后就是刷机啦(这样刷机数据可都是会丢失的哈,注意用测试机):

fastboot -w flashall

MacOS 10.13 常见的一些错误:

gnupg2

Error: gnupg has been deprecated. If you absolutely want to stay on the classic version, install the gnupg1 port. All other users are recommended to install gnupg2.

如文中所示,gnupg 已经被废弃了,但是有可能任然需要用,所以安装的时候要安装 gnupg2

POSIXLY_CORRECT=1 sudo port install gnupg2

MacOS sdk

build/core/combo/mac_version.mk:38: *****************************************************
build/core/combo/mac_version.mk:39: * Can not find SDK 10.6 at /Developer/SDKs/MacOSX10.6.sdk
build/core/combo/mac_version.mk:40: *****************************************************
build/core/combo/mac_version.mk:41: *** Stop.. Stop.
macos_sdk_tip.png

顾名思义,就是缺少了 MacOS sdk,直接非官方下载就可以了,下载到的文件是 MacOSX10.11.sdk.tar.xz 文件

  • 先解压缩:
tar -xf MacOSX10.11.sdk.tar.xz
  • 然后将解压得到的 MacOSX10.11.sdk文件夹复制到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs文件夹下

Xcode 命令行工具没有安装或者版本问题

Yacc: libmcldScript <= frameworks/compile/mclinker/lib/Script/ScriptParser.yy
prebuilts/misc/darwin-x86/bison/bison -d -o out/host/darwin-x86/obj/STATIC_LIBRARIES/libmcldScript_intermediates/ScriptParser.cpp frameworks/compile/mclinker/lib/Script/ScriptParser.yy
frameworks/compile/mclinker/lib/Script/ScriptParser.yy:28.1-5: invalid directive: `%code'
frameworks/compile/mclinker/lib/Script/ScriptParser.yy:28.7-14: syntax error, unexpected identifier
make: *** [out/host/darwin-x86/obj/STATIC_LIBRARIES/libmcldScript_intermediates/ScriptParser.cpp] Error 1
make: *** Waiting for unfinished jobs....
xcode_commandline_tip.png

如果没有安装执行如下命令安装:

xcode-select --install

如果已经安装但仍有问题,可以删除后重新安装:

sudo rm -rf /Library/Developer/CommandLineTools
xcode-select --install

bison

make: *** [out/host/darwin-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp] Abort trap: 6
make: *** Waiting for unfinished jobs....
bison_error_tip.png

具体原因可见 build aosp on Mac OS 10.13 failed,原因就是直接下载下来的源码中的 bison 版本中包含一个 bug,官方也已修复,所以直接下载官方的最新版本替换即可

./configure
make
make install

安装成功后复制最新的可执行文件 /bison 所在的位置/src/bison/Android 源码所在位置/android-6.0.1_r77/prebuilts/misc/darwin-x86/bison/

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,520评论 25 707
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_x阅读 15,968评论 3 119
  • 乡村的冬日 文/刘文安 大集体年代,农村的居房,大多是土坯房,屋顶都是麦秸排插的,算是茅屋吧,只有屋檐和窗口才会用...
    刘文安阅读 296评论 0 0
  • 金钱,人性 最后金钱还是败在人性上
    独家记忆红艳阅读 156评论 0 0
  • 那么久都没睡着的结果就是,饿了,饿了,饿了……唉,忧伤。 鼻子呼气打到手机屏幕上,模糊了一篇。 今夜失眠了,没有胡...
    西达雅阅读 999评论 2 2