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代码,而是跳出虚拟机与其他编程语言进行交互 ...
随机推荐
- 2012天津C题
行李箱上的密码锁大家都知道, 现在给我们长度为n(n<=1000)的两个密码串,每次可以转动连续的1->3个字符1格,问最少多少次可以使得第一个串变成第二个串 经历了搜索,贪心,的思路后, ...
- 使用psftp.exe
使用psftp.exe 点击打开psftp.exe,出现如下图的命令窗口.
- HibernateReview Day1 - Introduction
Hibernate已经学过去大概有半个月了,然后默默的忘掉了……所谓Practice makes perfect. 我尽力重新拾起来. 1.什么是ORM 在介绍Hibernate之前,我们先学习下OR ...
- ClientID 获取服务端控件,客户端id的方法
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...
- android一些面试题目
1.ListView怎么提高滑动效率 2.说下你做过项目的包的构架,(联网,解析,activity,database) 重点 3.载入大量图片怎么做(包含小图和查看大图) 怎么降低一次跟server的 ...
- Jquery 时间格式化
var TimeObjectUtil;/** * @title 时间工具类 * @note 本类一律违规验证返回false * @author {boonyachengdu@gmail.com} * ...
- HP服务器更换主板前后的注意事项
问题 X86服务器免不了会出现故障,以我们实验室使用的HP服务器为例,已经有几台因为各种故障更换过主板了,更换主板前后有些事情需要我们应该注意或处理, 这里记录如下,其中第二.三点是针对我们所使用的C ...
- Python3.4 邮件(包含附件与中国)
import smtplib import os from email.mime.text import MIMEText from email.mime.multipart import MIMEM ...
- Windows 8 应用开发 - 磁贴
原文:Windows 8 应用开发 - 磁贴 我们开发的应用在Win8 界面中会以磁贴形式展现,默认情况下磁贴会显示应用图标,即项目工程中的Logo.png图片文件.开发人员可按应用的需要使 ...
- Java线程Dump分析工具--jstack(转)
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使 ...