如何在使用 Gradle 时使用 opencv?

Posted

技术标签:

【中文标题】如何在使用 Gradle 时使用 opencv?【英文标题】:How to use opencv in using Gradle? 【发布时间】:2013-07-20 00:09:09 【问题描述】:

我想使用 android Studio 开发一个使用 Gradle 构建工具的应用。我无法在build.gradle 上插入 OpenCV 存储库和库。我的.gradle 文件如下:

buildscript 
    repositories 
        mavenCentral()

    
    dependencies 
        classpath 'com.android.tools.build:gradle:0.5.+'
    

apply plugin: 'android'

repositories 
    mavenCentral()


dependencies 
    compile 'com.android.support:support-v4:13.0.+'


android 
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig 
        minSdkVersion 7
        targetSdkVersion 16
    

如何在我的项目中添加 OpenCV?

【问题讨论】:

【参考方案1】:
buildscript 
    repositories 
        mavenCentral()
    
    dependencies 
        classpath 'com.android.tools.build:gradle:0.5.+'
    

apply plugin: 'android'

repositories 
    mavenCentral()
    maven 
        url 'http://maven2.javacv.googlecode.com/git/'
    


dependencies 
    compile 'com.android.support:support-v4:13.0.+'
    compile 'com.googlecode.javacv:javacv:0.5'
    instrumentTestCompile 'junit:junit:4.4'


android 
    compileSdkVersion 14
    buildToolsVersion "17.0.0"

    defaultConfig 
        minSdkVersion 7
        targetSdkVersion 14
    

这对我有用:)

【讨论】:

这是用于 javacv(opencv 包装器)的,现在它已更改为“org.bytedeco:javacv: 添加上述项目后,我得到了一个“java.lang.UnsatisfiedLinkError: Couldn't load opencv_core from loader dalvik.system.PathClassLoader”异常。知道缺少什么吗? (作为记录,我添加了 'complie org.bytedeco.javacv:0.9+') @Hegi 这些链接可能会有所帮助。 ***.com/questions/22516291/…***.com/questions/21998366/…【参考方案2】:

如果您不想使用 JavaCV,这对我有用...

第 1 步 - 下载资源

从http://opencv.org/downloads.html下载OpenCV Android SDK

第 2 步 - 将 OpenCV 二进制文件复制到您的 APK 中

复制libopencv_info.so & libopencv_java.so

OpenCV-2.?.?-android-sdk -> sdk -> native -> libs -> armeabi-v7a

Project Root -> Your Project -> lib - > armeabi-v7a

压缩 lib 文件夹并将该压缩文件重命名为whatever-v7a.jar。

复制这个 .jar 文件并将其放在您的项目中

Project Root -> Your Project -> libs

将此行添加到项目 build.gradle 中的依赖项部分

compile files('libs/whatever-v7a.jar')

当你现在编译时,你可能会看到你的 .apk 大约大了 4mb。

(如果您也想支持 ARMv6,请重复“armeabi”,可能不再需要。)

第 3 步 - 将 java sdk 添加到您的项目中

从这里复制java文件夹

OpenCV-2.?.?-android-sdk -> sdk

Project Root -> Your Project -> libs(与您的 .jar 文件相同的位置);

(您可以将“java”文件夹名称重命名为“OpenCV”)

在这个新复制的文件夹中添加一个典型的 build.gradle 文件;我用这个:

buildscript 
    repositories 
        mavenCentral()
    
    dependencies 
        classpath 'com.android.tools.build:gradle:0.6.+'
    


apply plugin: 'android-library'

repositories 
    mavenCentral();


android 
    compileSdkVersion 19
    buildToolsVersion "19"

    defaultConfig 
        minSdkVersion 15
        targetSdkVersion 19
    

    sourceSets 
        main 
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        
    

在您的 Project Root settings.gradle 文件中也将其更改为如下所示:

include ':Project Name:libs:OpenCV', ':Project Name'

在您的项目根目录 -> 项目名称 -> build.gradle 文件的依赖项部分中添加以下行:

compile project(':Project Name:libs:OpenCV')

第 4 步 - 在您的项目中使用 OpenCV

重建,您应该能够在项目中导入并开始使用 OpenCV。

import org.opencv.android.OpenCVLoader;
...
if (!OpenCVLoader.initDebug()) 

我知道如果有点hack,但我想我还是会发布它。

【讨论】:

这达到了一定程度,但我无法将 OpenCV 类导入到我的项目中。我可以导入org.opencv - 这是公认的,但如果我尝试导入例如org.opencv.android.OpenCVLoaderandroid 带有红色下划线,我尝试导入的任何其他类也是如此。可能出了什么问题? 您确定在第 1 步中从 OpenCV.org 下载了“OpenCV for Android”吗?如果是这样,听起来步骤#3 出了点问题。希望有帮助.. 我做到了,是的,我认为问题不是在重建,现在已经解决了。 很高兴听到汤姆的消息!顺便说一句 - 从 Android Studio 0.4.2 开始,我认为他们有一些 NDK 支持,我想尽快检查一下,它可能会导致更小的 APK 大小。 我按照你的步骤,我得到:无法加载 opencv_java:findLibrary 返回 null。我从头开始跟踪他们两次,结果相同。使用 Android Studio 0.5.1。我可以从 main 调用 initDebug,但似乎找不到底层库?有什么想法吗?谢谢!【参考方案3】:

您可以在 Android Studio 中轻松完成此操作。

按照以下步骤在您的项目中添加 Open CV 作为库。

    在项目主目录下创建一个libraries 文件夹。例如,如果您的项目是OpenCVExamples,您将创建一个OpenCVExamples/libraries 文件夹。

    转到你有SDK的位置“\OpenCV-2.4.8-android-sdk\sdk”在这里你会找到java文件夹,把它重命名为opencv

    现在将完整的 opencv 目录从 SDK 复制到您刚刚创建的库文件夹中。

    现在在opencv目录下创建一个build.gradle文件,内容如下

    apply plugin: 'android-library'
    
    buildscript 
        repositories 
            mavenCentral()
        
        dependencies 
            classpath 'com.android.tools.build:gradle:0.9.+'
        
    
    
    android 
        compileSdkVersion 19
        buildToolsVersion "19.0.1"
    
        defaultConfig 
            minSdkVersion 8
            targetSdkVersion 19
            versionCode 2480
            versionName "2.4.8"
        
    
        sourceSets 
            main 
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                res.srcDirs = ['res']
                aidl.srcDirs = ['src']
            
        
    
    

    编辑应用程序主目录中的 settings.gradle 文件并添加以下行:

    include ':libraries:opencv'
    

    将您的项目与 Gradle 同步,它应该如下所示

    右键单击您的项目,然后单击Open Module Settings,然后从左侧列表中选择模块,单击应用程序的模块,单击依赖项选项卡,然后单击 + 按钮添加新的模块依赖项。

    选择Module dependency。它将打开一个对话框,其中包含可供选择的模块列表;选择“:libraries:opencv”。

    /app/src/main/ 位置创建一个jniLibs 文件夹,并从OpenCV SDK 复制jniLibs 中带有*.so 文件(armeabi、armeabi-v7a、mips、x86)的所有文件夹。

    单击“确定”。现在一切都完成了,去享受 OpenCV 吧。

【讨论】:

"您可以在 Android Studio 中轻松完成此操作。" - 是的,对,完全直截了当...... :) 但是非常感谢,你的解决方案终于帮助我完成了这个。我想询问有关将文件复制到 jniLibs 目录中的问题。它复制了大约 150 兆字节的数据。这些都将包含在最终申请中吗?如果是,它们是否有必要?我的意思是可以在不使应用程序变得不必要的大的情况下包含 opencv 吗? 好的,所以我手机中的应用程序最终大约“只有”40 MB,但我有一个问题,我收到此错误:UnsatisfiedLinkError: Native method not found: org.opencv.features2d.FeatureDetector.create_0:(I)J。你知道可能是什么原因吗? @Vinuthan:确保您下载了 OpenCV Android SDK 而不仅仅是 OpenCV。你想要OpenCV for Android 链接here。听起来你可能抓错了。从 OpenCV Android 2.4.9 开始,我能够在 sdk/java/ 中找到该文件夹​​。 在第 9 步中,我在 OpenCV SDK 中看不到 jniLibs 文件夹。经过一番查找,我确实找到了带有 *.so 文件的文件夹,但它们在这个目录中:OpenCV-3.0.0-android-sdk-1\OpenCV-android-sdk\sdk\native\libs 难道只是我使用的是更新版本的 OpenCV SDK? @TGMCians 在第 6 步中我收到此错误:错误:无法从项目路径/库/AndroidManifest.xml 中读取包名。是不是该修改了?以及如何?【参考方案4】:

我发布了一篇关于如何构建包含 OpenCV 的 Android NDK 应用程序的新帖子 使用 Android Studio 和 Gradle。更多信息可以看here,我总结了两种方法:

(1) 在 Gradle 任务中运行 ndk-build

sourceSets.main.jni.srcDirs = []

task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') 
    ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
    commandLine "$ndkDir/ndk-build",
            'NDK_PROJECT_PATH=build/intermediates/ndk',
            'NDK_LIBS_OUT=src/main/jniLibs',
            'APP_BUILD_SCRIPT=src/main/jni/Android.mk',
            'NDK_APPLICATION_MK=src/main/jni/Application.mk'


tasks.withType(JavaCompile) 
    compileTask -> compileTask.dependsOn ndkBuild

(2) 使用外部工具运行ndk-build

参数:NDK_PROJECT_PATH=$ModuleFileDir$/build/intermediates/ndk NDK_LIBS_OUT=$ModuleFileDir$/src/main/jniLibs NDK_APPLICATION_MK=$ModuleFileDir$/src/main/jni/Application.mk APP_BUILD_SCRIPT=$ModuleFileDir$/src/main/jni/Android.mk V=1

更多信息可以看here

【讨论】:

【参考方案5】:

根据 OpenCV 文档 (1),以下使用 OpenCV 管理器 的步骤是使用 OpenCV 进行 生产 运行的推荐方法。但是,OpenCV 管理器(2)是从 Google Play 商店额外安装的。因此,如果您更喜欢自包含的 apk(不使用 OpenCV 管理器)或目前处于开发/测试阶段,我建议您在 https://***.com/a/27421494/1180117 回答。

在带有 OpenCV 管理器的 Android Studio 中使用 OpenCV 的推荐步骤。

    解压从OpenCV.org下载的OpenCV Android sdk(3) 从File -> Import Module,选择解压缩的opencv存档中的sdk/java文件夹。 在导入的 OpenCV 模块下更新 build.gradle 以更新 4 个字段以匹配您项目的 build.gradle a) compileSdkVersion b) buildToolsVersion c) minSdkVersion 和 4) targetSdkVersion。 通过Application -> Module Settings添加模块依赖,并选择Dependencies选项卡。点击底部(或右侧)+ 图标,选择Module Dependency 并选择导入的 OpenCV 模块。

作为最后一步,在您的 Activity 类中,在下方添加 sn-p。

    public class SampleJava extends Activity  

        private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) 
        @Override
        public void onManagerConnected(int status) 
            switch(status) 
                case LoaderCallbackInterface.SUCCESS:
                    Log.i(TAG,"OpenCV Manager Connected");
                    //from now onwards, you can use OpenCV API
                    Mat m = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0));
                    break;
                case LoaderCallbackInterface.INIT_FAILED:
                    Log.i(TAG,"Init Failed");
                    break;
                case LoaderCallbackInterface.INSTALL_CANCELED:
                    Log.i(TAG,"Install Cancelled");
                    break;
                case LoaderCallbackInterface.INCOMPATIBLE_MANAGER_VERSION:
                    Log.i(TAG,"Incompatible Version");
                    break;
                case LoaderCallbackInterface.MARKET_ERROR:
                    Log.i(TAG,"Market Error");
                    break;
                default:
                    Log.i(TAG,"OpenCV Manager Install");
                    super.onManagerConnected(status);
                    break;
            
        
    ;

    @Override
    protected void onResume() 
        super.onResume();
        //initialize OpenCV manager
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
    

注意:只有在onManagerConnected 方法上收到成功回调后才能进行 OpenCV 调用。在运行期间,如果尚未安装,系统将提示您从 Play 商店安装 OpenCV 管理器。在开发过程中,如果您无权访问 Play 商店或在 emualtor 上,请使用下载的 OpenCV sdk 存档下 apk 文件夹中存在的适当 OpenCV 管理器 apk。

优点

Apk 大小减少了大约 40 MB(也考虑升级)。 OpenCV 管理器会为您的硬件安装优化的二进制文件,这有助于提高速度。 升级到 OpenCV 管理器可能会使您的应用免于 OpenCV 中的错误。 不同的应用可以共享同一个 OpenCV 库。

缺点

最终用户体验 - 可能不喜欢您的安装提示 申请。

【讨论】:

如何使用 C++ 将其与 NDK 和 JNI 一起使用? @RomanticElectron 我没有用 ndk 尝试过 opencv。我想知道您使用 ndk 的 opencv 的哪些特定功能。在 3.0 中,opencv 的 Java 包装器确实得到了改进。 我想使用 Stroke Width Transform 算法进行文本检测,获取 Connected Components 并分离出字母以向神经网络 @Kiran 提供输入 我不知道包含什么 static System.loadLibrary("opencv_java"); 事情确实(或放在哪里),但这是这个问题的正确答案。谢谢!您还需要另一个错误修复。见:***.com/questions/27470313/… 对不起,你把静态调用放在哪里了?【参考方案6】:

这些是在 Android Studio 1.2 中使用 OpenCV 的必要步骤:

下载OpenCV 并解压存档 在 Android Studio 中打开您的应用项目 转到 文件 -> 新建 -> 导入模块... 在之前解压的目录中选择sdk/java模块名称设置为opencv下一步然后完成 在导入的 OpenCV 模块下打开 build.gradle 并将 compileSdkVersionbuildToolsVersion 更新为您机器上的版本

compile project(':opencv') 添加到您的应用 build.gradle

dependencies 
    ...
    compile project(':opencv')

将项目与 Gradle 文件同步

【讨论】:

【参考方案7】:

它也适用于 Android Studio 1.2 + OpenCV-2.4.11-android-sdk (.zip)。

只需执行以下操作:

1) 遵循以“您可以在 Android Studio 中非常轻松地完成此操作。按照以下步骤将 OpenCV 作为库添加到您的项目中”开头的答案。由 TGMCians 撰写。

2) 在<yourAppDir>\libraries\opencv 文件夹中将您新创建的build.gradle 修改为(TGMCians 回答中的第 4 步,适用于 OpenCV2.4.11-android-sdk 并使用 gradle 1.1.0 em>):

apply plugin: 'android-library'

buildscript 
    repositories 
        mavenCentral()
    
    dependencies 
        classpath 'com.android.tools.build:gradle:1.1.0'
    


android 
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig 
        minSdkVersion 8
        targetSdkVersion 21
        versionCode 2411
        versionName "2.4.11"
    

    sourceSets 
        main 
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
            aidl.srcDirs = ['src']
        
    

3) 位于目录"armeabi", "armeabi-v7a", "mips", "x86" 中的 *.so 文件可以在(默认 OpenCV 位置)下找到:..\OpenCV-2.4.11-android-sdk\OpenCV-android-sdk\sdk\native\libs(TGMCians 回答中的第 9 步)。

享受,如果这有帮助,请给予正面的声誉。我需要 50 个才能直接回答答案(左 19 个):)

【讨论】:

【参考方案8】:

AndroidManifest.xml 文件中需要以下权限和功能,否则您将获得以下对话框

“您的设备似乎不支持摄像头(或已锁定)。应用程序将被关闭”

  <uses-permission android:name="android.permission.CAMERA"/>

    <uses-feature android:name="android.hardware.camera" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.front" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>

【讨论】:

【参考方案9】:

OpenCV、Android Studio 1.4.1、gradle-experimental plugin 0.2.1

其他答案都没有帮助我。这对我有用。我正在使用 opencv 中的 tutorial-1 示例,但我将在我的项目中使用 NDK,因此我使用的是 gradle-experimental 插件,它的结构与 gradle 插件不同。

需要安装Android studio,通过Android SDK Manager安装Android NDK,下载OpenCV Android SDK并解压。

这是在 bash 脚本块中,以保持其紧凑但完整。这也都在命令行上,因为我遇到的一个大问题是,随着 IDE 的发展,in-IDE 指令已经过时了。

首先设置OpenCV SDK的根目录位置。

export OPENCV_SDK=/home/user/wip/OpenCV-2.4.11-android-sdk
cd $OPENCV_SDK

创建您的 gradle 构建文件...

首先是 OpenCV 库

cat > $OPENCV_SDK/sdk/java/build.gradle <<'==='


apply plugin: 'com.android.model.library'
model 
    android 
        compileSdkVersion = 23
        buildToolsVersion = "23.0.2"

        defaultConfig.with 
            minSdkVersion.apiLevel = 8
            targetSdkVersion.apiLevel = 23
        
    

    android.buildTypes 
        release 
            minifyEnabled = false
        
        debug
            minifyEnabled = false
        
    
   android.sources 
       main.manifest.source.srcDirs +=  "."
       main.res.source.srcDirs +=  "res"
       main.aidl.source.srcDirs +=  "src"
       main.java.source.srcDirs +=  "src"
   




===

然后告诉教程示例将库标记为什么以及在哪里找到它。

cat > $OPENCV_SDK/samples/tutorial-1-camerapreview/settings.gradle <<'==='


include ':openCVLibrary2411'
project(':openCVLibrary2411').projectDir = new File('../../sdk/java')


===

为教程创建构建文件。

cat > $OPENCV_SDK/samples/tutorial-1-camerapreview/build.gradle <<'==='


buildscript 
    repositories 
        jcenter()
    
    dependencies 
        classpath 'com.android.tools.build:gradle-experimental:0.2.1'
    


allprojects 
    repositories 
        jcenter()
    


apply plugin: 'com.android.model.application'

model 
    android 
        compileSdkVersion = 23
        buildToolsVersion = "23.0.2"

        defaultConfig.with 
            applicationId = "org.opencv.samples.tutorial1"
            minSdkVersion.apiLevel = 8
            targetSdkVersion.apiLevel = 23
        
    

    android.sources 
       main.manifest.source.srcDirs +=  "."
       main.res.source.srcDirs +=  "res"
       main.aidl.source.srcDirs +=  "src"
       main.java.source.srcDirs +=  "src"
     

    android.buildTypes 
        release 
            minifyEnabled = false
            proguardFiles += file('proguard-rules.pro')
        
        debug 
             minifyEnabled = false
        
    


dependencies 
    compile project(':openCVLibrary2411')



===

您的构建工具版本需要正确设置。这是一个简单的方法 看看你安装了什么。 (您可以通过安装其他版本 Android SDK 管理器)。如果您没有 23.0.2,请更改 buildToolsVersion。

echo "Your buildToolsVersion is one of: "
ls $ANDROID_HOME/build-tools

将第一行的环境变量更改为您的版本号

REP=23.0.2 #CHANGE ME
sed -i.bak s/23\.0\.2/$REP/g $OPENCV_SDK/sdk/java/build.gradle
sed -i.bak s/23\.0\.2/$REP/g $OPENCV_SDK/samples/tutorial-1-camerapreview/build.gradle

最后,设置正确的 gradle 包装器。 Gradle 需要一个干净的目录 去做这个。

pushd $(mktemp -d)

gradle wrapper --gradle-version 2.5

mv -f gradle* $OPENCV_SDK/samples/tutorial-1-camerapreview
popd

您现在应该已准备就绪。您现在可以使用 Android Studio 浏览到此目录并打开项目。

使用以下命令在命令行上构建教程:

./gradlew assembleDebug

它应该构建你的 apk,把它放在 ./build/outputs/apk

【讨论】:

【参考方案10】:

我已将 Java 项目从 OpenCV SDK 导入到 Android Studio gradle 项目中,并在 https://github.com/ctodobom/OpenCV-3.1.0-Android 上提供了它

借助 jitpack.io 服务,您只需在 build.gradle 文件中添加两行即可将其包含在您的项目中。

【讨论】:

【参考方案11】:

OpenCV Android SDK 有一个示例 gradle.build 文件,其中包含有用的 cmets:https://github.com/opencv/opencv/blob/master/modules/java/android_sdk/build.gradle.in

//
// Notes about integration OpenCV into existed Android Studio application project are below (application 'app' module should exist).
//
// This file is located in <OpenCV-android-sdk>/sdk directory (near 'etc', 'java', 'native' subdirectories)
//
// Add module into Android Studio application project:
//
// - Android Studio way:
//   (will copy almost all OpenCV Android SDK into your project, ~200Mb)
//
//   Import module: Menu -> "File" -> "New" -> "Module" -> "Import Gradle project":
//   Source directory: select this "sdk" directory
//   Module name: ":opencv"
//
// - or attach library module from OpenCV Android SDK
//   (without copying into application project directory, allow to share the same module between projects)
//
//   Edit "settings.gradle" and add these lines:
//
//   def opencvsdk='<path_to_opencv_android_sdk_rootdir>'
//   // You can put declaration above into gradle.properties file instead (including file in HOME directory),
//   // but without 'def' and apostrophe symbols ('): opencvsdk=<path_to_opencv_android_sdk_rootdir>
//   include ':opencv'
//   project(':opencv').projectDir = new File(opencvsdk + '/sdk')
//
//
//
// Add dependency into application module:
//
// - Android Studio way:
//   "Open Module Settings" (F4) -> "Dependencies" tab
//
// - or add "project(':opencv')" dependency into app/build.gradle:
//
//   dependencies 
//       implementation fileTree(dir: 'libs', include: ['*.jar'])
//       ...
//       implementation project(':opencv')
//   
//
//
//
// Load OpenCV native library before using:
//
// - avoid using of "OpenCVLoader.initAsync()" approach - it is deprecated
//   It may load library with different version (from OpenCV Android Manager, which is installed separatelly on device)
//
// - use "System.loadLibrary("opencv_java3")" or "OpenCVLoader.initDebug()"
//   TODO: Add accurate API to load OpenCV native library
//
//
//
// Native C++ support (necessary to use OpenCV in native code of application only):
//
// - Use find_package() in app/CMakeLists.txt:
//
//   find_package(OpenCV 3.4 REQUIRED java)
//   ...
//   target_link_libraries(native-lib $OpenCV_LIBRARIES)
//
// - Add "OpenCV_DIR" and enable C++ exceptions/RTTI support via app/build.gradle
//   Documentation about CMake options: https://developer.android.com/ndk/guides/cmake.html
//
//   defaultConfig 
//       ...
//       externalNativeBuild 
//           cmake 
//               cppFlags "-std=c++11 -frtti -fexceptions"
//               arguments "-DOpenCV_DIR=" + opencvsdk + "/sdk/native/jni" // , "-DANDROID_ARM_NEON=TRUE"
//           
//       
//   
//
// - (optional) Limit/filter ABIs to build ('android' scope of 'app/build.gradle'):
//   Useful information: https://developer.android.com/studio/build/gradle-tips.html (Configure separate APKs per ABI)
//
//   splits 
//       abi 
//           enable true
//           reset()
//           include 'armeabi-v7a' // , 'x86', 'x86_64', 'arm64-v8a'
//           universalApk false
//       
//   
//

apply plugin: 'com.android.library'

println "OpenCV: " + project.buildscript.sourceFile

android 
    compileSdkVersion 27
    //buildToolsVersion "27.0.3" // not needed since com.android.tools.build:gradle:3.0.0

    defaultConfig 
        minSdkVersion 14
        targetSdkVersion 21
    

    buildTypes 
        release 
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        
    
    compileOptions 
        sourceCompatibility JavaVersion.VERSION_1_6
        targetCompatibility JavaVersion.VERSION_1_6
    

    sourceSets 
        main 
            jniLibs.srcDirs = ['native/libs']
            java.srcDirs = ['java/src']
            aidl.srcDirs = ['java/src']
            res.srcDirs = ['java/res']
            manifest.srcFile 'java/AndroidManifest.xml'
        
    


dependencies 

【讨论】:

【参考方案12】:

由于 OpenCV 的集成是一项艰巨的工作,因此我们将其预先打包并通过 JCenter 在此处发布:https://github.com/quickbirdstudios/opencv-android

只需将其包含在模块的 build.gradle 依赖项部分中

dependencies 
  implementation 'com.quickbirdstudios:opencv:3.4.1'

这在您项目的 build.gradle 存储库部分中

repositories 
  jcenter()

gradle 导入后不会出现 lint 错误,但不要忘记在 MainActivity 中像这样初始化 OpenCV 库

public class MainActivity extends Activity 
    static 
        if (!OpenCVLoader.initDebug())
            Log.d("ERROR", "Unable to load OpenCV");
        else
            Log.d("SUCCESS", "OpenCV loaded");
    
...
...
...
...

【讨论】:

谢谢!我真的不明白 OpenCV 没有官方提供这样的解决方案。 @Malte 我已经分叉了这个 repo,对 java 文件进行了一些更改,并使用我的 repo 中的 jitpack 发布。当我运行时,它说 openCV lib not found。我怎样才能从我的回购中做呢?【参考方案13】:

今天看这个视频,解决我在android studio中实现opencv的问题 https://www.youtube.com/watch?v=psoeNfFAKL8

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review 是的,你是对的

以上是关于如何在使用 Gradle 时使用 opencv?的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio、Gradle、OpenCV 和 NDK

在Android上使用OpenCV

在Android上使用OpenCV

如何使用gradle打jar包

IOS的KMM依赖设置(OpenCV)

如何使用 Gradle 配置 Proguard?