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檔案。