Android Studio 2.2 让你5分钟配置好 OpenCV for Android(java层和native层都可以使用)
2016-11-03 14:04
603 查看
原创不易,转载请附上原文链接。
背景介绍
最近因为项目需要,要在Android Studio上使用OpenCV,在网上查看了一下,都是使用Android.mk这种ndk-build的形式来配置环境的,步骤繁琐不说,关键是没有好好利用Android Studio 2.2的新功能,即没有代码提示和补全,及代码调试功能。Android Studio 2.2之后采用CMake来编译ndk,并且支持在Android Studio上面直接编写,编译和调试代码(很屌有木有!)也就是说你不用再在另外的编辑器下面编写好C++的代码再拷过来,然后再调试了~话不多说,现在开始讲Android Studio 2.2下面配置OpenCV4Android。文章结构
1. 前期准备工作
2. 在java层使用OpenCV的环境配置
3. 在native层使用OpenCV的环境配置
4. 在java层和native层混合使用OpenCV的环境配置
步骤
1. 前期准备工作
文章开头已经说了这是在Android Studio 2.2上面的配置,所以请确保你的Android Studio的版本已经升级到2.2及以上。接着就要先下载ndk,在File->Settings->Appearance & Behavior -> System Settings-> Android SDK下下载相应的ndk。如图:(如果没有下载CMake和LLDB也一起下载)
下载好的ndk会放置在你本地Android SDK的Sdk目录下一个叫ndk-bundle的文件夹下。
之后前往的OpenCV官网下载相应的OpenCV for Android版本,我下载的OpenCV 2.4.11的,不过没关系。这样,前期工作就准备好了。
2. 在java层使用OpenCV的环境配置
首先,第一步当然是新建一个项目。Android Studio 2.2因为支持C++编译环境,所以在一开始那里会有个选项Include C++ Support,使用JNI的可以把这个选项勾上。虽然这里我们不用使用JNI,但是后面会使用到,所以现在还是先勾上,如图:之后的就一路Next就好。
之后,我们把刚才下载的OpenCV for Android目录下的java文件夹作为module导入进来。路径是:E:\OpenCV-android-sdk\sdk(前面的E:\OpenCV-android-sdk换成自己相应电脑的路径)
具体步骤如图:
之后后面的不用修改,直接到最后Finish就行。
然后,一般会出现错误,这个时候,只需要将OpenCV这个module的build.gradle的版本信息改成跟app module的build.gradle的版本信息一样就行.
接着将OpenCV作为app module的Dependency导入进来就行,点击File->Project Structure,然后按照如图的顺序点击就行:
然后将OpenCV这个Moudle点击了就行。然后就可以在Java层使用OpenCV了,如图,随便写个Mat都会有代码提示:
至此,OpenCV在Java层的配置就已经完成了。
3. 在native层使用OpenCV的环境配置
(在一步是我们实验室另一个成员弄出来的)OpenCV在Native层的配置更加简单。因为前面已经新建了项目,且已经Include C++ Support,先来看一下Android视图下这个项目的结构:
如图,项目下多了一个cpp目录,而且帮我们自动生成了一个native-lib.cpp的文件,除此之外,在最下面还有个CMakeLists.txt,接触过CMake的朋友应该都知道这个文件的出现基本就代表说这个项目是用CMake构建的了。实际上也是,点击开项目的app moudle下的build.gradle文件,会发现这么一段代码:
externalNativeBuild { cmake { path "CMakeLists.txt" } }
这里其实就指定了用cmake方式来编译JNI层。而这也是谷歌支持的方式。下面就教大家怎么在Native配置OpenCV环境。首先点开CMakeLists.txt文件,在其中加入以下几句代码:
set(OpenCV_DIR E:/OpenCV-android-sdk/sdk/native/jni) find_package(OpenCV REQUIRED) target_link_libraries(${OpenCV_LIBS})
如图
然后在app下的build.gradle的android{defaultConfig{}}下加入如下代码:
ndk{ abiFilters 'armeabi-v7a' }
如图:
然后点击Sync Now就可以啦。
现在,在Native层中编写OpenCV也有会提示。如图:
以后,就可以在Native层写OpenCV的代码,关键是有代码补全提示还有同时可以调试(这部分有时间后面再讲,关于Native层代码书写调试的一些技巧),不用像以前那样每次修改都得ndk-clean和ndk-build。
4. 在java层和native层混合使用OpenCV的环境配置
要同时在java层和native层混合使用OpenCV,其实只要在java层load一个libopencv.so库就可以了。目前我还没尝试用CMakeLists去完成这个过程,我是用的gradle。首先,在Project视图下,在app/src/main目录下建立一个libs文件夹,然后再在其目录下建立子目录,对应上一步中你指定的编译平台。因为上一步中我们选的是armeabi-v7a,所以我们就只建立了armeabi-v7a目录,然后前往本地的OpenCV for Android 的libs目录下选择对应的平台,我的是E:\OpenCV-android-sdk\sdk\native\libs\armeabi-v7a,然后将里面的libopencv_java.so库文件烤到我们刚才建立的文件夹下,如图:接着,再在app module的build.gradle的android{defaultConfig{}}加入如下代码:
sourceSets.main{ jniLibs.srcDir 'src/main/libs' //set .so files directory to libs jni.srcDirs = [] //disable automatic ndk-build call }
如图:
然后Sync Now,就可以在Android视图下看到app目录下多了一个jniLibs目录。
之后,再在你想要使用jni的类中load opencv_java这个库就行了。如图:
至此,所有步骤已经完成~
相关文章推荐
- android开发 android studio配置opencv for android sdk,使用opencv的java函数
- Android studio2.2配置opencv for android(CMake方式)
- Android Studio 使用 java 通过 OpenCV4Android 实现 Hello OpenCV
- 【Android】Android Studio使用OpenCV的配置方法
- Android开发——Android Studio中配置及使用OpenCV示例
- Android Studio配置JavaCPP Presets for OpenCV
- Android开发——Android Studio中配置及使用OpenCV示例
- Windows 平台上的使用 Java 语言实现 appium 自动化程序 for Android(完整版)
- 在Android系统使用socket在Java层和native之间数据通信
- Java开发平台中使用Opencv如何配置?
- 学习使用Delphi for android 调用Java类库
- [BAT][JAVA]定时任务之-Quartz使用篇(通过这个配置可以知道在做Quartz的时候需要的jar文件/Cron表达式使用语法/常用Cron表达式)
- OpenCV4Android——No implementation found for native Lorg/opencv/core/Mat;.n_Mat ()J
- 在Android中使用native程序(非Java)来广播intent
- 在OpenCV for Android 2.4.5中使用SURF(nonfree module)
- 在Android中使用JNI调用Opencv本地代码 配置方式 边缘检测 范例代码
- JAVA读取classess下的.properties配置文件封装类,linux和windows上都可以使用
- 1. opencv for android开发环境的配置
- ImageMagick安装配置 for java项目 (使用jmagick)
- 在Mac上安装编译OpenCV (for Cpp / Java / Android / Python)