如何使用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作为库。
-
在项目主目录下创build一个
libraries
文件夹。 例如,如果您的项目是OpenCVExamples
,您将创build一个OpenCVExamples/libraries
文件夹。 -
转到您有SDK“\ OpenCV-2.4.8-android-sdk \ sdk”的位置,在这里您将find
java
文件夹,将其重命名为opencv
。 -
现在将完整的opencv目录从SDK复制到刚创build的库文件夹中。
-
现在使用以下内容在
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'] } } }
-
在您的应用程序主目录中编辑您的settings.gradle文件并添加以下行:
include ':libraries:opencv'
-
同步您的项目与Gradle,它应该看起来像这样
-
右键点击你的项目,然后点击
Open Module Settings
然后从左侧列表中select模块,点击你的应用程序的模块,点击依赖项标签,然后点击+button添加一个新的模块依赖项。 -
select
Module dependency
。 它将打开一个对话框,列出可供select的模块; select“:库:opencv”。 -
在
/app/src/main/
location中创build一个jniLibs
文件夹,并从OpenCV SDK的jniLibs
复制带有* .so文件(armeabi,armeabi-v7a,mips,x86)的所有文件夹。 -
点击OK。 现在一切都完成了,去OpenCV享受。
根据OpenCV文档( 1 ),以下使用OpenCVpipe理器的步骤是使用OpenCV进行生产运行的推荐方法。 但是,OpenCVpipe理器( 2 )是来自Google Play商店的额外安装。 所以,如果你喜欢一个自包含的apk(不使用OpenCVpipe理器),或者目前处于开发/testing阶段,我build议在https://stackoverflow.com/a/27421494/1180117回答。;
推荐使用OpenCVpipe理器在Android Studio中使用OpenCV的步骤。
- 从OpenCV.org下载OpenCV Android sdk( 3 )
- 从
File -> Import Module
,在解压缩的opencv归档中selectsdk/java
文件夹。 - 更新导入的OpenCV模块下的
build.gradle
,更新4个字段以匹配项目的build.gradle
a)compileSdkVersion b)buildToolsVersion c)minSdkVersion和4)targetSdkVersion。 - 按
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 – >导入模块…
- 在你之前提取的目录中select
sdk/java
- 将模块名称设置为
opencv
- 按下一步,然后完成
- 在导入的OpenCV模块下打开build.gradle并将
compileSdkVersion
和buildToolsVersion
更新为您机器上的版本 -
将
compile project(':opencv')
到您的应用程序build.gradledependencies { ... 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