org.opencv.BuildConfig重复定义:Android Release构建失败求助
解决Release构建时OpenCV重复类冲突问题
我更新了一个.aar依赖,该新版本中新增了OpenCV依赖;当前项目里还有另一依赖也引入了OpenCV,但版本不同。Debug构建可正常运行,但执行Release构建时出现以下错误:
AGPBI: {"kind":"error","text":"Type org.opencv.BuildConfig is defined multiple times: /[myPath]canoa/build/.transforms/bf16c92d6dcc96ca8411ea3aa706b978/transformed/jetified-canoa-sdk_2.3.0-runtime/dex/classes.dex, [myPath]/app/build/intermediates/external_libs_dex/prodRelease/mergeExtDexProdRelease/classes5.dex","sources":[{"file":"[myProjectPath]canoa/build/.transforms/bf16c92d6dcc96ca8411ea3aa706b978/transformed/jetified-canoa-sdk_2.3.0-runtime/dex/classes.dex"}],"tool":"D8"} com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: Type org.opencv.BuildConfig is defined multiple times: /myPathProject/build/.transforms/bf16c92d6dcc96ca8411ea3aa706b978/transformed/jetified-canoa-sdk_2.3.0-runtime/dex/classes.dex, [myPathProject]/app/build/intermediates/external_libs_dex/prodRelease/mergeExtDexProdRelease/classes5.dex at com.android.builder.dexing.D8DexArchiveMerger.getExceptionToRethrow(D8DexArchiveMerger.java:151) at com.android.builder.dexing.D8DexArchiveMerger.mergeDexArchives(D8DexArchiveMerger.java:138) at com.android.build.gradle.internal.tasks.DexMergingWorkAction.merge(DexMergingTask.kt:859) at com.android.build.gradle.internal.tasks.DexMergingWorkAction.run(DexMergingTask.kt:805) at com.android.build.gradle.internal.profile.ProfileAwareWorkAction.execute(ProfileAwareWorkAction.kt:74)
解决步骤:
排查依赖树,定位冲突来源
执行gradle命令查看项目完整依赖树,找到两个依赖分别引入的OpenCV版本:./gradlew app:dependencies搜索
org.opencv,确认是哪两个依赖(新的aar和项目原有依赖)分别引入了不同版本的OpenCV。排除其中一个依赖的OpenCV
在Module级别的build.gradle中,给冲突的依赖添加排除规则,保留项目需要的版本。比如如果新的aar依赖(canoa-sdk_2.3.0)引入的OpenCV和原有依赖冲突,就排除它的OpenCV:implementation(name: 'canoa-sdk_2.3.0', ext: 'aar') { exclude group: 'org.opencv' }反之,如果原有依赖的OpenCV版本不需要,就给原有依赖添加排除规则。
强制统一OpenCV版本
如果排除后出现兼容性问题,可在build.gradle中强制指定OpenCV版本,让所有依赖统一使用该版本:configurations.all { resolutionStrategy.force 'org.opencv:opencv-android:4.5.5' // 替换为你实际需要的版本号 }清理并重新构建
执行./gradlew clean清理构建缓存,再重新执行Release构建。
内容的提问来源于stack exchange,提问作者Lucas Bicca Karsburg
相关产品推荐
相关产品推荐

