Artifacts API (操作编译产物)
Artifacts API 与 Variant API 配合使用,专门用于处理构建过程中的“中间产物”或“最终产物”。
1. 核心概念
AGP 将构建产物(如 APK, Manifest, Merged Resources)抽象为 Artifact。你可以“获取”这些产物,甚至“替换”它们。
2. 常见产物类型
Artifact.APK: 最终生成的 APK。Artifact.MERGED_MANIFEST: 合并后的清单文件。Artifact.OBFUSCATION_MAPPING_FILE: 混淆映射文件。
3. 专家案例:拦截并处理合并后的清单
如果你想在所有模块清单合并后,对其进行某种特殊的安全扫描或自动修改。
kotlin
androidComponents {
onVariants { variant ->
val manifestTask = tasks.register<MyManifestTask>("process\${variant.name}Manifest")
// 使用 wiredWith 自动处理输入输出流
variant.artifacts.use(manifestTask)
.wiredWithFiles(
MyManifestTask::mergedManifest,
MyManifestTask::updatedManifest
)
.toTransform(SingleArtifact.MERGED_MANIFEST)
}
}4. 为什么这比传统拷贝更专业?
- 隐式依赖: Gradle 知道
MyManifestTask必须在 Manifest 合并完成后运行,你不需要写dependsOn。 - 输入输出一致性: 确保了产物链的完整性,不会因为文件找不到而报错。