如何理解Android根树的目录结构?

我已经下载了android源代码。 而且我想对源代码进行一些修改来embedded一些目前不存在的function。 但是这里的问题是我无法理解源代码是如何组织的,可以在哪里find哪种文件。 所以如果有人能帮助我明白这将是非常有帮助的。

以下是您下载Android源代码时的简短版本。 我会留下一些小目录,深入挖掘一些重要的目录。 基本上你会得到(基于目前的冰淇淋三明治释放),按字母顺序:

  • 仿生 – Android的C运行时。 请注意,Android不像大多数Linux发行版那样使用glibc。 相反,C库被称为仿生,主要基于BSD派生的来源。 在这个文件夹中,您可以findc库,math和其他核心运行时库的源代码。
  • 可启动 – 启动和启动相关的代码。 其中一些是遗留的,fastboot协议信息可能是有趣的,因为它是由一些设备,如Nexus的引导加载程序实现的。
  • 构build – 包括所有核心构build文件模板的构build系统实现。 这里的一个重要的文件是envsetup.sh脚本,它将在处理平台源代码时帮助你很多。 在shell中运行这个脚本将使命令能够设置环境variables,在源代码文件中构build特定的模块和grep。
  • Cts – 相容性testing。 testing套件确保构build符合Android规范。
  • Dalvik – Dalvik虚拟机实现的源代码
  • 开发 – 与开发相关的项目,例如sdk和ndk工具的源代码。 通常情况下,当您使用目标平台进行操作时,您不会碰到任何文件夹。
  • 设备 – 不同设备的产品特定代码。 这是寻找不同Nexus设备的硬件模块,构buildconfiguration等等的地方。
  • 外部 – 包含所有外部开源项目(如SQLite,Freetype和Webkit)的源代码。
  • 框架 – 这个文件夹是Android必不可less的,因为它包含框架的来源。 在这里你可以find关键服务的实现,比如带有包pipe理器和活动pipe理器的系统服务器。 Java应用程序API和本地库之间的很多映射也在这里完成。
  • 硬件 – 硬件相关的源代码,如Android硬件抽象层的规范和实现。 该文件夹还包含参考无线接口层(与调制解调器端通信)实现。
  • libcore – Apache Harmony。
  • libnativehelper – 与JNI一起使用的Helper函数。
  • (内核) – 不是默认源代码下载的一部分,但您可以通过手动下载或通过将存储库添加到回购工具来访问此代码。 包含Android版本的Linux内核的源代码。
  • 输出 – 在运行make之后,编译输出将被放置在这里。 文件夹结构是out / target / product /。 在模拟器的默认构build中,输出将被放置在out / target / product / generic中。 在这里你可以find模拟器用来启动的图像(或者如果你正在构build一个硬件目标,将被下载并闪存到一个设备上)。
  • 包 – 包含默认应用程序的源代码,如联系人,日历,浏览器。
  • 预构build – 包含为了方便而以二进制forms分发的文件。 例子包括用于不同开发机器的交叉编译工具链。
  • 系统 – 核心Android系统的源代码文件。 这是在启用Dalvik VM和任何基于Java的服务之前启动的最小Linux系统。 这包括init进程的源代码和提供平台dynamicconfiguration的默认init.rc脚本
  • 工具 – 各种IDE工具。

除了上面的内容之外,还有隐藏的.repo目录,其中包含repo实用程序的源代码。 它还包含清单,指定您要跟踪此Android源项目的git存储库。 如果你有自己的补充,你可以通过在这里添加一个本地清单来自动追踪它们。

对于平台框架的修改,源代码树的设备/示例文件夹中提供了一些说明。 这将向您展示如何将API添加到Android,而无需修改核心框架。