最近想学习一下android的源码。虽然网上有很多教程,但是有的是由于环境不同,有的是因为时间比较早了,所以在下载和编译的过程中还是遇到了一些问题。
先说下我的环境:Mac OS 10.13.3。Xcode版本一开始是9.2(后来换成了8.3.3原因后面说)。
配置环境
这一点 官方文档写的非常详细,按照步骤操作就可以。
这里分配磁盘空间我是分了100个G。我的mac一共才256G,非常心疼。但是后来发现100G都不一定够。
注意这里面还有有安装Xcode这一步,我就直接从apple store安装了一个最新版本,目前最新的稳定版就是9.2,5个多g。
下载
下载这一步这个 官方文档也很详细,直接照做。
仗着有,根本没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
其中.repo占了51个G,感觉这样下去编译之后根本不够大,所以果断把.repo文件夹删了,剩下源码20个G。
接下来就是开始编译。
编译
编译看起来很简单,一共就两行命令:
- source build/envsetup.sh
- make -j4
问题一:
第一个命令顺利执行,第二个就开始报错:
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,解决了这个错误。
问题二
然后是下一个:
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
显示是因为那个sh脚本报错了,继续找这个脚本
再结合报错,显然是这个路径下找不到tools.jar。这就回到了常见的环境变量问题,把环境变量配上,让ANDROID_JAVA_HOME = JAVA_HOME。问题解决。
问题三
然后是下一个:
fatal error: too many errors emitted, stopping now [-ferror-limit=]
这就尴尬了,之前还是一个一个的错误,这次竟然说有太多错误,这让我怎么解!
上网搜一下 https://stackoverflow.com/questions/46396933/make-for-android-os-source-code-fails还真有问的,原来是Xcode9的问题。果断换成Xcode8.3.3,apple官网可以下到 https://developer.apple.com/download/more/,4.2个G。
问题四
安装好后继续执行。果然还是有错:
这是老朋友了,进这个文件夹看一下
/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.
这里有 https://github.com/phracker/MacOSX-SDKs
但是这里边这么多版本,我只需要一个。忽然发现自己不会下载一个库里的单个文件夹,平时依赖的Octotree这时也不行了
继续google一下, https://www.zhihu.com/question/25369412,可能因为文件太多或者太大了,高赞的网页工具都不太好用,最后通过svn checkout的方式解决了。
问题五
继续执行 ,又报错:
ninja: build stopped: subcommand failed.
make: *** [ninja_wrapper] Error 1
看不懂,google, https://groups.google.com/forum/#!topic/android-building/D1-c5lZ9Oco
按照其中一个人说的改的。看起来是装的bison有问题:
1)sudo port install bison
2) sudo find / -name bison
3) sudo rm //prebuilts/misc/darwin-x86/bison/bison
4) sudo ln -s /usr/local/bin/bison /Volumes/android/code/prebuilts/misc/darwin-x86/bison/bison