如何使用Gradle构build工具在android studio中使用opencv?

我想用Android Studio来开发一个使用Gradle构build工具的应用程序。 我不能在build.gradle上插入OpenCV build.gradle和库。 我的.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? 谢谢。

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

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

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

  2. 转到您有SDK“\ OpenCV-2.4.8-android-sdk \ sdk”的位置,在这里您将findjava文件夹,将其重命名为opencv

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

  4. 现在使用以下内容在opencv目录中创build一个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'] } } } 
  5. 在您的应用程序主目录中编辑您的settings.gradle文件并添加以下行:

     include ':libraries:opencv' 
  6. 同步您的项目与Gradle,它应该看起来像这样

    屏幕1

  7. 右键点击你的项目,然后点击Open Module Settings然后从左侧列表中select模块,点击你的应用程序的模块,点击依赖项标签,然后点击+button添加一个新的模块依赖项。

    在这里输入图像描述

  8. selectModule dependency 。 它将打开一个对话框,列出可供select的模块; select“:库:opencv”。

    在这里输入图像描述

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

    在这里输入图像描述

  10. 点击OK。 现在一切都完成了,去OpenCV享受。

根据OpenCV文档( 1 ),以下使用OpenCVpipe理器的步骤是使用OpenCV进行生产运行的推荐方法。 但是,OpenCVpipe理器( 2 )是来自Google Play商店的额外安装。 所以,如果你喜欢一个自包含的apk(不使用OpenCVpipe理器),或者目前处于开发/testing阶段,我build议在https://stackoverflow.com/a/27421494/1180117回答。;

推荐使用OpenCVpipe理器在Android Studio中使用OpenCV的步骤。

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

作为最后一步,在您的Activity类中,添加下面的代码片段。

  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方法上收到成功callback后才能进行OpenCV调用 。 在运行期间,如果尚未安装OpenCVpipe理器,系统将提示您从Play商店安装OpenCVpipe理器。 在开发过程中,如果您无法访问商店或者在开发环境中,请在下载的OpenCV sdk归档文件的apk文件夹中使用相应的OpenCVpipe理器apk。

优点

  • 应用程序的大小减less了大约40 MB(也考虑升级)。
  • OpenCVpipe理器会为您的硬件安装优化的二进制文件,从而有助于提高速度。
  • 升级到OpenCVpipe理器可能会将您的应用程序从OpenCV中的错误中拯救出来。
  • 不同的应用程序可以共享相同的OpenCV库。

缺点

  • 最终用户体验 – 可能不喜欢您的应用程序的安装提示。

如果你不想使用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文件夹拉起来,然后将该zip文件重命名为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'] } } } 

在您的项目根目录settings.gradle文件中改变它看起来像这样:

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

在你的项目根目录 – >项目名称 – > build.gradle文件的依赖部分添加这一行:

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

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

重build,你应该能够导入并开始在你的项目中使用OpenCV。

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

我知道这是否有点黑客,但我想我会张贴无论如何。

 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 } } 

这是为我工作:)

我发布了一篇关于如何使用Android Studio和Gradle构build包含OpenCV的Android NDK应用程序的新文章。 更多的信息可以在这里看到,我总结了两种方法:

(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

更多的信息可以在这里看到

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

只要做到以下几点:

1)按照以下的答案开始:“您可以在Android Studio中轻松完成此操作,按照以下步骤将OpenCV作为库添加到您的项目中。 由TGMCians。

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

 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)* .so文件位于目录"armeabi", "armeabi-v7a", "mips", "x86"可以在(默认的OpenCV-location)下find: ..\OpenCV-2.4.11-android-sdk\OpenCV-android-sdk\sdk\native\libs (TGMCians的答案中的第9步)。

享受,如果这有帮助,请给予积极的声誉。 我需要50回答直接回答(19左):)

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

  • 下载OpenCV并提取存档
  • 在Android Studio中打开您的应用程序项目
  • 进入文件 – >新build – >导入模块…
  • 在你之前提取的目录中selectsdk/java
  • 模块名称设置为opencv
  • 下一步,然后完成
  • 在导入的OpenCV模块下打开build.gradle并将compileSdkVersionbuildToolsVersion更新为您机器上的版本
  • compile project(':opencv')到您的应用程序build.gradle

     dependencies { ... compile project(':opencv') } 
  • 按下与Gradle文件同步项目

AndroidManifest.xml文件中需要以下权限和function,否则将出现以下对话框

“看来你的设备不支持摄像头(或被locking),应用程序将被closures”

  <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"/> 

我已经将OpenCV SDK中的Java项目导入到Android Studio gradle项目中,并在https://github.com/ctodobom/OpenCV-3.1.0-Android

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

OpenCV,Android Studio 1.4.1,gradle-experimental插件0.2.1

没有其他的答案帮助我。 这是为我工作的。 我正在使用opencv的tutorial-1样本,但是我会在我的项目中使用NDK,所以我使用的Gradle实验插件与Gradle插件的结构不同。

应该安装Android工作室,通过Android SDKpipe理器安装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 

创build你的gradle构build文件…

首先是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" } } === 

然后告诉教程示例将库标记为以及在何处find它。

 cat > $OPENCV_SDK/samples/tutorial-1-camerapreview/settings.gradle <<'===' include ':openCVLibrary2411' project(':openCVLibrary2411').projectDir = new File('../../sdk/java') === 

创build教程的构build文件。

 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') } === 

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

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

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

 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浏览到此目录并打开项目。

使用以下命令在命令行上构buildtutoral:

 ./gradlew assembleDebug 

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