Skip to content

Artifacts API (操作编译产物)

Artifacts APIVariant 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. 为什么这比传统拷贝更专业?

  1. 隐式依赖: Gradle 知道 MyManifestTask 必须在 Manifest 合并完成后运行,你不需要写 dependsOn
  2. 输入输出一致性: 确保了产物链的完整性,不会因为文件找不到而报错。