JNI搭建:native方法註冊或NDK中的方法對應

關於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


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