在过去的几年里,我花了很多时间研究 android 源代码,所以让我来解释一下根目录中的不同文件夹。这些大致是(取决于android版本):
仿生
- 专门为 Android 使用和开发的标准 c 库。
可引导
- 包含引导加载程序(设备制造商通常提供)和在手机启动进入恢复模式时执行的恢复应用程序。
建造
- Android 有非常独特的模块化构建系统,它本身是建立在普通的 make-file 之上的。例如,
build/target/products您会发现启动时看到的所有通用构建目标lunch。
cts
- 兼容性测试套件。当设备制造商想要让他们的设备获得认证(从而获得 Google Play 和其他专有应用程序)时,他们需要通过 CTS。CTS 的源代码包含在此目录中。
达尔维克
- dalvik 虚拟机。Android 将 java 用于框架的大部分以及所有应用程序。因为每个应用程序在自己的 uid 下作为自己的进程运行,在自己的虚拟机中,虚拟机必须占用相当小的内存,因此 Android 选择使用名为 dalvik 的 Java 自定义虚拟机。dalvik的源码放在这里。
发展
- 我还没有真正使用过这个存储库,但似乎支持开发 android 应用程序的东西都放在这里了。
设备
- 每个设备供应商都将定义其特定设备的所有内容放在这里。例如,您可以
devices/{yourname}/products/{yourdevice}.mk准确定义应该为您的设备构建哪些应用程序(以及其他一些东西)。这会在午餐菜单中添加一个名为{yourdevice}您可以构建的条目。
文档
- 据我了解,这实际上是
http://source.android.com.
外部的
- 几乎所有由 Android 引入并构成基本 Android Linux 操作系统的第三方项目都位于此处。它们维护在自己的 git 存储库中,这使得从上游拉取新版本变得容易。您会在这里看到
bzip2, dbus, ping,tcpdump和许多其他项目。
构架
- 这是Android框架的来源。您在为 Android 构建应用程序时使用的所有内容。我认为它大约是 50% 的 Java 代码和 50% 的 C++(有时是 C),它们使用jni绑定在一起。例如,当您在应用程序中播放一些音频时,您可能正在访问
AudioManager. 源代码AudioManager以及所有支持的内部 Android 源代码AudioManager都放在frameworks/base/media. 您会发现大部分 Android SDK 在frameworks/base/.
硬件
- Android 与一组库对话,然后控制硬件(例如振动器、灯光、接近传感器、gps、音频等)。这些库统称为 HAL(硬件抽象层)。该文件夹中包含一些默认实现
hardware,但是制造商实现了自己的库并将它们放置在hardware/{manufcaturename}(或device/{manufacture})中。
库核心
ndk
- 本机开发工具包允许应用程序开发人员将他们的部分(或全部)应用程序编码为本机代码(通常在 c 和 c++ 中)。基本上,它是一个交叉编译到 Android 运行的不同 cpu 架构的工具链。
出去
- 所有Android 构建工件都放置在此处。因此,删除
out文件夹将完全清除源。out分为不同的文件夹,主要的文件夹是为主机(例如adb)和目标设备(大多数android系统)编译的东西被分开的地方host。target下面还有进一步的细分,一般来说out文件夹的排序很好,所以你应该自己探索一下。
包
- 这些包含与 Android 一起构建的所有默认应用程序、提供程序、输入方法等。手机应用、通讯录、日历、计算器、默认软键盘等都放在这里。它们不是 3rd 方应用程序,它们是内部应用程序,其中许多是针对非公共 android api 构建的。所以这里的大多数应用程序不能针对公共 Android SDK 构建(例如在 eclipse 中),但必须作为完整 Android 构建过程的一部分进行构建。
预建
- 与 Android 一起作为二进制文件分发的东西。此处的主要内容是为 ARM(现在还有 x86)构建 Android 的交叉编译器。它们是预先构建的,因此您不必自己实际构建交叉编译器。(如果您除了 Android 还必须编译交叉编译器,这可能会非常耗时。)
sdk
- 属于 Android SDK 的所有工具,例如 ddms、模拟器、sdkmanager 等。
系统
- 在安卓设备上运行的核心系统进程。这些是本机(c 或 c++)程序。Mediaservice 就是这种系统服务的一个例子。
这完全来自我使用 Android 源代码的经验,我没有任何(其他)参考资料。我希望这可以帮助您了解文件夹结构。