cocos2d-x 调用java_cocos2d-x中通过Jni实现Java与C++的互相调用
cocos2d-x中通过Jni实现Java与C++的互相调用。
cocos2d-x用开发者提供了一个类JniHelper,提供了java与c++之间互调的jni解决方案。
笔者所开发的“史上最坑爹的游戏”项目中使用到了JNI,为此专门定义了一个类JniUtil.
头文件JniUtil.h中需要引入如下两个.h文件:
#include
#include "platform/android/jni/JniHelper.h"
通过C++调用Java
声明一个函数,专门用于处理从C++调用Java的方法,所有调用Java的地方都走这个函数。
这样可以减少jni代码,通过Json来传递具体的调用指令,在java那边通过switch来进行区分,然后再通过java去调用具体的方法。
static void callJni(const char * data);
在JniUtil.cpp文件中如下实现:
void JniUtil::callJni(const char *data){
JniMethodInfo minfo;//定义Jni函数信息结构体
//getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
const char * jniClass = "com/xxxx/xxxx/xxxxxxxx";//这里写你所要调用的java代码的类名
bool isHave = JniHelper::getStaticMethodInfo(minfo,jniClass,"callJni","(Ljava/lang/String;)V");//本人在此传递的参数是字符串
if (!isHave) {
CCLog("jni->%s/callJni:此函数不存在", jniClass);
}else{
CCLog("jni->%s/callJni:此函数存在", jniClass);
jstring jdata = minfo.env->NewStringUTF(data);
//调用此函数
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,jdata);
}
CCLog("jni-java函数执行完毕");
}
Java的实现:
public static void callJni(final String data) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
//这里处理C++传递过来的数据
}
}, 100);
}
通过Java代码调用C++
//在java类中定义一个方法,用于提供给java调用C++
private static native void xxxxxx(int value);
在JniUtil.cpp中作如下实现:
extern "C"
{
//方法名与java类中的包名+方法名,以下划线连接
void Java_com_xxxx_xxxx_xxxx_xxxx(JNIEnv* env, jobject thiz, jint a)
{
//这里java调用nativePaySuccess(1);,这里就会被调用。jint a = 1
}
}
cocos2d-x 调用java_cocos2d-x中通过Jni实现Java与C++的互相调用相关推荐
- jni c java互相调用_通过JNI实现Java和C++的相互调用
评论 # re: 通过JNI实现Java和C++的相互调用 2008-07-29 14:14 Always BaNg. 不错,把字符转换也一并讲了吧,比如UTF-8的处理,USC-2与MBCS转换等. ...
- java 调用c++ jni_Java中使用JNI调用C++
1,JNI是什么? JNI即Java Native Interface(Java本地接口),是一个协议,主要作用为:实现Java调用c/c++代码(类库),或者C/C++调用Java代码 2,主要实现 ...
- Android JNI实现Java与C/C++互相调用,以及so库的生成和调用(JNI方式调用美图秀秀so)
前言 关于Android Studio如何继承JNI开发环境,请阅读上一篇博文 Android CMake集成JNI开发环境本篇博文将结合实例分别讲解Android中Java如何调用C/C++的方法, ...
- 10.4.4 使用ctypes调用kernel32.dll中的函数
10.4.4 使用ctypes调用kernel32.dll中的函数 2007-10-17 14:41 孙广磊 人民邮电出版社 字号:T | T 综合评级: 想读(5) 在读(0) 已读(6) ...
- Java基于VB通过Jacob调用AutoCAD接口
Java 以跨平台深受大家喜欢,而由于它跨平台的目的,需要运行在java虚拟机上工作,使得它和本地机器各种内部联系变得很少,约束了它直接掉本地API的功能.本例采用VB代码生成调用AutoCAD接口的 ...
- 外汇汇率接口 java_基于java的货币汇率接口调用代码实例
基于java的货币汇率接口调用代码实例 基于JAVA 的货币汇率接口调用代码实例 代码描述:基于JAVA 的货币汇率接口调用代码实例 代码平台:聚合数据 import java.io.Buffered ...
- java 调用cpp_java jni 调用cpp文件中的方法 | 学步园
这里说下最近修改nutch的源码碰到的调用cpp文件中的方法. 刚刚开始的时候,想直接在fetch.java中直接写jni接口.后来发现这样会留下不好的编程习惯.自己动手在fetch下写一个类.Hel ...
- java调用jni接口,Java 中通过jni接口调用native code
[ Java语言本身是通过Java的虚拟机解释执行的,因此对于Java中调用本地动态链接库的问题便提上了日程,为何会存在这样的需求呢?因为Java本身的机制导致一些要求高效率 在上上篇中已经介绍 ...
- 如何通过JNI在Java中调用C库函数
使用Java语言进行开发时,可能由于处理速度.硬件控制或者复用既有的C/C++模块等方面的原因,需要Java层与使用C/C++编写的应用.模块或库进行交互,共同完成某些任务.在两者之间充当连接桥梁作用 ...
最新文章
- Codeforces Round #648 (Div. 2)题解 A-D
- python类中init_Python类中的__init__() 和 self 的解析
- 什么是面向对象_什么是面向对象?新手程序员必掌握的技能
- 作业调度C语言编写,【作业调度方案】 (C语言代码)
- 图像处理-RGB24转YUV420遇到的坑以及执行效率对比
- 一起自学SLAM算法:写在前面
- Java是如何存储元素的(3)—Map集合存储数据原理(为什么HashMap集合的key部分的特点是无序,不可重复)
- (多元)偏正态分布、正态分布、对数正态分布的随机数的产生(R语言)
- 英语翻译作业(十二)
- 以太网的网络电缆线被拔出怎么解决
- 用python实现分段函数_python:集成分段函数
- Pytorch:NLP 迁移学习、NLP中的标准数据集、NLP中的常用预训练模型、加载和使用预训练模型、huggingface的transfomers微调脚本文件
- 及时止损真的正确吗?
- 环境监测历史数据(AQI历史数据)
- Python - Requests库下载图片
- 韩老师——数据结构与算法—单链表的生成及增删改查操作和常见关于链表的面试题java代码实现
- 微信公众号关于百度地图和腾讯地图本地定位api的调用(js)
- Whistle 抓包简易教程
- 有史以来关于Flash Player的最详细说明
- SQL SERVER 获得一个月有多少天 的函数例子
热门文章
- 致命错误: 在类路径或引导类路径中找不到程序包 java.lang_如何提升店铺动态评分 需要提升可以找我...
- 牛年春节与年俗插画素材,年味十足
- C4D电商促销素材模板,让你的工作效率更加高效​!
- href标签带上了localhont地址怎么删除_如何找回删除的微信好友?
- webstorm代码行数统计_来测试下 2019 你一共写了多少行代码?
- cuSPARSE库:(二)静态库的支持
- Linux开机启动过程(4):切换到64位模式-长模式(直到内核解压缩之前)
- Linux网络协议栈:一个TCP链接的耗时
- Docker资源汇总
- 一个简单的状态机设计