chromium JNI调用之java调用c++代码
来源:互联网 发布:广电网络怎么投诉电话 编辑:程序博客网 时间:2024/06/14 10:04
这篇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文件。
- chromium JNI调用之java调用c++代码
- 安卓jni调用之C代码中调用Java代码
- 使用JNI,让java调用c代码
- jni 使用java 调用C代码
- jni-使用c代码调用java文件
- jni 调用java代码
- Java调用C JNI
- jni c调用java
- JNI java c 调用
- JNI C调用Java
- linux jni 之 java 调用c c++
- JNI之------C调用java接口
- JNI之c调用java全面解析
- JNI调用c/c++代码
- JNI(二)、 Java 代码调用 C代码
- Jni调用,cocos2d.x调用java代码
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- 【LeetCode】根据前序和中序遍历建树 && 根据中序遍历和后续遍历建树
- POJ 2406 Power Strings 求连续重复字串(kmp)
- Check菜单
- arc宏定义
- 解决Axis2 服务器端与客户端 复合参数传递问题
- chromium JNI调用之java调用c++代码
- MachineLearning(Hsuan-Tien Lin)第十讲
- poj_2965 递归+枚举
- error the @annotation pointcut expression is only supported at Java 5 compliance level or above
- shell programming tutorial
- [黑马程序员]整理文件名
- 淘宝商家怎么安全刷信誉?怎么安全不降权?
- windows上安装bugzilla
- 10.函数的声明和定义、多文件开发、#include