MacOS 10.13 编译 Android 源码

2018-09-04  本文已影响0人  86棵梦

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

前言

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

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


环境准备

切换 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,流程就是如下两步:

  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

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/

上一篇下一篇

猜你喜欢

热点阅读