如下图所示,在 Android 开发中,使用 Gradle 构建会生成 build 目录。这篇文章将解释 build 目录下文件的作用。
generated 文件
generated目录中包含了在构建过程中自动生成的各种文件。如下所示,常见的目录有 ksp
、res
、source
。
bash
build/generated
├── ksp
├── source
├── res
- ksp目录:存放 ksp 生成的代码
- res目录:存放自动生成的资源文件,比如使用 AGP 的
resValue
方法增加的资源值 - source目录:存放自动生成的源代码文件,比如BuildConfig.java 文件(包含构建配置信息)等
intermediates
intermediates 目录包含了构建过程中的中间产物,例如编译后的字节码文件、资源处理后的中间文件等。如下所示,常见的目录有 apk
、merged_manifest
bash
build/intermediates
├── apk
├── merged_manifest
- apk目录:Android studio 点击 run 之后生成的 apk 会放在
build\intermediates\apk
目录下 - merged_manifest目录:最终生成的
AndroidManifest.xml
会存放在这个目录。当因为多个模块之间的AndroidManifest.xml
合并失败导致编译失败时,可以看看这个目录下的AndroidManifest.xml
文件是哪里出了问题。
kotlin
如果项目使用了 Kotlin 语言,build 目录下会有 kotlin 编译相关的子目录,用于存放 Kotlin 编译过程中的产物。
output
output目录包含了构建过程的最终输出文件。如下所示,常见的目录有 apk
、 log
。
bash
build/output
├── apk
├── log
- apk目录:在output/apk中包含的是使用 Android studio中的
Build Bundle(s)/APK(s)
生成的apk文件 - log目录:包含构建过程的日志文件,比如可以在模块的
build/outputs/logs/
目录中查找名为manifest-merger-buildVariant-report.txt
的日志文件。该文件记录了AndroidManifest.xml
的合并过程
tmp
该目录用于存放构建过程中使用的临时文件,这些文件通常在构建完成后会被清理。