发布网友 发布时间:2022-05-11 07:37
共1个回答
热心网友 时间:2023-10-08 22:47
建立工程project,准备好NDK环境,opencv环境相信聪明的你一定能搞好。这里只讲解对接到android所遇到的坑及跳出坑的方法,废话少说,下面我们开始。
Native方法:
Object b就是传给C++的bitmap对象
由此生成的.h文件
.cpp文件
这里只讲实现Java_com_example_nativeMothed_NativeMothed_nativeGetImage方法,其他类似
使用AndroidBitmapInfo来存储从java层传递过来的Bitmap对象
这句作用是拿到Java层传递过来的Bitmap对象并传递给AndroidBitmapInfo对象存储
这句作用是锁定bitmap对象,让C++环境能直接操作Bitmap对象
这句作用是解锁Bitmap对象,一般对bitmap对象的操作是放在上锁和解锁之间
上面基本是写好的C++源代码直接粘贴,没有遇到上面坑
真正遇到坑是在Application.mk、Android.mk的配置上
先说Application.mk
APP_STL :=gnustl_static 是对标准库的支持(algorithm)
没有这句就会报下面这种错误
APP_CPPFLAGS :=-frtti -fexceptions 是C++代码的编译选项。在android-ndk-1.5_r1版本中,此变量只适用于C++,但是现在可以同时适用于C和C++。
APP_ABI :=armeabi-v7a 在默认情况下,NDK会使用'armeabi' ABI 来生成二进制机器码,这是基于ARMv5TE的浮点运算CPU,这可以通过使用此变量来选项不同的ABI(Application BinaryInterface).
APP_PLATFORM :=android-8 版本平台
下面是Android.mk
首先是
OPENCV_LIB_TYPE:=STATIC
没有这句程序在导入动态链接库的时候就会一直包libopencv_java.so not found (就是这里被卡了好一段时间,坑)
其次是:
Include E:/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mk
之前一直不知道这个有什么用,但是没有就会报Opencv的内置函数不能解析的错误
最后:
LOCAL_LDLIBS+= -ljnigraphics -lGLESv1_CM
这里报错误最多,摸不着头脑,这里只贴出报的错误
没有-ljnigraphics就报AndroidBitmapInfo对象及方法找不到
没有-lGLESv1_CM就报collect2.exe: error: ld returned1 exit status,貌似是静态连接错误
跨过这些坑后,就一片光明了,接下来的是android的事情了。基本没遇到大坑了。