Flutter构建release APK时OpenCV重复类、JAR版本冲突报错
Flutter 引入opencv依赖构建release包失败修复方案
问题表现
- 项目中添加
opencv: ^1.0.4依赖后,执行flutter build apk命令构建release安装包,构建流程开启sound null safety时首先抛出Kotlin运行时JAR版本不一致警告:
w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath: C:/Users/Administrator/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.5.30/5fd47535cc85f9e24996f939c2de6583991481b0/kotlin-stdlib-jdk8-1.5.30.jar (version 1.5) w: Some runtime JAR files in the classpath have an incompatible version. Consider removing them from the classpath
- 警告抛出后构建中断,核心报错为重复类冲突,大量
org.opencv包路径下的类同时存在于两个OpenCV依赖中:
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:checkReleaseDuplicateClasses'. > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable > Duplicate class org.opencv.BuildConfig found in modules jetified-opencv-4.3.0-runtime (com.quickbirdstudios:opencv:4.3.0) and jetified-opencv-android-gradle-repo-3.3.0-runtime (com.github.davidmigloz:opencv-android-gradle-repo:3.3.0) Duplicate class org.opencv.android.AsyncServiceHelper found in modules jetified-opencv-4.3.0-runtime (com.quickbirdstudios:opencv:4.3.0) and jetified-opencv-android-gradle-repo-3.3.0-runtime (com.github.davidmigloz:opencv-android-gradle-repo:3.3.0) Duplicate class org.opencv.android.BaseLoaderCallback$7 found in modules jetified-opencv-4.3.0-runtime (com.quickbirdstudios:opencv:4.3.0) and jetified-opencv-android-gradle-repo-3.3.0-runtime (com.github.davidmigloz:opencv-android-gradle-repo:3.3.0) Duplicate class org.opencv.android.Camera2Renderer found in modules jetified-opencv-4.3.0-runtime (com.quickbirdstudios:opencv:4.3.0) and jetified-opencv-android-gradle-repo-3.3.0-runtime (com.github.davidmigloz:opencv-android-gradle-repo:3.3.0) .... Duplicate class org.opencv.videoio.Videoio found in modules jetified-opencv-4.3.0-runtime (com.quickbirdstudios:opencv:4.3.0) and jetified-opencv-android-gradle-repo-3.3.0-runtime (com.github.davidmigloz:opencv-android-gradle-repo:3.3.0)
最终assembleRelease任务执行失败,进程退出码为1。
错误根因
构建阶段同时拉取了两个来源、版本均不相同的OpenCV Android依赖,两者类路径完全一致,触发Gradle重复类校验规则:
com.quickbirdstudios:opencv:4.3.0:是引入的opencv: ^1.0.4Flutter插件默认绑定的原生OpenCV依赖com.github.davidmigloz:opencv-android-gradle-repo:3.3.0:是项目中其他第三方依赖通过传递依赖引入的旧版OpenCV库
此外不同依赖携带的Kotlin标准库版本和项目当前配置的Kotlin版本不匹配,因此抛出JAR版本不一致警告。
修复步骤
- 排除冲突的旧版OpenCV传递依赖
打开项目Android目录下的app/build.gradle文件,定位到dependencies代码块。如果无法确认是哪个依赖引入了旧版OpenCV,先进入Android目录执行./gradlew app:dependencies命令打印全量依赖树,搜索opencv-android-gradle-repo关键字定位对应的上层依赖,针对该依赖添加排除规则。
如果确认是opencv Flutter插件本身传递引入了冲突依赖,直接添加如下配置:
dependencies { // 项目原有其他依赖保持不变 implementation('com.quickbirdstudios:flutter_opencv:1.0.4') { exclude group: 'com.github.davidmigloz', module: 'opencv-android-gradle-repo' } }
- 统一Kotlin标准库版本消除警告
打开项目根目录下的build.gradle文件,在allprojects代码块中添加版本强制对齐规则,确保所有依赖使用的Kotlin标准库版本和项目声明的Kotlin插件版本一致:
allprojects { repositories { // 原有仓库配置保持不变 } configurations.all { resolutionStrategy { force "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" force "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } } }
配置中的$kotlin_version替换为项目buildscript块中声明的kotlin-gradle-plugin对应版本号即可。
- 清理缓存重新构建
依次执行以下命令清理历史构建缓存,重新拉取依赖后打包:
flutter clean flutter pub get flutter build apk --release
内容的提问来源于stack exchange,提问作者Ramkumar
相关产品推荐
相关产品推荐

