阅读更多

1顶
0踩

移动开发

转载新闻 Android 6.0 源代码编译实践

2015-11-24 10:29 by 副主编 mengyidan1988 评论(2) 有10294人浏览
前阵子去上海参加 Android 开发面试,被问及了 Android 的基本原理、常用组件背后的实现机制、设计模式等问题,我都回答地不好。面试时,老司机们常常问我对知识点“背后的实现代码有没有看?”。于是我就想着,回来要把 Android 代码下下来,有针对性地学习。

本文记述了我从下载源代码到编译成功、导入 Android Studio 的过程。我所使用的系统为 Mac OSX, Android 代码的分支是 android-6.0.0_r26。

代码的下载
Android 的代码我是、从AOSP - 清华大学TUNA 镜像源这个国内的镜像下载。下载代码的具体方法在官方文档 Downloading the SourceAOSP - 清华大学TUNA 镜像源 中都有记述,我就不再赘述。我选择下载的分支是 android-6.0.0_r26。

由于代码比较大,我使用我的下载机( Linux 系统)进行下载,待下载完成后导入 Mac OSX 进行后续操作。如何实现导入呢?

将代码文件夹拷贝到 ntfs 分区的移动硬盘失败。这是因为 ntfs 分区部分大小写,而代码目录中存在字母相同、大小写不同的文件,因此导入失败。(这一问题在后面 Mac OSX 中还会遇到。)

随后我对代码文件夹进行了压缩。压缩之后就能够随意拷贝了。在这里我推荐一种拷贝方式,就是直接用网线将两台机器相连对拷代码压缩包。这样速度非常快,也省得移动硬盘中转浪费时间。

Mac OSX 下的准备
压缩包拷过来之后,就该要解压、配置了。但是前文所说的大小写问题在这里又出现了。若将代码直接解压在 Mac 的文件系统中强硬编译将会报错。

创建映像文件
解决的方法是按照官方文档 Establishing a Build Environment 中的说明,建立一个区分大小写的映像文件,挂载后将代码解压进去,具体步骤不再赘述。

有一点需要强调的是,文档中创建的映像文件大小为 40GB,这在实际中不够,我编译完代码后就已经占用 46GB 了,因此我分配了 60GB 的大小。

JDK 版本
JDK 必须为 1.7,没装或只装了 1.8 的要去下一个 1.7 再装上。

mac_sdk_versions_supported 问题
我使用的系统版本为 EI Capitan,新于代码的配置文件,因此要修改配置文件。它位于 build/core/combo/mac_version.mk,其中有一个 mac_sdk_versions_supported 变量,修改为我目前的版本 10.11。

源代码的编译
参考官方指南 Building the System 先用 build/envsetup.sh 设置环境变量,再调用 lunch 命令选择构建目标。之后即执行 make -jN 进行编译。我用的参数为 -j4 编译了大约两个小时:
Creating filesystem with parameters:
    Size: 1610612736
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8192
    Inode size: 256
    Journal blocks: 6144
    Label: system
    Blocks: 393216
    Block groups: 12
    Reserved block group size: 95
Created filesystem with 1452/98304 inodes and 101032/393216 blocks
Install system fs image: out/target/product/generic/system.img
out/target/product/generic/system.img+ maxsize=1644333504 blocksize=2112 total=1610612736 reserve=16610880
 
e[0;32m#### make completed successfully (01:56:47 (hh:mm:ss)) ####e[00m

将代码导入 Android Studio
代码目录中含有一个名为 idegen 的模块,它能够为 Android 代码生成 Android Studio 下的工程文件。

具体编译、使用方法可以参考这篇 使用Android Studio导入源码。大体过程是, idegen 是一个模块,要先使用 mmm 编译一下,之后在 idegen 的文件目录下有一个脚本,在代码根目录下执行这个脚本,它就会遍历代码目录生成工程文件,很方便。另外,这篇博客中还讲解了如何裁剪 android.iml,排除掉不需要加载到 Android Studio 到代码,有助于加快载入速度。

完成后,用 Android Studio 就像打开普通的工程一样,打开这个工程,经历一番加载与 indexing, Android 的代码就导入进来了。最后附上一张截图:



参考文献
在实践过程中,我还参考了一下文章。感谢这些兄弟分享的经验。


本文转自:JudyMaxiee's Blog
  • 大小: 155.2 KB
1
0
评论 共 2 条 请登录后发表评论
2 楼 d63hbz 2016-03-21 14:51
刚在VirtualBox里面下载源码,把磁盘写满了;正在新增加的虚拟磁盘里转移文件。
特意搜索源码大小来着,新磁盘分配64G,只保存源码了。

祝我好运,顺利编译!
1 楼 tao9435 2015-11-27 08:55
mark一下,以后可能会用着

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics