JNI c代碼回調java空方法

首先在class JNI中定義

public class JNI {
    static {
        System.loadLibrary("hello");//需要加載的so文件的名稱
    }
    //傳遞兩個int類型的變量給C
    public native void callbackvoidmethod();
    public void helloFromJava(){
        System.out.println("hello from Java");
    }
}
然後在c代碼中寫

JNIEXPORT void JNICALL Java_com_example_feisou_a02_1helloworld_JNI_callbackvoidmethod
        (JNIEnv *env, jobject thiz){
    jclass claz = (*env)->FindClass(env, "com/example/feisou/a02_helloworld/JNI");
    jmethodID methodID = (*env)->GetMethodID(env, claz, "helloFromJava", "()V");
    (*env)->CallVoidMethod(env, thiz, methodID);


}
1、獲取字節碼對象 jclass (*FindClass)(JNIEnv*, const char*);
2、獲取Method對象 jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
3、通過字節碼對象創建一個Object(即是claz)
4、通過對象調用方法
Android Studio的文件在工程目錄app\build\intermediates\classes中,使用javap -s com.example.feisou.a02_helloworld.JNI可以生成簽名


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章