AGP 7.0.0+版本中registerGeneratedResFolders的替代方案是什么?
AGP 7.0 自定义生成资源目录适配方案
直接通过新版Variant API提供的资源源集扩展方法即可完成适配,无需依赖仅支持values类型资源的addResValue方法,适配代码如下:
androidComponents { onVariants { variant -> // 构造输出路径,可从variant对象获取对应风味、构建类型信息 val outputPath = "$buildDir/generated/res/foo/${variant.flavorName}/${variant.buildType}" val outputDir = project.file(outputPath) // 注册你的自定义资源生成任务,配置任务输出内容到outputDir val resourceGenTask = tasks.register(/* 你的任务配置逻辑 */) // 将生成目录接入构建资源流程,支持raw、drawable等所有资源类型 variant.sources.res?.addGeneratedSourceDirectory( resourceGenTask, { outputDir } ) } }
特殊场景适配
如果你的资源生成任务没有通过Gradle Managed Property声明输出,可使用以下简化写法:
val outputs = project.files(outputDir).builtBy(resourceGenTask) variant.sources.res?.addStaticSourceDirectory(outputDir.absolutePath)
关键说明
- 该逻辑不需要包裹在
afterEvaluate代码块中,androidComponents.onVariants回调本身会在AGP完成基础配置后执行,无配置时序问题 - 接入后生成的资源会自动参与后续资源合并、编译全流程,和旧版
registerGeneratedResFolders效果完全一致
内容的提问来源于stack exchange,提问作者ferini
相关产品推荐
相关产品推荐

