C代碼回調java方法

C代碼回調java方法

  • ① 找到字節碼對象
    • //jclass (FindClass)(JNIEnv, const char*);
    • //第二個參數 要回調的java方法所在的類的路徑 "com/itheima/callbackjava/JNI"
  • ② 通過字節碼對象找到方法對象
    • //jmethodID (GetMethodID)(JNIEnv, jclass, const char, const char);
    • 第二個參數 字節碼對象 第三個參數 要反射調用的java方法名 第四個參數 要反射調用的java方法簽名
    • javap -s 要獲取方法簽名的類的全類名 項目/bin/classes 運行javap
  • ③ 通過字節碼創建 java對象(可選) 如果本地方法和要回調的java方法在同一個類裏可以直接用 jni傳過來的java對象 調用創建的Method
    • jobject obj =(*env)->AllocObject(env,claz);
    • 當回調的方法跟本地方法不在一個類裏 需要通過剛創建的字節碼對象手動創建一個java對象
    • 再通過這個對象來回調java的方法
    • 需要注意的是 如果創建的是一個activity對象 回調的方法還包含上下文 這個方法行不通!!!回報空指針異常
  • ④ 反射調用java方法
    • //void (CallVoidMethod)(JNIEnv, jobject, jmethodID, ...);
    • 第二個參數 調用java方法的對象 第三個參數 要調用的jmethodID對象 可選的參數 調用方法時接收的參數
發佈了40 篇原創文章 · 獲贊 17 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章