Android NDk 開發簡易教程

轉載標明出處:http://blog.csdn.net/ikerpeng/article/details/45393223

要解決的問題:

Android代碼調用 優秀的C++代碼,高效的實現需要的功能。


總體的思路:


1. 完成 自己的Android代碼;

2. 將c++代碼生成 .so;

3. 將.so 庫放在Android 的libs文件夾當中;

4. Android代碼當中定義待調用接口函數,並導入庫。


具體的操作:

1. 完成 自己的Android代碼;

   這一部分就是Android開發的事情了,不是我的重點和擅長,相信是你的擅長;

2. 將c++代碼生成 .so;

  我假設你是有你需要的功能的c++代碼的。(沒有你還移植個屁啊O(∩_∩)O哈哈~)

  2.1  c++代碼修改

    這一部分的工作,三個重要的點:

  1,頭文件加入: #include <jni.h>

  2,加入 extern“c”,處理C++代碼;

  3,輸出的接口函數命名一定要規範;Java_包_類_方法 (JNIEnv *, jclass,);

  例子:

#include <jni.h>

#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT jlong JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeCreateObject
  (JNIEnv *, jclass, jstring, jint);


#ifdef __cplusplus
}
#endif

這裏只是頭文件,具體的實現你可以在CPP文件裏面實現;

  2.2 Android.mk 文件的修改

  將剛纔的源文件加進去,依賴的庫加進去。(一般來說還需要Application.mk的,但是幾乎都是一樣的,複製過去就好)

 例子:

 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-8


  2.3 ndk-build編譯

     將以上4個文件放在jni文件夾裏面,然後準備開始編譯.so文件。

     只要你安裝的版本在r7 以上就可以不需要其他的插件了。非常的方便,配置好環境變量,從CMD進入到jni 文件或是它的上一級文件夾,執行ndk-build命令,開始編譯。

     更加詳細的參考:http://blog.csdn.net/ikerpeng/article/details/42643223

3. 將.so 庫放在Android 的libs文件夾當中;

   將剛纔編譯生成 的lib文件下下面的.so文件拷貝出來,連帶所在的文件夾(這個是必須的),放到你的Android工程裏面的libs文件夾;

4. Android代碼當中定義待調用接口函數,並導入庫。

  定義好接口函數,這個函數名一定和C++中的最後那個名字一樣,然後 System.loadLibrary();導入;

  就可以在Android的代碼當中代用這個函數了。

例子:

public class PedDetectionNative {
static {
System.loadLibrary("ped_detection");
}
public static native boolean ped(byte[] yuv);
}

接下來你就可以在Android的代碼裏面使用 ped()這個函數了。

轉載標明出處:http://blog.csdn.net/ikerpeng/article/details/45393223


以上完成

iker Cross

2015年 4月 30日


發佈了107 篇原創文章 · 獲贊 122 · 訪問量 104萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章