在Android Studio Giraffe中导入OpenCV 4.8遇构建错误求助
解决OpenCV Android SDK导入AGP 8.x项目的构建错误
问题根源
你碰到的Plugin [id: 'com.android.application', version: '8.1.0', apply: false] was not found错误,本质是OpenCV 4.8.0自带的模块build.gradle使用了旧版Android Gradle插件(AGP)的语法,和你项目中AGP 8.1.0的新配置格式不兼容。旧版的apply plugin声明方式在AGP 7+之后的构建系统中会导致插件版本匹配失败。
一步到位修复方案
1. 替换OpenCV模块的build.gradle
找到你导入的OpenCV模块根目录下的build.gradle,直接替换为以下适配AGP 8.x的代码:
plugins { id 'com.android.library' id 'org.jetbrains.kotlin.android' } def openCVersionName = "4.8.0" def openCVersionCode = ((4 * 100 + 8) * 100 + 0) * 10 + 0 println "OpenCV: " + openCVersionName + " " + project.buildscript.sourceFile android { namespace 'org.opencv' compileSdk 33 // 可以和你的项目compileSdk保持一致,比如改成28 defaultConfig { minSdk 21 targetSdk 33 // 同样建议和项目目标SDK(28)对齐 versionCode openCVersionCode versionName openCVersionName externalNativeBuild { cmake { arguments "-DANDROID_STL=c++_shared" targets "opencv_jni_shared" } } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } buildTypes { debug { packagingOptions { doNotStrip '**/*.so' } } release { packagingOptions { doNotStrip '**/*.so' } minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.txt' } } sourceSets { main { jniLibs.srcDirs = ['native/libs'] java.srcDirs = ['java/src'] aidl.srcDirs = ['java/src'] res.srcDirs = ['java/res'] manifest.srcFile 'java/AndroidManifest.xml' } } externalNativeBuild { cmake { path file('libcxx_helper/CMakeLists.txt') } } } dependencies { }
2. 同步并验证
- 点击Android Studio右上角的「Sync Project with Gradle Files」按钮
- 检查项目根目录
settings.gradle,确保OpenCV模块已被正确包含:include ':app', ':opencv' // 此处的opencv是你导入模块时的命名
3. 可选优化:调整SDK版本
如果你的项目目标SDK是28,把上面代码中的compileSdk和targetSdk改成28,消除版本不一致的警告。
更稳妥的导入方式(推荐)
其实最新教程的导入方式有误,OpenCV官方推荐只导入sdk/java目录作为模块,而非整个sdk目录:
- 导入
sdk/java作为模块 - 将OpenCV解压后的
sdk/native/libs目录复制到你项目的app/src/main/jniLibs下 - 或者在
app模块的build.gradle中配置native库路径:sourceSets { main { jniLibs.srcDirs += ['../opencv/native/libs'] // 路径根据实际情况调整 } }
内容的提问来源于stack exchange,提问作者shawnlg
相关产品推荐
相关产品推荐

