这几天下载编译了android源码,下面是一些笔记。
1.安装JDK和Xcode, 一般android开发人员的mac电脑上这两样应该是必备的吧。我的JDK是1.7版本,没试过1.8是否可行。 安装Xcode是因为需要里面Command Line Tools的。从Yosemite开始,Command Line Tools可以单独安装,无需像之前一样 必须先安装Xcode才能安装Command Line Tools。但是直接装Xcode是最方便的,避免后续打的其他问题。
2.准备50G的硬盘空间,由于我的mac空间不足50G,我也不想浪费大量的空间,所以我直接下载到移动硬盘上,用mac的磁盘工具对 移动硬盘分区,选择格式的时候选择mac OS扩展(区分大小写)。
Repo是一个辅助于Git管理Android版本及分支的工具.在安装repo前,需要新建一个文件夹~/bin,并把这个文件夹放到PATH环境变量里, 然后我们就可以把repo下载到这个文件夹里. 依次输入下面的命令,这里需要使用VPN.
$ mkdir ~/bin $ PATH=~/bin:$PATH $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo
repo这个工具很小(24KB),但却是下载整个源码不可缺少的工具.
在国内一定要使用国内的镜像下载,不然连了VPN只有不到100KB/S的下载速度,要下载20g要很久。 下面修改repo文件,把REPO_URL = 'https://gerrit.googlesource.com/git-repo'改成 REPO_URL = 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo'
按照修改完成后,建立一个放置android源码的目录。
$ mkdir androidM $ cd androidM $ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r17 $ repo sync
这时就开始下载源码了,需要的时间比较长。一共20多G,需要多久可以根据自己的下载速度计算,下载完后会自动check out出android项目文件,一共加起来 的空间有40g左右。
如果要暂停下载可以按Control+C或者Control+C,然后输入repo sync继续下载。
进入Android 源码根目录,执行
$ . build/envsetup.sh
$ mmm development/tools/idegen/
这行命令的意思是编译idegen这个项目,生成idegen.jar文件.生成成功后,会显示这个jar包的位置,并显示make completed successfully (43 seconds)。
下面简单说一下m命令:
m、mm、mmm命令可以让你只编译单独模块,而不用费大量的时间比编译整个Android系统。要使用m、mm、mmm命令,需要在源码目录下执行如下命令。 否则会提示命令找不到。
这3个命令的区别在于:
1.单独编译某模块,需要在mmm后面指定模块路径。 2.可以跳转到你想编译模块相对应目录下执行“mm”命令。 3.用 m 编译全部的模块。
所以上面的mmm development/tools/idegen/也可以写成下面的样子
$ cd development/tools/idegen $ mm
为什么要先编译这个idegen文件夹呢?要将Android系统源代码工程导入到Eclipse或者IntelliJ IDEA,关键是要有相应的工程配置文件。idegen就是用来生成针对Eclipse和IntelliJ IDEA的Android系统源代码工程配置文件的一个工具。
如果遇到Can not find SDK 10.6 at /Developer/SDKs/MacOSX10.6.sdk的错误,具体错误的原因是,在编译脚本中会检查当前的Xcode sdk 的版本是否是兼容的,这可能是因为你mac上的xcode版本比较新,在Android源代码中还没有添加上.理论上说应该用Android代码对应的Xcode SDK 版本来编译,不然可能会有兼容性的问题。但是我自己实测最新的xcode版本是可以正常编译Android源代码的,具体的方法如下所示: 你可以到Xcode的sdk路径下(/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs)查看当前 系统的SDK版本是多少。比如我的SDK版本是MacOSX10.11.sdk,接下来编辑build/core/combo/mac_version.mk中的mac_sdk_versions_supported 所在的行添加10.11就行了。
我在执行这步过程中出现了另外一个错误:
make: *** No rule to make target </span><span class="n">out</span><span class="o">/</span><span class="n">host</span><span class="o">/</span><span class="n">common</span><span class="o">/</span><span class="n">obj</span><span class="o">/</span><span class="n">JAVA_LIBRARIES</span><span class="o">/</span><span class="n">guavalib_intermediates</span><span class="o">/</span><span class="n">javalib</span><span class="p">.</span><span class="n">jar</span><span class="err">'</span><span class="p">,</span> <span class="n">needed</span> <span class="n">by</span> <span class="err">
out/host/common/obj/JAVA_LIBRARIES/idegen_intermediates/javalib.jar'. Stop. /e[0;31m#### make failed to build some targets (5 seconds) ####/e[00m
这个问题纠结了很久,google也没有找到答案,我猜想可能是jdk版本的原因,最终还是无法生成idegen.jar,只能找别的办法,如果只是为了阅读源码,而不需要自己刷系统的话,也可以 不编译,直接拷贝一个过来,可以参考 如何使用Android Studio开发/调试Android源码 在这片文章末尾有idegen.jar的下载地址,然后粘贴到out/host/darwin-x86/目录下。
在AOSP源码根目录执行下面的命令:
development/tools/idegen/idegen.sh
运行无错误的话,会在AOSP源代码根目录生成下列文件
// 用于IntelliJ IDEA的项目配置文件 android.ipr android.iml
// 用于Eclipse的项目配置文件 .classpath
然后在android studio中打开新的项目,选择源码根目录就可以了。