建立工程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的事情了。基本沒遇到大坑了。