欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android源码编译排坑

程序员文章站 2022-05-23 14:01:29
...
最近想学习一下android的源码。虽然网上有很多教程,但是有的是由于环境不同,有的是因为时间比较早了,所以在下载和编译的过程中还是遇到了一些问题。

先说下我的环境:Mac OS 10.13.3。Xcode版本一开始是9.2(后来换成了8.3.3原因后面说)。

配置环境

这一点官方文档写的非常详细,按照步骤操作就可以。
这里分配磁盘空间我是分了100个G。我的mac一共才256G,非常心疼。但是后来发现100G都不一定够。
注意这里面还有有安装Xcode这一步,我就直接从apple store安装了一个最新版本,目前最新的稳定版就是9.2,5个多g。

下载

下载这一步这个官方文档也很详细,直接照做。
仗着有vpn,根本没care替换国内源的问题,结果下载的时候虽然大部分能下载,速度还不错,峰速能达到8M/s。但是细看日志里边一堆404的,也就是说好多都下载失败了。最后乖乖替换回了国内清华的镜像。好在repo sync 不会从头下载,所以只要替换了源重新执行就行。
替换方式:
修改.repo/manifests.git/config中的REPO_URL=https://aosp.tuna.tsinghua.edu.cn/platform/manifest
这里网上很多教程里都让替换这个网址https://gerrit-google.tuna.tsinghua.edu.cn/git-repo,但是这个是不行的,好像已被禁用了。
重新执行repo sync,下载一共花了大概两个多小时我这里一共下了71个G

Android源码编译排坑

其中.repo占了51个G,感觉这样下去编译之后根本不够大,所以果断把.repo文件夹删了,剩下源码20个G。
接下来就是开始编译。

编译

编译看起来很简单,一共就两行命令:
  1. source build/envsetup.sh
  2. make -j4

问题一:

第一个命令顺利执行,第二个就开始报错:

Android源码编译排坑
build/core/combo/mac_version.mk:26: none of the installed SDKs (ac_sdk_versions_installed) match supported versions (10.8 10.9 10.10 10.11), trying 10.8
build/core/combo/mac_version.mk:36: no SDK 10.8 at /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk, trying legacy dir
build/core/combo/mac_version.mk:40: *****************************************************
build/core/combo/mac_version.mk:41: * Can not find SDK 10.8 at /Developer/SDKs/MacOSX10.8.sdk
build/core/combo/mac_version.mk:42: *****************************************************
build/core/combo/mac_version.mk:43: *** Stop..  Stop.
找不到对应的sdk。这个错误很明显,直接找到这个文件build/core/combo/mac_version.mk修改其中的 mac_sdk_versions_installed
加上我mac的版本10.13,解决了这个错误。

问题二

然后是下一个:
Android源码编译排坑
build/core/config.mk:600: *** 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.  Stop.
这个也简单,继续去这里找 build/core/config.mk:600
Android源码编译排坑
显示是因为那个sh脚本报错了,继续找这个脚本
Android源码编译排坑

再结合报错,显然是这个路径下找不到tools.jar。这就回到了常见的环境变量问题,把环境变量配上,让ANDROID_JAVA_HOME = JAVA_HOME。问题解决。

问题三

然后是下一个:
fatal error: too many errors emitted, stopping now [-ferror-limit=]
这就尴尬了,之前还是一个一个的错误,这次竟然说有太多错误,这让我怎么解!
上网搜一下https://*.com/questions/46396933/make-for-android-os-source-code-fails还真有问的,原来是Xcode9的问题。果断换成Xcode8.3.3,apple官网可以下到https://developer.apple.com/download/more/,4.2个G。

问题四

安装好后继续执行。果然还是有错:
Android源码编译排坑
这是老朋友了,进这个文件夹看一下 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
发现8.3.3里的sdk版本是10.12。这时忽然想起俩上面那个问题里答案是说8.3结合sdk 10.11。
先用10.12试下,果然还是报错。
果断决定去下载sdk10.11.
但是这里边这么多版本,我只需要一个。忽然发现自己不会下载一个库里的单个文件夹,平时依赖的Octotree这时也不行了
Android源码编译排坑
继续google一下,https://www.zhihu.com/question/25369412,可能因为文件太多或者太大了,高赞的网页工具都不太好用,最后通过svn checkout的方式解决了。

问题五

继续执行 ,又报错:
Android源码编译排坑
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] Error 1
按照其中一个人说的改的。看起来是装的bison有问题:
1)sudo port install bison
2) sudo find / -name bison
3) sudo rm  /<android_code_path>/prebuilts/misc/darwin-x86/bison/bison
4) sudo ln -s /usr/local/bin/bison /Volumes/android/code/prebuilts/misc/darwin-x86/bison/bison