1. 程式人生 > >chromium JNI呼叫之java呼叫c++程式碼

chromium JNI呼叫之java呼叫c++程式碼

這篇blog我們主要來介紹下chromium下content目錄下的jni呼叫.

JNI呼叫主要分兩塊:

1.     Java調cpp(cc)

2.     Cc(cpp)調Java

現在,我們這裡介紹Java調cc.

要實現java呼叫cc檔案,要準備三個檔案:cc檔案、cc檔案對應的標頭檔案.h和java檔案。

具體的寫法,看下文的介紹吧。

在content目錄下,我們可以參考ShellManager.java和shell_manager.cc檔案。

1)    Java檔案

ShellManager.java中,有方法:

privatestatic native void nativeInit(Object shellManagerInstance);

2)    cc檔案:

shell_manager.cc檔案,對應上面的方法是:

staticvoid Init(JNIEnv* env, jclass clazz, jobject obj)方法。

注意:static關鍵字不必對應,java是static,cc中未必是static,這個要看方法的具體使用;形參中前兩個是JNIEnv* env,jclass clazz這個是固定的;之後的引數是根據java檔案中的方法中的形參對應而來。關於java檔案中資料的型別跟cc檔案中資料型別的對應關係,可以上網搜搜。

3)    cc檔案:

在shell_manager.cc檔案中,一個比較重要的方法是:

RegisterShellManager

如果,要想自己做一個cc檔案,此方法必須要有。

在匯入的標頭檔案中,

      #include"base/android/jni_android.h"

#include"base/android/jni_string.h"

#include"jni/ShellManager_jni.h"

是很重要。

注意:jni/ShellManager_jni.h檔案是在out目錄下,在執行gyp檔案自動生成的。前面的ShellManager是java檔案的名字。

如果,要想自己做一個cc檔案,此三個標頭檔案要匯入,並且修改第三個標頭檔案,ShellManager部分用java的名字代替。

4)    修改檔案shell_jni_register.cc

該檔案中,匯入的檔案有個:

#include"content/goblin/android/shell_manager.h"

     如果,要是自己定義cc檔案的話,要寫這個檔案的標頭檔案,並且如上面匯入。

     .h檔案的寫法可以參考shell_manager.h檔案的寫法。

     之後,在kShellRegistrationMethods陣列中,參考內容:

     { "ShellManager",content::RegisterShellManager },

     第一個引數是java的名字,ShellManager.java

     第二個引數是shell_manager.cc檔案的方法:RegisterShellManager,之前我們提到過。

    如果要自己定義cc檔案,則也要如上匯入。

5)    修改gyp檔案。我們這裡修改的是content_shell.gypi檔案。

修改位置一: 在target_name 是content_shell_jni_headers,中放置了ShellManger.java的路徑。

如果要自己實現的話,也要仿照如此放置java檔案。

修改位置二:在target_name是content_shell_lib的source中,匯入了檔案shell_manager.cc和shell_manager.h。

如果要自己實現的話,也要仿照如此放置cc檔案。