Mac 下 Android 源码编译从零开始:Day Two--编译
编译准备工作
官网链接:source.android.google.cn/source/buil…
编译命令的基本顺序如下:
下载专用二进制文件,即驱动文件
下载链接: developers.google.com/android/dri…
坑点:需要下载对应细分版本的驱动,对照如下图所示:
驱动官网:developers.google.com/android/dri…
选择对应的驱动下载,如图:
解压专有二进制文件
接下来将两个压缩包解压到源码根目录 WORKING_DIRECTORY
,并分别运行两个解压后的.sh
文件,cd 到 WORKING_DIRECTORY
目录,即源码根目录,分别在终端执行以下命令:
sh extract-huawei-angler.sh
复制代码
sh extract-qcom-angler.sh
复制代码
将驱动文件提取出来,放到新生成的 /vendor/
目录下。
每组二进制文件都是压缩包中的一个自解压脚本。解压每个压缩包,从源代码树的根目录运行附带的自解压脚本,然后确认您同意附带的许可协议的条款。二进制文件及其对应的 Makefile 将会安装在源代码树的 vendor/ 层次结构中。
坑点:需要一直按enter,知道第8点的第e项,慢慢按,直到End,再按一次Enter就会提示你输入 “I ACCEPT” 来同意使用协议,之后才会提取出驱动文件到 /vendor/
目录。
结束时会提示:
······
x vendor/qcom/angler/proprietary/iperf3
x vendor/qcom/angler/device-partial.mk
Files extracted successfully.
复制代码
如下图所示:
清理
source.android.com/setup/build…
为了确保新安装的二进制文件在解压后正确生效,请使用以下命令删除此前所有编译操作的已有输出:
make clobber
复制代码
坑点:由于Mac的SDK默认只有14的版本,编译需要的是14以下的SDK,因此执行 make clobber
时会报如下错误:
internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12"]
复制代码
如图所示:
make clobber
清理成功如下图所示:
Final Step: 执行编译
设置环境 使用 envsetup.sh 脚本初始化环境。请注意,将 source 替换成 .(一个点)可以省去一些字符,这种简写形式在文档中更为常用。
source build/envsetup.sh
复制代码
或
. build/envsetup.sh
复制代码
选择目标
使用 lunch 选择要编译的目标。确切的配置可作为参数进行传递。例如以下命令:
lunch aosp_arm-eng
复制代码
该命令表示针对模拟器进行完整编译,并且所有调试功能均处于启用状态。
如果您没有提供任何参数就运行命令,lunch 将提示您从菜单中选择一个目标。
所有编译目标都采用 BUILD-BUILDTYPE 形式,其中 BUILD 是表示特定功能组合的代号。
BUILDTYPE 是以下类型之一:
要详细了解如何针对实际硬件进行编译以及如何在实际硬件上运行版本,请参阅运行版本。
编译代码
请注意,本部分只是一个摘要,用于确保设置已完成。如需关于编译 Android 的详细说明,请参阅运行编译系统。
您可以使用 make 编译任何代码。GNU Make 可以借助 -jN 参数处理并行任务,通常使用的任务数 N 介于编译时所用计算机上硬件线程数的 1-2 倍之间。例如,在一台双核 E5520 计算机(2 个 CPU,每个 CPU 4 个内核,每个内核 2 个线程)上,要实现最快的编译速度,可以使用介于 make -j16 到 make -j32 之间的命令。
make -j4
复制代码
坑点:万事开头难,事实上运行了几次都是同一个结果:failed
谷歌查到解决方案:可能是heap size 不足,尝试修改 heap size 大小。 blog.csdn.net/qq_27061049…
JACK_SERVER_VM_ARGUMENTS="${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8
-XX:+TieredCompilation -mx4096M}"
复制代码
运行还是同样的报错,说明不是 heap size 不足的问题。
终极解决方案,感谢大神:
www.jianshu.com/p/35f840dd7…
内牛满面,很激动,终于编译通过了。事实证明,官方文档有很多坑都没指出来,如果仅仅跟随官方文档,只能是跟我这样一路含泪趟坑过来。本教程已经把该遇到的坑都埋了,请尽情享用,有遗漏之处,请不吝指出。
输入以下命令:
mm
复制代码
成功之后提示如下log:
make completed successfully (01:31 (mm:ss))
复制代码
如截图所示:
接着 Replace prebuilt bison binary with patched binary
cp /Volumes/android/WORKING_DIRECTORY/out/host/darwin-x86/bin/bison /Volumes/android/WORKING_DIRECTORY/prebuilts/misc/darwin-x86/bison/
复制代码
Build
make -j4
复制代码
小坑点:到执行 make -j4
命令进行最终编译前,记得退回到源码根目录,此处为 WORKING_DIRECTORY
正常编译中的截图如下所示:
最终编译成功之后的截图如下所示:
待补。
实际上,执行到51%又失败了,这次的原因折腾了N久才定位到:jack-server 无法 connect to 127.0.0.1 port 8077 failed: Connection refused
由于翻墙的需要,在前面需要对Mac设置全局代理,将蓝灯设置入口 参考链接: