android项目在不装opencvmanager.apk情况下,直接使用
2015-11-18 18:21
519 查看
前一段时间公司项目要用到OpenCV的东西做图像处理,但是一般都要安装OpenCV的apk包才能正常使用(估计是要导入那些os库)
但是老板认为自己的apk安装之后,还要装别的apk,显得很菜,要求不安装OpenCV的apk
没有办法,只能安装老板说的来做.(只是想吐槽一下)自己以前在上大学的时候接触过一点点的C++.
在网上找了很多资料,OpenCV使用C代码来写的,源代码也下载下来了(文章最后会贴上OpenCV源代码的下载)
因为都是C的源码,,于是就想到,可以用NDK来调用.
说干就干吧,解压OpenCV的源码后,可以看到
1.
幸好里面有个sample,,估计就是例子,打开之后
2.
看了很久,这个face-detection里面就是直接调用源代码,不需要安装apk,也调用到JNI了.
于是乎............哈哈
自己本来对MK文件也不是特别的熟悉,,就拿这个项目的MK文件直接修改了,(face-detection/jni/Android.mk),里面Android.mk源文件
然后在自己的项目里面配置NDK,,具体配置NDK的方法的话,网上有很多,,根据自己的需要配置NDK版本
然后在自己的工程下面新建一个jni的文件夹
把这4个文件全部都考进去
修改Android。mk文件
源码文件就是OpenCV包里面的sdk文件的目录
然后clean一下项目,,自动回生成jar包.然后使用跟以前一样.
注意注意:在加载OpenCV的时候不一样,看代码
就是加载不一样,加载过程,在文档上说最好在onresume里面加载,好了就可以尽情的享用了.
最后,不好意思opencv源码文件太大,传不上来,大家可以百度去下载.
但是老板认为自己的apk安装之后,还要装别的apk,显得很菜,要求不安装OpenCV的apk
没有办法,只能安装老板说的来做.(只是想吐槽一下)自己以前在上大学的时候接触过一点点的C++.
在网上找了很多资料,OpenCV使用C代码来写的,源代码也下载下来了(文章最后会贴上OpenCV源代码的下载)
因为都是C的源码,,于是就想到,可以用NDK来调用.
说干就干吧,解压OpenCV的源码后,可以看到
1.
幸好里面有个sample,,估计就是例子,打开之后
2.
看了很久,这个face-detection里面就是直接调用源代码,不需要安装apk,也调用到JNI了.
于是乎............哈哈
自己本来对MK文件也不是特别的熟悉,,就拿这个项目的MK文件直接修改了,(face-detection/jni/Android.mk),里面Android.mk源文件
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) #OPENCV_CAMERA_MODULES:=off #OPENCV_INSTALL_MODULES:=off >>>>>如果这个设置为off产生很多os库,,设置为on只产生一个os库 #OPENCV_LIB_TYPE:=SHARED include ../../sdk/native/jni/OpenCV.mk >>>>这里是OpenCV源码C的路径里面的Mk文件 LOCAL_SRC_FILES := DetectionBasedTracker_jni.cpp LOCAL_C_INCLUDES += $(LOCAL_PATH) LOCAL_LDLIBS += -llog -ldl LOCAL_MODULE := detection_based_tracker include $(BUILD_SHARED_LIBRARY)
然后在自己的项目里面配置NDK,,具体配置NDK的方法的话,网上有很多,,根据自己的需要配置NDK版本
然后在自己的工程下面新建一个jni的文件夹
把这4个文件全部都考进去
修改Android。mk文件
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) OPENCV_CAMERA_MODULES:=off OPENCV_INSTALL_MODULES:=on OPENCV_LIB_TYPE:=SHARED #OPENCV_LIB_TYPE:=STATIC include ../sdk/native/jni/OpenCV.mk =====>>>>>这个是关联源码的文件,我是吧OpenCV的sdk文件复制到了我的项目同一个目录下面,,,这个看情况修改 LOCAL_SRC_FILES := DetectionBasedTracker_jni.cpp LOCAL_C_INCLUDES += $(LOCAL_PATH) LOCAL_LDLIBS += -llog -ldl LOCAL_MODULE := detection_based_tracker include $(BUILD_SHARED_LIBRARY)
源码文件就是OpenCV包里面的sdk文件的目录
然后clean一下项目,,自动回生成jar包.然后使用跟以前一样.
注意注意:在加载OpenCV的时候不一样,看代码
<span style="font-size:12px;">@Override protected void onResume() { super.onResume(); // OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_10,this, mLoaderCallback); // System.out.println(1); // // System.load("/system/lib/libnative_camera_r4.4.0.so"); // System.load("/system/lib/libopencv_dynamicuda.so"); // System.load("/system/lib/libopencv_info.so"); // System.load("/system/lib/libopencv_java.so"); // System.load("/system/lib/libOpenCVEngine_jni.so"); // System.load("/system/lib/libOpenCVEngine.so"); if(OpenCVLoader.initDebug()){ handler.sendEmptyMessage(HandlerWhatLib.LOAD_OPENCV_FINISH); } }</span>
就是加载不一样,加载过程,在文档上说最好在onresume里面加载,好了就可以尽情的享用了.
最后,不好意思opencv源码文件太大,传不上来,大家可以百度去下载.
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories