下载编译android源码笔记

Kevin12 8年前
   <p>这几天下载编译了android源码,下面是一些笔记。</p>    <h3>准备工作</h3>    <p>1.安装JDK和Xcode, 一般android开发人员的mac电脑上这两样应该是必备的吧。我的JDK是1.7版本,没试过1.8是否可行。 安装Xcode是因为需要里面Command Line Tools的。从Yosemite开始,Command Line Tools可以单独安装,无需像之前一样 必须先安装Xcode才能安装Command Line Tools。但是直接装Xcode是最方便的,避免后续打的其他问题。</p>    <p>2.准备50G的硬盘空间,由于我的mac空间不足50G,我也不想浪费大量的空间,所以我直接下载到移动硬盘上,用mac的磁盘工具对 移动硬盘分区,选择格式的时候选择mac OS扩展(区分大小写)。</p>    <p><img src="https://simg.open-open.com/show/8e9f560daefc02ecb63f1ad3759d2d8d.jpg"></p>    <h3>下载源码</h3>    <p>1.安装repo</p>    <p>Repo是一个辅助于Git管理Android版本及分支的工具.在安装repo前,需要新建一个文件夹~/bin,并把这个文件夹放到PATH环境变量里, 然后我们就可以把repo下载到这个文件夹里. 依次输入下面的命令,这里需要使用V*N.</p>    <pre>  <code>      $ mkdir ~/bin      $ PATH=~/bin:$PATH      $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo     $ chmod a+x ~/bin/repo      </code></pre>    <p><code>repo这个工具很小(24KB),但却是下载整个源码不可缺少的工具.</code></p>    <p><code>2.修改repo</code></p>    <p><code>在国内一定要使用国内的镜像下载,不然连了V*N只有不到100KB/S的下载速度,要下载20g要很久。 下面修改repo文件,把REPO_URL = 'https://gerrit.googlesource.com/git-repo'改成 REPO_URL = 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo'</code></p>    <p><code>3.下载</code></p>    <p><code>按照修改完成后,建立一个放置android源码的目录。</code></p>    <pre>  <code><code> $ mkdir androidM $ cd androidM $ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r17 $ repo sync </code></code></pre>    <p><code><code>这时就开始下载源码了,需要的时间比较长。一共20多G,需要多久可以根据自己的下载速度计算,下载完后会自动check out出android项目文件,一共加起来 的空间有40g左右。</code></code></p>    <p><code><code>如果要暂停下载可以按Control+C或者Control+C,然后输入repo sync继续下载。</code></code></p>    <h3><code><code>编译源码</code></code></h3>    <p><code><code>编译生成idegen.jar</code></code></p>    <p><code><code>进入Android 源码根目录,执行</code></code></p>    <pre>  <code><code><code> $ . build/envsetup.sh $ mmm development/tools/idegen/ </code></code></code></pre>    <p><code><code><code>这行命令的意思是编译idegen这个项目,生成idegen.jar文件.生成成功后,会显示这个jar包的位置,并显示make completed successfully (43 seconds)。</code></code></code></p>    <p><code><code><code>下面简单说一下m命令:</code></code></code></p>    <p><code><code><code>m、mm、mmm命令可以让你只编译单独模块,而不用费大量的时间比编译整个Android系统。要使用m、mm、mmm命令,需要在源码目录下执行如下命令。 否则会提示命令找不到。</code></code></code></p>    <p><code><code><code>这3个命令的区别在于:</code></code></code></p>    <p><code><code><code>1.单独编译某模块,需要在mmm后面指定模块路径。 2.可以跳转到你想编译模块相对应目录下执行“mm”命令。 3.用 m 编译全部的模块。</code></code></code></p>    <p><code><code><code>所以上面的mmm development/tools/idegen/也可以写成下面的样子</code></code></code></p>    <pre>  <code><code><code><code> $ cd development/tools/idegen $ mm </code></code></code></code></pre>    <p><code><code><code><code>为什么要先编译这个idegen文件夹呢?要将Android系统源代码工程导入到Eclipse或者IntelliJ IDEA,关键是要有相应的工程配置文件。idegen就是用来生成针对Eclipse和IntelliJ IDEA的Android系统源代码工程配置文件的一个工具。</code></code></code></code></p>    <p><code><code><code><code>如果遇到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就行了。</code></code></code></code></p>    <p><code><code><code><code>我在执行这步过程中出现了另外一个错误:</code></code></code></code></p>    <pre>  <code><code><code><code><code> 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 </code></code></code></code></code></pre>    <p><code><code><code><code><code>这个问题纠结了很久,google也没有找到答案,我猜想可能是jdk版本的原因,最终还是无法生成idegen.jar,只能找别的办法,如果只是为了阅读源码,而不需要自己刷系统的话,也可以 不编译,直接拷贝一个过来,可以参考 <a href="http://www.open-open.com/lib/view/open1460769614134.html" rel="nofollow,noindex">如何使用Android Studio开发/调试Android源码</a> 在这片文章末尾有idegen.jar的下载地址,然后粘贴到out/host/darwin-x86/目录下。 </code></code></code></code></code></p>    <p><code><code><code><code><code>生成IDE配置文件</code></code></code></code></code></p>    <p><code><code><code><code><code>在AOSP源码根目录执行下面的命令:</code></code></code></code></code></p>    <pre>  <code><code><code><code><code><code> development/tools/idegen/idegen.sh </code></code></code></code></code></code></pre>    <p><code><code><code><code><code><code>运行无错误的话,会在AOSP源代码根目录生成下列文件</code></code></code></code></code></code></p>    <p><code><code><code><code><code><code>// 用于IntelliJ IDEA的项目配置文件 android.ipr android.iml</code></code></code></code></code></code></p>    <p><code><code><code><code><code><code>// 用于Eclipse的项目配置文件 .classpath</code></code></code></code></code></code></p>    <p><code><code><code><code><code><code>然后在android studio中打开新的项目,选择源码根目录就可以了。</code></code></code></code></code></code></p>    <p>来自: <a href="/misc/goto?guid=4959670879585524432" rel="nofollow">http://souly.cn/技术博文/2016/04/15/下载编译android源码笔记/</a></p>