Android 构建结构

Android 项目包含许多与构建相关的文件和目录结构,用于组织您的应用程序源代码和资源。在深入了解配置细节之前,我们将先了解整体结构以及每个部分的基本内容。

此表列出了 Android 项目中的典型文件。每个文件或目录的说明包括有关其中应包含哪种类型内容的说明。最佳实践会随着时间的推移而发展,这些说明可能与您继承的项目或从互联网下载的项目不符。

编写构建文件时,请使用声明式方法;构建逻辑和任务定义应仅出现在插件中。通过将构建逻辑限制在插件中,构建文件将成为数据声明,这使得理解和编辑更加直接。未来版本可能会包含其他规范,例如 声明式 Gradle,这将阻止构建文件中的构建逻辑。

文件夹/文件

用途

.gradle/

Gradle 项目缓存目录

由 Gradle 管理,包含下载的 Gradle 发行版、项目缓存和配置文件。

不要更改此目录中的文件!

.idea/

Android Studio 项目元数据

不要更改此目录中的文件!

build.gradle(.kts)

根构建文件

应仅包含插件声明,以在子项目中设置通用的插件类路径。

其他代码应位于设置或嵌套项目级别的构建文件中。

gradle.properties

Gradle 执行配置

包含 Gradle 属性,控制 Gradle 构建环境的各个方面,例如堆大小、缓存和并行执行。

在此处定义一些临时 Android 属性,以减少随着添加和随后删除这些属性而对 AGP DSL 进行的更改。

gradlew (Linux,Mac)

gradlew.bat (Windows)

Gradle 包装器 文件

通过下载 Gradle 发行版然后将命令转发给它来引导您的构建。这样您就可以在不预先安装 Gradle 的情况下运行构建。

local.properties

本地计算机配置

包含与本地计算机相关的属性,例如 Android SDK 的位置。

将此文件排除在源代码控制之外!

settings.gradle(.kts)

Gradle 构建初始化

包含用于 Gradle 初始化和项目配置的全局构建信息,例如

  • 项目名称
  • 要包含在此构建中的子项目列表
  • 用于查找插件和依赖项的存储库规范
  • 外部版本目录导入。

gradle/

↳ libs.versions.toml

版本目录

定义构建内部使用的依赖项和插件的变量。您在此处指定要使用的版本,确保项目中所有子项目的一致性。

↳ wrapper/

↳ gradle-wrapper.jar

Gradle 引导程序 可执行文件

下载指定的 Gradle 发行版(如果不存在),然后运行它,并将任何参数传递给它

↳ gradle-wrapper.properties

用于 Gradle 包装器 的配置

指定在哪里下载 Gradle 发行版(包括要使用的版本)。

app/

子项目目录

子项目(在 Android Studio 中称为“模块”)可以构建应用程序或库,并且可能依赖于其他子项目或外部依赖项。

应用(app)是顶级应用程序子项目的常规名称(但不是必需的名称)。其他子项目具有类似的结构,但名称不同。

任何目录都可以是子项目,并且必须至少包含一个 build.gradle(.kts) 文件,并使用 settings.gradle(.kts) 包含在构建中。

↳ build.gradle(.kts)

子项目级构建文件

声明如何构建此子项目。每个子项目都需要一个单独的构建文件,并且应该包含

  • 用于构建此子项目的插件
  • 插件所需的配置块
  • 构建此子项目时包含的依赖项(库和平台)

您不应该在构建文件中包含构建逻辑(例如 Kotlin 函数定义或条件)或任务声明。构建逻辑和任务应该只包含在插件内部.

↳ src/

子项目源文件

将源文件(应用程序代码和资源)分组到源集中。 main 源集包含所有变体通用的源文件,而其他源集包含特定于变体的源文件。

↳ main/

源集

所有构建变体通用的源代码和资源。此源代码充当所有构建的基础,其他更具体的源集会添加到或覆盖此源代码。

↳ java/

↳ kotlin/

Kotlin 和 Java 源代码

java 目录可以包含混合的 Java 和 Kotlin 源代码。如果此子项目包含 Kotlin 代码,则可以将此目录重命名为 kotlin。

Android
是一个以 Kotlin 为首选的平台。Java 源代码受支持,但新的 API 面向 Kotlin 语言。我们建议对所有新代码和对现有代码的主要更新使用 Kotlin。

↳ res/

Android 资源文件

包含应用程序资源,例如 XML 文件和图像。所有应用程序都使用一些基本资源,例如启动器图标,但其中许多资源(例如布局和菜单)仅在基于视图的应用程序中使用。Compose 应用程序使用在此目录下定义的字符串资源。

↳ AndroidManifest.xml

Android 应用程序元数据

由 Android 包管理器读取,以告知系统

  • 您的应用程序定义的组件
  • 必要的权限
  • 设备兼容性
  • Android 平台限制

↳ androidTest/

设备测试 源集

包含将在 Android 设备或模拟器上运行的测试的源代码。这些测试可以访问真实的 Android 环境,但执行速度比主机测试慢。

main 源集中的所有源文件都可供 androidTest 下的源代码使用

↳ test/

主机测试 源集

包含在 JVM 中本地运行的测试的源代码,而不是在设备上运行的测试。这些测试的运行速度比设备测试快得多。但是,任何系统调用(包括运行应用程序的生命周期)都必须被模拟、伪造、存根或以其他方式模拟。

main 源集中的所有源文件都可供 test 下的源代码使用.

↳ proguard-rules.pro

R8 配置规则

定义用于控制应用程序缩减、优化和混淆的规则。R8 删除不需要的代码和资源,优化运行时性能,并通过重命名标识符进一步最小化代码。