Mac编译android源码中遇到的坑

3,343 阅读2分钟

按照官网配置完成之后,仍然遇到了若干坑,挨个爬过之后做一下总结吧!本文编译的是android7.1哈!

  1. Xcode 9.2编译无法通过,google一番之后得知8.X的版本是支持的,所以下载android8.3.1之后又报了下面的错误,但python的版本没有毛病,就是系统自带的2.7哈,所以怀疑是下载的xcode有问题,重新下载xcode8.1之后可以正常编译。

xcode
2. Can not find SDK 10.8 at /Developer/SDKs/MacOSX10.8.sdk 在build/core/combo/mac_version.mk中指定的MacOSX版本在本机并不存在,查看/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/中已有的MacOSX版本,将其版本填入mac_version.mk即可。

在MacOS10.13.1中,仅有10.13版本,但是并不支持android编译。所以可靠的解决方案是在MacOSX.SDK下载mac_version.mk中指定的版本到Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs。

  1. FAILED: /bin/bash -c "prebuilts/misc/darwin-x86/bison/bison -d -v --defines=out/host/darwin-x86/obj/EXECUTABLES/checkpolicy_intermediates/policy_parse.h -o out/host/darwin-x86/obj/EXECUTABLES/checkpolicy_intermediates/policy_parse.c external/selinux/checkpolicy/policy_parse.y" [ 85% 2068/2406] target C: libcrypto_static <= external/boringssl/src/crypto/ec/p256-64.c ninja: build stopped: subcommand failed. make: *** [ninja_wrapper] Error 1

在Mac high Sierra中,编译Android源码时会出现该问题,解决方案如下:

//解决方案:https://groups.google.com/forum/#!topic/android-building/D1-c5lZ9Oco

I was able to fix this issue with the following steps:

Patch bison fix for High Sierra and build bison:

cd /Volumes/AOSP/external/bison

git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160

mm

Replace prebuilt bison binary with patched binary

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

但使用mm命令编译时并不会编译依赖模块,所以可能会包某些文件找不到的错误,使用mma编译即可。

  1. external/iptables/extensions/../include/linux/netfilter_ipv4/ipt_ECN.h:13:10: fatal error: 'linux/netfilter/xt_DSCP.h' file not found #include <linux/netfilter/xt_DSCP.h> ^ 1 error generated. [ 61% 28288/45652] target StaticLib: l...ARIES/libpcap_intermediates/libpcap.a) ninja: build stopped: subcommand failed. make: *** [ninja_wrapper] Error 1

解决方案: 将/Volumes/android/android_source/external/iptables/include/linux/netfilter_ipv4/ipt_ECN.h中的

#include <linux/netfilter/xt_DSCP.h>

改成

#include <linux/netfilter/xt_dscp.h>
  1. 在编译完成之后,发现在/out/host/darwin-x86/framework/下并没有idegen.jar,因此无法使用development/tools/idegen/idegen.sh生成android.ipr,以便在AS中阅读源码。

解决方案:

//generate idegen.jar
cd development/tools/idegen
mm
//run idegen.sh
development/tools/idegen/idegen.sh