现在的位置: 首页 > 综合 > 正文

chromium JNI调用之java调用c++代码

2017年01月18日 ⁄ 综合 ⁄ 共 1524字 ⁄ 字号 评论关闭

这篇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文件。

抱歉!评论已关闭.