要解決的問題:
Android代碼調(diào)用 優(yōu)秀的C++代碼,高效的實(shí)現(xiàn)需要的功能。
整體的思路:
1. 完成 自己的Android代碼;
2. 將c++代碼生成 .so;
3. 將.so 庫(kù)放在Android 的libs文件夾當(dāng)中;
4. Android代碼當(dāng)中定義待調(diào)用接口函數(shù),并導(dǎo)入庫(kù)。
具體的操作:
1. 完成 自己的Android代碼;
這1部份就是Android開發(fā)的事情了,不是我的重點(diǎn)和善于,相信是你的善于;
2. 將c++代碼生成 .so;
我假定你是有你需要的功能的c++代碼的。(沒有你還移植個(gè)屁啊O(∩_∩)O哈哈~)
2.1 c++代碼修改
這1部份的工作,3個(gè)重要的點(diǎn):
1,頭文件加入: #include
2,加入 extern“c”,處理C++代碼;
3,輸出的接口函數(shù)命名1定要規(guī)范;Java_包_類_方法 (JNIEnv *, jclass,);
例子:
#include
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jlong JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeCreateObject
(JNIEnv *, jclass, jstring, jint);
#ifdef __cplusplus
}
#endif
這里只是頭文件,具體的實(shí)現(xiàn)你可以在CPP文件里面實(shí)現(xiàn);
2.2 Android.mk 文件的修改
將剛才的源文件加進(jìn)去,依賴的庫(kù)加進(jìn)去。(1般來講還需要Application.mk的,但是幾近都是1樣的,復(fù)制過去就好)
例子:
Android.mk 文件(很像Makefile文件)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#OPENCV_LIB_TYPE:=SHARED
include ../../../opencvsdk/native/jni/OpenCV.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)
Application.mk 文件
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android⑻
2.3 ndk-build編譯
將以上4個(gè)文件放在jni文件夾里面,然后準(zhǔn)備開始編譯.so文件。
只要你安裝的版本在r7 以上就能夠不需要其他的插件了。非常的方便,配置好環(huán)境變量,從CMD進(jìn)入到j(luò)ni 文件或是它的上1級(jí)文件夾,履行ndk-build命令,開始編譯。
更加詳細(xì)的參考:http://blog.csdn.net/ikerpeng/article/details/42643223
3. 將.so 庫(kù)放在Android 的libs文件夾當(dāng)中;
將剛才編譯生成 的lib文件下下面的.so文件拷貝出來,連帶所在的文件夾(這個(gè)是必須的),放到你的Android工程里面的libs文件夾;
4. Android代碼當(dāng)中定義待調(diào)用接口函數(shù),并導(dǎo)入庫(kù)。
定義好接口函數(shù),這個(gè)函數(shù)名1定和C++中的最后那個(gè)名字1樣,然后 System.loadLibrary();導(dǎo)入;
就能夠在Android的代碼當(dāng)中代用這個(gè)函數(shù)了。
例子:
public class PedDetectionNative {
static {
System.loadLibrary("ped_detection");
}
public static native boolean ped(byte[] yuv);
}
接下來你就能夠在Android的代碼里面使用 ped()這個(gè)函數(shù)了。
轉(zhuǎn)載標(biāo)明出處:http://blog.csdn.net/ikerpeng/article/details/45393223
以上完成
iker Cross
2015年 4月 30日
下一篇 純c語言寫的拼圖游戲