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 }

cocos2d-x由Jni实现Java与C++打电话给对方的更多相关文章

  1. cocos2d 中使用jni C++ 调用 Java 方法

    1.简单数据类型样例 如果我们Java中有这么一个open的静态方法,它没有參数,有一个int的返回值.怎么在C++中调用它呢? package cb.CbCCBLE; public class Cb ...

  2. cocos2d 中使用jni Java 调用 C++ 方法

    1.首先是LoadLibrary cocos2d中的C++代码会编译成一个.so文件.放在安卓文件夹下的libs/armeabi 下,然后java会load进来,这步我们不用做了,由于cocos2d已 ...

  3. Android NDK开发之Jni调用Java对象

    https://my.oschina.net/zhiweiofli/blog/114064 通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instan ...

  4. android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )

    JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...

  5. HAL中通过JNI调用java方法【转】

    转载请注明本文出处:http://www.cnblogs.com/xl19862005 作者:Xandy 由于工作的需要,最近一直在研究HAL.JNI.Java方法之间互调的问题,并做了如下一些记录和 ...

  6. Android JNI之JAVA与C++对象建立对称关联(JNI优化设计,确保JNI调用的稳定性)

    转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5930503.html Android JNI之JAVA与C++对象建立对称关联 1.JAVA对象持有C++对象 ...

  7. Android Studio NDK开发-JNI调用Java方法

    相对于NDK来说SDK里面有更多API可以调用,有时候我们在做NDK开发的时候,需要在JNI直接Java中的方法和变量,比如callback,系统信息等.... 如何在JNI中调用Java方法呢?就需 ...

  8. Android 通过 JNI 访问 Java 字段和方法调用

    在前面的两篇文章中,介绍了 Android 通过 JNI 进行基础类型.字符串和数组的相关操作,并描述了 Java 和 Native 在类型和签名之间的转换关系. 有了之前那些基础,就可以实现 Jav ...

  9. 【详解】JNI(Java Native Interface)(一)

    前言: 一提到JNI,多数编程者会下意识地感受到一种无法言喻的恐惧.它给人的第一感觉就是"难",因为它不是单纯地在JVM环境内操作Java代码,而是跳出虚拟机与其他编程语言进行交互 ...

随机推荐

  1. C#中使用gRPC

    C#中使用gRPC 我的这几篇文章都是使用gRPC的example,不是直接编译example,而是新建一个项目,从添加依赖,编译example代码,执行example.这样做可以为我们创建自己的项目 ...

  2. HP服务器更换主板前后的注意事项

    问题 X86服务器免不了会出现故障,以我们实验室使用的HP服务器为例,已经有几台因为各种故障更换过主板了,更换主板前后有些事情需要我们应该注意或处理, 这里记录如下,其中第二.三点是针对我们所使用的C ...

  3. Android定位功能(二)

    在前文Android定位功能(一)中,已经大致介绍了一下在Android平台中,和定位功能相关的类,并举例获取了位置信息.但是前文是基于Criteria定制了一个标准,通过getBestProvide ...

  4. CentOS 6 安装Oracle11g

    原创作品.从 "深蓝blog" 博客,欢迎转载,请务必注明转载如下源.否则追究其版权责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/ar ...

  5. 自己写shell命令pwd

    思维:(1)得到"."的i节点号,叫n(使用stat) (2)chdir ..(使用chdir) (3)找到inode号为n的节点,得到其文件名称. 反复上述操作直到当前文件夹&q ...

  6. android 项目中设置背景图片

    xml文件设置背景图片中:任意一个控件,button imageView 或layout,在其的xml属性设置中,添加 [XML] view plaincopy android:background= ...

  7. 使用cm-12.0源代码编译twrp

    Select the newest branch available. This step is not necessary with Omni because Omni already includ ...

  8. 【原创】leetCodeOj --- Find Minimum in Rotated Sorted Array II 解题报告

    题目地址: https://oj.leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/ 题目内容: Suppose a sort ...

  9. 【我的书】Unity Shader的书 — 文件夹(2015.12.21更新)

    写在前面 感谢全部点进来看的朋友.没错.我眼下打算写一本关于Unity Shader的书. 出书的目的有以下几个: 总结我接触Unity Shader以来的历程,给其它人一个借鉴.我非常明确学Shad ...

  10. 在Linux上安装Hadoop

    先决条件: Hadoop是用JAVA写的,所以首先要安装Java.在Ubuntu上安装JDK见:http://blog.csdn.net/microfhu/article/details/766739 ...