Android Studio中不同产品风味出现重复资源问题求助
问题原因
你当前的sourceSets配置逻辑有误:在flavor1和flavor2的sourceSet块中设置debug.assets.srcDirs,实际上是将对应assets目录添加到所有Debug变体的资源搜索路径中,而非仅当前风味的Debug变体;同理,release.assets.srcDirs会被添加到所有Release变体中。
这就导致构建某个风味的变体时,会同时加载其他风味同类型(Debug/Release)的assets目录,当目录中存在同名文件时,就会触发Duplicate resources错误。
解决方法
方法1:使用变体专属sourceSet配置
直接针对具体变体(如flavor1Debug、flavor1Release)单独设置assets目录,确保每个变体只加载自身对应的资源路径:
productFlavors { flavor1 { ... } flavor2 { ... } } sourceSets { main { java.srcDirs = [ ... ] jniLibs.srcDirs = [ ... ] } // 配置风味通用资源 flavor1 { res.srcDirs 'path to flavor1 res' } flavor2 { res.srcDirs 'path to flavor2 res' } // 配置变体专属assets flavor1Debug { assets.srcDirs 'path to flavor1 debug assets' } flavor1Release { assets.srcDirs 'path to flavor1 release assets' } flavor2Debug { assets.srcDirs 'path to flavor2 debug assets' } flavor2Release { assets.srcDirs 'path to flavor2 release assets' } }
方法2:遵循Android标准目录结构(推荐)
无需手动配置sourceSets,直接将assets按变体目录放置,Android Gradle插件会自动识别对应变体的资源:
- flavor1 Debug assets:
src/flavor1Debug/assets/ - flavor1 Release assets:
src/flavor1Release/assets/ - flavor2 Debug assets:
src/flavor2Debug/assets/ - flavor2 Release assets:
src/flavor2Release/assets/
这种方式符合插件的默认逻辑,无需额外配置,能彻底避免跨风味的资源冲突。
方法3:使用setSrcDirs替换路径(不推荐)
如果坚持手动配置,可通过setSrcDirs明确替换资源路径(而非默认的追加逻辑),避免同时包含其他风味的目录:
sourceSets { main { java.srcDirs = [ ... ] jniLibs.srcDirs = [ ... ] } flavor1 { res.srcDirs 'path to flavor1 res' debug.assets.setSrcDirs(['path to flavor1 debug assets']) release.assets.setSrcDirs(['path to flavor1 release assets']) } flavor2 { res.srcDirs 'path to flavor2 res' debug.assets.setSrcDirs(['path to flavor2 debug assets']) release.assets.setSrcDirs(['path to flavor2 release assets']) } }
注意:这种方式可能覆盖main sourceSet中的assets路径,需谨慎使用。
内容的提问来源于stack exchange,提问作者deko
相关产品推荐
相关产品推荐

