Repository 了解Android源代码库的基本命名方案

Repository 了解Android源代码库的基本命名方案,repository,android-source,repository-design,Repository,Android Source,Repository Design,我刚刚下载了完整的4.0.1r1Android源代码库。有人能帮我理解存储库的基本命名方案吗 例如,在存储库的根目录中,“frameworks”目录到底是什么?这与“packages”目录有何不同?在过去几年中,我花了很多时间研究android源代码,所以让我来解释一下根目录中的不同文件夹。大致如下(取决于android版本): 仿生 专门为Android使用和开发的标准c库 可引导 包含引导加载程序(设备制造商通常提供)和恢复应用程序,当手机引导至恢复模式时,将执行该应用程序 构建

我刚刚下载了完整的4.0.1r1Android源代码库。有人能帮我理解存储库的基本命名方案吗


例如,在存储库的根目录中,“frameworks”目录到底是什么?这与“packages”目录有何不同?

在过去几年中,我花了很多时间研究android源代码,所以让我来解释一下根目录中的不同文件夹。大致如下(取决于android版本):

  • 仿生

    • 专门为Android使用和开发的标准c库
  • 可引导

    • 包含引导加载程序(设备制造商通常提供)和恢复应用程序,当手机引导至恢复模式时,将执行该应用程序
  • 构建

    • Android有非常独特的模块化构建系统,它本身构建在普通make文件之上。例如,在
      build/target/products
      中,您将找到启动
      sunch
      时看到的所有通用构建目标
  • cts

    • 。当设备制造商想要获得设备认证(从而获得Google Play和其他专有应用程序)时,他们需要通过CTS。CTS的源包含在此目录中
  • dalvik

    • 。Android将java用于框架的更好部分以及所有应用程序。因为每个应用程序都在自己的uid下作为自己的进程运行,在自己的虚拟机中,虚拟机必须具有相当小的内存占用,所以Android选择使用一个名为dalvik的定制Java虚拟机。达尔维克的源头就在这里
  • 发展

    • 我还没有真正使用过这个存储库,但它似乎支持开发android应用程序的东西放在这里
  • 设备

    • 每个设备供应商都将定义其特定设备的所有内容放在这里。例如,您可以提供一个
      devices/{yourname}/products/{yourdevice}.mk
      来精确定义应该为您的设备构建哪些应用程序(以及其他一些东西)。这会在午餐菜单中添加一个名为
      {yourdevice}
      的条目,您可以构建该条目
  • 文档

    • 据我所知,这实际上是
      http://source.android.com
  • 外部

    • 几乎所有安卓引入的、构成安卓Linux操作系统基础的第三方项目都位于这里。它们被维护在自己的git存储库中,这使得从上游获取新版本变得容易。您可以在这里看到类似于
      bzip2
      dbus
      ping
      tcpdump
      ,以及许多其他项目
  • 框架

    • 这是Android框架的来源。为Android构建应用程序时使用的所有东西。我认为它是在大约50% java代码和50% C++(有时C)的地方,它是用绑定在一起的。例如,当您在应用程序中播放某些音频时,您可能正在访问
      AudioManager
      AudioManager
      的源代码以及所有支持
      AudioManager
      的内部Android源代码都放在
      frameworks/base/media
      下。您将在
      frameworks/base/
      下找到大部分Android SDK的实现
  • 硬件

    • Android与一组库对话,这些库随后控制硬件(如可控震源、灯光、接近传感器、gps、音频等)。这些库统称为HAL(硬件抽象层)。一些默认实现包含在
      hardware
      文件夹中,但是制造商实现自己的库并将它们放在
      hardware/{manufcaturename}
      (或
      device/{manufacture}
      )中
  • libcore

    • 我不知道这个
  • ndk

    • 允许应用程序开发者将一些(或全部)应用程序编码为本地代码(通常在C和C++中)。基本上,它是一个交叉编译到Android运行的不同cpu架构的工具链
  • out

    • 所有Android构建工件都放在这里。因此,删除
      out
      文件夹将彻底清除源代码
      out
      被分为不同的文件夹,主要的文件夹是
      host
      target
      ,其中为主机(如adb)和目标设备(大部分android系统)编译的内容是分开的。下面还有进一步的细分,一般来说,
      out
      文件夹的排序很好,所以你应该自己去探索一下
  • 套餐

    • 这些包含所有与Android一起构建的默认应用程序、提供者、输入方法等。手机应用程序、通讯录、日历、计算器、默认软键盘等都放在这里。它们不是第三方应用程序,而是内部应用程序,其中许多应用程序是根据非公共android API构建的。因此,这里的大多数应用程序都无法针对公共Android SDK(例如eclipse)进行构建,但必须作为完整Android构建过程的一部分进行构建
  • 预构建的

    • 与Android一起作为二进制文件分发的东西。这里的主要内容是用于为ARM构建Android(现在也是x86)的交叉编译器。它们是预先构建的,因此您不必实际构建交叉编译器