JNI基本使用步驟
1.java定義本地方法native,通常情況下應(yīng)單獨(dú)定一個(gè)類(lèi)存放所有native方法恩伺。
2.項(xiàng)目的根目錄下添加jni目錄。
3.把光標(biāo)移到本地native方法,通過(guò)NDK工具生成【包名+native類(lèi)名.h】文件择卦。
4.在jni目錄下編寫(xiě)android.mk文件蝇庭,聲明并在jni目錄下添加需要引用的.so和.c或.cpp文件醉鳖。注意編寫(xiě)的.c或.cpp文件中的方法名需要同NDK生成的.h文件中的方法名一致。
5.在創(chuàng)建application.mk文件哮内,作用是聲明所有支持的平臺(tái)盗棵。
6.把光標(biāo)移到本地native方法,通過(guò)NDK工具編譯生成.so文件(.so經(jīng)編譯后生成在libs文件夾下)
7.使用本地native方法前需要先動(dòng)態(tài)加載庫(kù)System.loadLibrary("XXX")北发。
1.定義native方法
public class TestApi {
private TestApi(){
}
private static TestApi testApi = new TestApi();
public static TestApi getTestApi(){
return testApi;
}
public static native int getTest();
}
2.創(chuàng)建jni目錄
可以手動(dòng)創(chuàng)建jni目錄以及目錄下的文件纹因,也可以右鍵項(xiàng)目,android Tools—>Add Native Support 自動(dòng)生成琳拨。
3.NDK自動(dòng)生成【包名+native類(lèi)名.h】文件
#include <jni.h>
#ifndef _Included_com_hsr_hspad_vision_net_VisionApi
#define _Included_com_hsr_hspad_vision_net_VisionApi
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jint JNICALL Java_com_example_pkgtestmain_TestApi_getTest
(JNIEnv *, jclass);
4.在jni目錄下編寫(xiě)android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := testsdkapi //聲明的名字
LOCAL_SRC_FILES := libtestsdk.so //引用的.so名字
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := TestPkg //在libs文件夾下會(huì)生成對(duì)應(yīng)的libTestPkg.so
LOCAL_SRC_FILES := TestPkg.cpp //cpp文件名
LOCAL_SHARED_LIBRARIES += testsdkapi //與上面聲明的名字一樣
LOCAL_LDLIBS = -llog
include $(BUILD_SHARED_LIBRARY)
5.編寫(xiě)application.mk文件
ARM_ABI := armeabi //支持armeabi平臺(tái)
6.動(dòng)態(tài)加載.so庫(kù)
public class MainpkgActivity extends FragmentActivity {
static {
try {
System.loadLibrary("testapi"); //libs文件夾下的.so庫(kù)去掉前綴lib和后綴.so瞭恰,大小寫(xiě)有區(qū)別
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainpkg);
//調(diào)用本地native方法
TestApi.getTestApi().getTest();
}
}
注意以上代碼只代表通用的使用方法,各步驟代碼沒(méi)有關(guān)聯(lián)性狱庇,不能實(shí)際運(yùn)行惊畏。