热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

下载编译android源码笔记

这几天下载编译了android源码,下面是一些笔记。




这几天下载编译了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扩展(区分大小写)。

下载源码

1.安装repo

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),但却是下载整个源码不可缺少的工具.

2.修改repo

在国内一定要使用国内的镜像下载,不然连了VPN只有不到100KB/S的下载速度,要下载20g要很久。 下面修改repo文件,把REPO_URL = 'https://gerrit.googlesource.com/git-repo'改成 REPO_URL = 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo'

3.下载

按照修改完成后,建立一个放置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继续下载。

编译源码

编译生成idegen.jar

进入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 out/host/common/obj/JAVA_LIBRARIES/guavalib_intermediates/javalib.jar', needed by 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/目录下。

生成IDE配置文件

在AOSP源码根目录执行下面的命令:

development/tools/idegen/idegen.sh

运行无错误的话,会在AOSP源代码根目录生成下列文件

// 用于IntelliJ IDEA的项目配置文件 android.ipr android.iml

// 用于Eclipse的项目配置文件 .classpath

然后在android studio中打开新的项目,选择源码根目录就可以了。

来自: http://souly.cn/技术博文/2016/04/15/下载编译android源码笔记/





推荐阅读
  • 动态壁纸 LiveWallPaper:让您的桌面栩栩如生(第二篇)
    在本文中,我们将继续探讨如何开发动态壁纸 LiveWallPaper,使您的桌面更加生动有趣。作为 2010 年 Google 暑期大学生博客分享大赛 Android 篇的一部分,我们将详细介绍 Ed Burnette 的《Hello, Android》第三版中的相关内容,并分享一些实用的开发技巧和经验。通过本篇文章,您将了解到如何利用 Android SDK 创建引人入胜的动态壁纸,提升用户体验。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 卓盟科技:动态资源加载技术的兼容性优化与升级 | Android 开发者案例分享
    随着游戏内容日益复杂,资源加载过程已不仅仅是简单的进度显示,而是连接玩家与开发者的桥梁。玩家对快速加载的需求越来越高,这意味着开发者需要不断优化和提升动态资源加载技术的兼容性和性能。卓盟科技通过一系列的技术创新,不仅提高了加载速度,还确保了不同设备和系统的兼容性,为用户提供更加流畅的游戏体验。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • Squaretest:自动生成功能测试代码的高效插件
    本文将介绍一款名为Squaretest的高效插件,该工具能够自动生成功能测试代码。使用这款插件的主要原因是公司近期加强了代码质量的管控,对各项目进行了严格的单元测试评估。Squaretest不仅提高了测试代码的生成效率,还显著提升了代码的质量和可靠性。 ... [详细]
  • 求助:在CentOS 5.8系统上安装PECL扩展遇到问题
    在 CentOS 5.8 系统上尝试安装 APC 扩展时遇到了问题,具体表现为 PECL 工具无法正常工作。为了确保顺利安装,需要解决 PECL 的相关依赖和配置问题。建议检查 PHP 和 PECL 的版本兼容性,并确保所有必要的库和开发工具已正确安装。此外,可以尝试手动下载 APC 扩展的源代码并进行编译安装,以绕过 PECL 工具的限制。 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 导读:本文来自SwiftGG翻译组,作者@walkingway基于苹果Swift官方博客中TedKremenek所撰写的“Swift2.2Released!”文章进行了关于Swift2. ... [详细]
  • iOS Auto Layout Demystify
    BookDescripterAutoLayouttransformsthewayyoucreateiOSuserinterfaces.Asflexibleasitispowerfu ... [详细]
author-avatar
手机用户2602933123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有