Android 项目包含许多与构建相关的文件和目录结构,用于组织您的应用程序源代码和资源。在深入了解配置细节之前,我们将先了解整体结构以及每个部分的基本内容。
此表列出了 Android 项目中的典型文件。每个文件或目录的说明包括有关其中应包含哪种类型内容的说明。最佳实践会随着时间的推移而发展,这些说明可能与您继承的项目或从互联网下载的项目不符。
编写构建文件时,请使用声明式方法;构建逻辑和任务定义应仅出现在插件中。通过将构建逻辑限制在插件中,构建文件将成为数据声明,这使得理解和编辑更加直接。未来版本可能会包含其他规范,例如 声明式 Gradle,这将阻止构建文件中的构建逻辑。
文件夹/文件 |
用途 |
---|---|
.gradle/ |
Gradle 项目缓存目录 由 Gradle 管理,包含下载的 Gradle 发行版、项目缓存和配置文件。 不要更改此目录中的文件! |
.idea/ |
Android Studio 项目元数据 不要更改此目录中的文件! |
build.gradle(.kts) |
应仅包含插件声明,以在子项目中设置通用的插件类路径。 其他代码应位于设置或嵌套项目级别的构建文件中。 |
gradle.properties |
包含 Gradle 属性,控制 Gradle 构建环境的各个方面,例如堆大小、缓存和并行执行。 在此处定义一些临时 Android 属性,以减少随着添加和随后删除这些属性而对 AGP DSL 进行的更改。 |
gradlew (Linux,Mac) gradlew.bat (Windows) |
Gradle 包装器 文件 通过下载 Gradle 发行版然后将命令转发给它来引导您的构建。这样您就可以在不预先安装 Gradle 的情况下运行构建。 |
local.properties |
本地计算机配置 包含与本地计算机相关的属性,例如 Android SDK 的位置。 将此文件排除在源代码控制之外! |
settings.gradle(.kts) |
包含用于 Gradle 初始化和项目配置的全局构建信息,例如
|
gradle/ |
|
↳ libs.versions.toml |
定义构建内部使用的依赖项和插件的变量。您在此处指定要使用的版本,确保项目中所有子项目的一致性。 |
↳ wrapper/ |
|
↳ gradle-wrapper.jar |
Gradle 引导程序 可执行文件 下载指定的 Gradle 发行版(如果不存在),然后运行它,并将任何参数传递给它 |
↳ gradle-wrapper.properties |
用于 Gradle 包装器 的配置 指定在哪里下载 Gradle 发行版(包括要使用的版本)。 |
app/ |
子项目(在 Android Studio 中称为“模块”)可以构建应用程序或库,并且可能依赖于其他子项目或外部依赖项。 应用( |
↳ build.gradle(.kts) |
声明如何构建此子项目。每个子项目都需要一个单独的构建文件,并且应该包含
您不应该在构建文件中包含构建逻辑(例如 Kotlin 函数定义或条件)或任务声明。构建逻辑和任务应该只包含在插件内部. |
↳ src/ |
子项目源文件 将源文件(应用程序代码和资源)分组到源集中。 |
↳ main/ |
主 源集 所有构建变体通用的源代码和资源。此源代码充当所有构建的基础,其他更具体的源集会添加到或覆盖此源代码。 |
↳ java/ ↳ kotlin/ |
Kotlin 和 Java 源代码
|
↳ res/ |
包含应用程序资源,例如 XML 文件和图像。所有应用程序都使用一些基本资源,例如启动器图标,但其中许多资源(例如布局和菜单)仅在基于视图的应用程序中使用。Compose 应用程序使用在此目录下定义的字符串资源。 |
↳ AndroidManifest.xml |
由 Android 包管理器读取,以告知系统
|
↳ androidTest/ |
设备测试 源集 包含将在 Android 设备或模拟器上运行的测试的源代码。这些测试可以访问真实的 Android 环境,但执行速度比主机测试慢。 |
↳ test/ |
主机测试 源集 包含在 JVM 中本地运行的测试的源代码,而不是在设备上运行的测试。这些测试的运行速度比设备测试快得多。但是,任何系统调用(包括运行应用程序的生命周期)都必须被模拟、伪造、存根或以其他方式模拟。
|
↳ proguard-rules.pro |
定义用于控制应用程序缩减、优化和混淆的规则。R8 删除不需要的代码和资源,优化运行时性能,并通过重命名标识符进一步最小化代码。 |