cocos2d-x由Jni实现Java与C++打电话给对方。
cocos2d-x与开发商提供一个类JniHelper,提供java与c++之间的互jni解。
笔者所开发的“史上最坑爹的游戏”项目中使用到了JNI。为此专门定义了一个类JniUtil.
头文件JniUtil.h中须要引入例如以下两个.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){ |
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" ); //本人在此传递的參数是字符串 |
08 |
CCLog( "jni->%s/callJni:此函数不存在" , jniClass); |
10 |
CCLog( "jni->%s/callJni:此函数存在" , jniClass); |
11 |
jstring jdata = minfo.env->NewStringUTF(data); |
13 |
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,jdata); |
15 |
CCLog( "jni-java函数运行完成" ); |
Java的实现:
1 |
public static void callJni(final String data) { |
2 |
mHandler.postDelayed( new Runnable() { |
通过Java代码调用C++
1 |
//在java类中定义一个方法。用于提供给java调用C++ |
2 |
private static native void xxxxxx( int value); |
在JniUtil.cpp中作例如以下实现:
3 |
//方法名与java类中的包名+方法名,下面划线连接 |
4 |
void Java_com_xxxx_xxxx_xxxx_xxxx(JNIEnv* env, jobject thiz, jint a) |
6 |
//这里java调用nativePaySuccess(1);,这里就会被调用。jint a = 1 |
- cocos2d 中使用jni C++ 调用 Java 方法
1.简单数据类型样例 如果我们Java中有这么一个open的静态方法,它没有參数,有一个int的返回值.怎么在C++中调用它呢? package cb.CbCCBLE; public class Cb ...
- cocos2d 中使用jni Java 调用 C++ 方法
1.首先是LoadLibrary cocos2d中的C++代码会编译成一个.so文件.放在安卓文件夹下的libs/armeabi 下,然后java会load进来,这步我们不用做了,由于cocos2d已 ...
- Android NDK开发之Jni调用Java对象
https://my.oschina.net/zhiweiofli/blog/114064 通过使用合适的JNI函数,你可以创建Java对象,get.set 静态(static)和 实例(instan ...
- android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )
JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...
- HAL中通过JNI调用java方法【转】
转载请注明本文出处:http://www.cnblogs.com/xl19862005 作者:Xandy 由于工作的需要,最近一直在研究HAL.JNI.Java方法之间互调的问题,并做了如下一些记录和 ...
- Android JNI之JAVA与C++对象建立对称关联(JNI优化设计,确保JNI调用的稳定性)
转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5930503.html Android JNI之JAVA与C++对象建立对称关联 1.JAVA对象持有C++对象 ...
- Android Studio NDK开发-JNI调用Java方法
相对于NDK来说SDK里面有更多API可以调用,有时候我们在做NDK开发的时候,需要在JNI直接Java中的方法和变量,比如callback,系统信息等.... 如何在JNI中调用Java方法呢?就需 ...
- Android 通过 JNI 访问 Java 字段和方法调用
在前面的两篇文章中,介绍了 Android 通过 JNI 进行基础类型.字符串和数组的相关操作,并描述了 Java 和 Native 在类型和签名之间的转换关系. 有了之前那些基础,就可以实现 Jav ...
- 【详解】JNI(Java Native Interface)(一)
前言: 一提到JNI,多数编程者会下意识地感受到一种无法言喻的恐惧.它给人的第一感觉就是"难",因为它不是单纯地在JVM环境内操作Java代码,而是跳出虚拟机与其他编程语言进行交互 ...
随机推荐
- spoj Balanced Numbers(数位dp)
一个数字是Balanced Numbers,当且仅当组成这个数字的数,奇数出现偶数次,偶数出现奇数次 一下子就相到了三进制状压,数组开小了,一直wa,都不报re, 使用记忆化搜索,dp[i][s] 表 ...
- Android开发之Buidler模式初探结合AlertDialog.Builder解说
什么是Buidler模式呢?就是将一个复杂对象的构建与它的表示分离,使得相同的构建过程能够创建不同的表示.Builder模式是一步一步创建一个复杂的对象,它同意用户能够仅仅通过指定复杂对象 ...
- An Overview of Complex Event Processing
An Overview of Complex Event Processing 复杂事件处理技术概览(一) 翻译前言:我在理解复杂事件处理(CEP)方面一直有这样的困惑--为什么这种计算模式是有效的, ...
- 使用Xamarin在Visual Studio中开发Android应用
原文:使用Xamarin在Visual Studio中开发Android应用 本文使用的环境是Windows 8 Visual Studio 2012.2 1.下载Xamarin http://xam ...
- NDK/JNI学习--进口hello-jniproject
上一篇文章,简单的设置NDK开发环境,本文通过导入C:\android-ndk-r9d\samples\hello-jni(NDK自带example)来疏通真个环境. 打开Eclipse IDE.指定 ...
- VMware vSphere 服务器虚拟化之十八桌面虚拟化之安装View Composer服务器
VMware vSphere 服务器虚拟化之十八桌面虚拟化之安装View Composer服务器 View Compose服务可安装在管理虚拟机的vC ...
- Cocos2d-x项目总结中的一些遇到的问题
这几天在用Cocos2D-X尝试着做一个小游戏,当然不是创新,仅仅是单纯的模仿,就是为了将自己这段时间学到的技术应用于实践中. 在这个过程中.遇到了一些问题,在此特做一些总结,以免以后遇到类似的问题. ...
- Cocos2d-X在SwitchControl使用
SwitchControl控制类中的一个开关的发挥了作用似在现实生活中开关 因为控制相对简单,我没有做过多的解释.直接在代码 首先在project文件夹下的Resource文件夹中加入三张图片 在Sw ...
- 在C#环境中动态调用IronPython脚本(一)
本文讲述用C#调用Ironpython运行环境,解析并运行动态pyhton脚本.这种情况应用在那些需要滞后规定行为的场合,例如,动态计算项(计算引擎),用户可以自定义计算内容.计算公式等. 本文的代码 ...
- Android SDK 和 Eclipse ADT 离线安装 教程
因为google 被限制,就是FQ后,下载的速度依旧非常慢,让人非常崩溃啊,所以这里就分享一下离线安装android SDK 和eclipse ADT 离线安装方法. 安装之前首先已经确保java s ...