java語言

當前位置 /首頁/計算機/java語言/列表

JAVA JNI函式的註冊過程介紹

我們在java中呼叫Native code的時候,一般是通過JNI來實現的,我們只需要在java類中載入本地庫檔案,並宣告native方法,然後在需要呼叫的地方呼叫即可,至於java中native方法的具體實現,全部交給了Native層。我們要在java中正確地呼叫到原生代碼中對應函式的前提是什麼呢?答案就是通過一定的機制建立java中native方法和原生代碼中函式的一一對應關係,那麼這種機制是什麼呢?就是JNI函式的註冊機制。

JAVA JNI函式的註冊過程介紹

JNI函式的註冊有兩種方式,一種是靜態註冊方式,另一種是動態註冊方式。下面我們來分別介紹這兩實現方式。

  一.靜態註冊。

1.實現原理:根據函式名來建立java方法和JNI函式間的一一對應關係。

2.實現過程:

①編寫java程式碼;

②編譯java程式碼,生成s檔案;

③用過javah指令,利用生成的s檔案生成JNI的.h檔案;

④生成後的JNI標頭檔案中包含了Java函式在JNI層的宣告;

3.弊端:

①書寫很不方便,因為JNI層函式的名字必須遵循特定的'格式,且名字特別長;

②會導致程式設計師的工作量很大,因為必須為所有聲明瞭native函式的java類編寫JNI標頭檔案;

③程式執行效率低,因為初次呼叫native函式時需要根據根據函式名在JNI層中搜索對應的本地函式,然後建立對應關係,這個過程比較耗時。

  二.動態註冊。

1.實現原理:直接告訴native函式其在JNI中對應函式的指標;

2.實現過程:

①利用結構體JNINativeMethod儲存Java Native函式和JNI函式的對應關係;

②在一個JNINativeMethod陣列中儲存所有native函式和JNI函式的對應關係;

③在Java中通過Library載入完JNI動態庫之後,呼叫JNI_OnLoad函式,開始動態註冊;

④JNI_OnLoad中會呼叫AndroidRuntime::registerNativeMethods函式進行函式註冊;

⑤AndroidRuntime::registerNativeMethods中最終呼叫jniRegisterNativeMethods完成註冊。

3.優點:克服了靜態註冊的弊端。

TAG標籤:函式 JAVA JNI #