Android Studio NDK-獲取JavaVM

Android Studio NDK-獲取JavaVM
Android Studio NDK-獲取JavaVM

『JavaVM』指『Java虛擬機』, 壹進程『Process』壹『JavaVM』, 冚辦爛線程『Thread』共用壹『JavaVM』.

係原生代碼獲得『Java虛擬機』, 通過『JNI_OnLoad ()』函式, 載入共享庫『System.loadLibrary(“lib”);』,載入『LIB.SO』 會自動調用『JNI_OnLoad ()』. 將javaVm以全域變量儲存.

緩存JavaVM接口指針

JavaVM javaVm;
jint JNI_OnLoad (JavaVM* vm, void* reserved){

javaVm = vm;

return JNI_VERSION_1_4;

}

加入『jni.h』頭文檔聲明『Java原生接口』

#include <jni.h>

『JNI』指『Java Native Interface』『Java原生接口』,實現『JavaVM』同『Native』通信.『Java代碼』同『原生代碼』調用.

『JNIEnv』指向當前『線程局部數據』, 『線程局部數據』內含『原生函式指針列表』. 壹線程『thread』壹『JNIEnv』. 唔得跨線程『thread』傳遞彼此獨立,

事因『POSIX線程』唔屬于『JAVA』平臺, 導致『JAVA虛擬機』冇發識別『POSIX線程』,  為咗訪問『JAVA虛擬機』,『POSIX線程』線程先附係『JAVA虛擬機』再行.

  1. 將線程附著係JAVA虛擬機,獲得屬於本線程JNIEnv接口. 返回『零』成功,非『零』為錯誤碼
    if(javaVm->AttachCurrentThread(&env,NULL) == 0)
  1. 係JAVA虛擬機分離綫程.返回『零』成功,非『零』為錯誤碼
    if(javaVm->DetachCurrentThread() == 0)