關於JNI的搭建,有兩種方式,一種是傳統的在C/C++模塊入口中提供native方法註冊,實例代碼如下:
view plain/*
* JNI registration.
*/
static JNINativeMethod gNativeMethods[] = {
{ "nativeMethod1", "(I)V", (void*) method1 },
{ "nativeMethod2", "(IIII)V", (void*) method2},
{ "nativeMethod3", "(I)V", (void*) method3 },
};
EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
JNIEnv* env = NULL;
if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
return -1;
}
jniRegisterNativeMethods(env, "xxx/xxx/xxx/xxx",
gNativeMethods, NELEM(gNativeMethods));
return JNI_VERSION_1_4;
}
這裏除了要包含jni.h以外,還需要包含JNIHelp.h文件,這個文件提供了jniRegisterNativeMethods方法和MELEM定義
第二種是NDK提供的方式,就是不用顯式的註冊,只需要按照java類名在命名native方法,比如在java類com.android.Foo中聲明瞭一個native void foo()的方法,在C/C++模塊中只需要實現void Java_com_android_Foo_foo(JNIEnv* env, jobject thiz)的方法就可以了,這裏有個注意的地方,就是java類名不能出現下劃線“_”,否則與這種命名方式發生衝突,在運行時會找不到實現而異常
轉載:http://blog.csdn.net/bao_jinyu/article/details/7610462