博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d-x由Jni实现Java与C++打电话给对方
阅读量:5331 次
发布时间:2019-06-14

本文共 1543 字,大约阅读时间需要 5 分钟。

cocos2d-x由Jni实现Java与C++打电话给对方。

cocos2d-x与开发商提供一个类JniHelper,提供java与c++之间的互jni解。

笔者所开发的“史上最坑爹的游戏”项目中使用到了JNI。为此专门定义了一个类JniUtil.

头文件JniUtil.h中须要引入例如以下两个.h文件:

1 #include <jni.h>
2 #include "platform/android/jni/JniHelper.h"

通过C++调用Java

声明一个函数。专门用于处理从C++调用Java的方法,全部调用Java的地方都走这个函数。

这样能够降低jni代码。通过Json来传递详细的调用指令。在java那边通过switch来进行区分,然后再通过java去调用详细的方法。

1 static void callJni(const char * data);

在JniUtil.cpp文件里例如以下实现:

01 void JniUtil::callJni(const char *data){
02      
03     JniMethodInfo minfo;//定义Jni函数信息结构体
04     //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
05     const char * jniClass = "com/xxxx/xxxx/xxxxxxxx";//这里写你所要调用的java代码的类名
06     bool isHave = JniHelper::getStaticMethodInfo(minfo,jniClass,"callJni","(Ljava/lang/String;)V");//本人在此传递的參数是字符串
07     if (!isHave) {
08         CCLog("jni->%s/callJni:此函数不存在", jniClass);
09     }else{
10         CCLog("jni->%s/callJni:此函数存在", jniClass);
11         jstring jdata = minfo.env->NewStringUTF(data);
12         //调用此函数
13         minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,jdata);
14     }
15     CCLog("jni-java函数运行完成");
16 }

Java的实现:

1 public static void callJni(final String data) {
2         mHandler.postDelayed(new Runnable() {
3             @Override
4             public void run() {
5                 //这里处理C++传递过来的数据
6             }
7             }, 100);
8     }

通过Java代码调用C++

1 //在java类中定义一个方法。用于提供给java调用C++
2     private static native void xxxxxx(int value);

在JniUtil.cpp中作例如以下实现:

1 extern "C"
2 {
3     //方法名与java类中的包名+方法名,下面划线连接
4     void Java_com_xxxx_xxxx_xxxx_xxxx(JNIEnv*  env, jobject thiz, jint a)
5     {
6         //这里java调用nativePaySuccess(1);,这里就会被调用。jint a = 1
7          
8     }
9 }

转载于:https://www.cnblogs.com/blfshiye/p/4728386.html

你可能感兴趣的文章
函数之匿名函数
查看>>
shell习题第16题:查用户
查看>>
Redis常用命令
查看>>
2018.11.06 bzoj1040: [ZJOI2008]骑士(树形dp)
查看>>
2019.02.15 bzoj5210: 最大连通子块和(链分治+ddp)
查看>>
redis cluster 集群资料
查看>>
微软职位内部推荐-Sr. SE - Office incubation
查看>>
微软职位内部推荐-SOFTWARE ENGINEER II
查看>>
centos系统python2.7更新到3.5
查看>>
C#类与结构体究竟谁快——各种函数调用模式速度评测
查看>>
我到底要选择一种什么样的生活方式,度过这一辈子呢:人生自由与职业发展方向(下)...
查看>>
poj 题目分类
查看>>
windows 安装yaml支持和pytest支持等
查看>>
读书笔记:季羡林关于如何做研究学问的心得
查看>>
面向对象的优点
查看>>
套接口和I/O通信
查看>>
阿里巴巴面试之利用两个int值实现读写锁
查看>>
浅谈性能测试
查看>>
Winform 菜单和工具栏控件
查看>>
CDH版本大数据集群下搭建的Hue详细启动步骤(图文详解)
查看>>