Cocos2d-x的跨平台性很强大,但是偶尔也需要平台的原生API结合。

C++在Win32平台下简单的很,C++可以直接用MFC或者调用Win32API。

Ios在XCode下直接就能C++和OC混编。

而Android又一次悲剧了,C++既不是Android的原生语言,也没有IDE可以混编。。。

我们只好通过jni来搞。

Cocos2d-x 给我们提供了JniHelper类(良心!)。头文件 #include "platform/android/jni/JniHelper.h"。通过这个类我们可以很简单的调用Java代码的类方法,这里引用一下Cocos2d-x官方文档:

最重要的两个方法:

getStaticMethodInfo、getMethodInfo

getStaticMethodInfo

getStaticMethodInfo调用Java静态方法的方法:

getStaticMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode)

  • 第一个参数为JniMethodInfo,为一个容器类,表示当前调用的方法

  • 第二个参数为调用Java方法类的全名

  • 第三个参数为调用java的方法名,也就是参数为方法的参数类型

java与Jni对应的参数类型如下:

ava类型 对应的签名
boolean Z
byte B
char C
short S
int I
long J
float F
double D
void V
Object Ljava/lang/String
Array Ljava/lang/String
  • 第四个参数为返回类型
getMethodInfo

getMethodInfo类似与第一个函数,只是对应非静态函数;此函数主要用于获取Java定义的类非静态函数是否存在,返回bool;

JniMethodInfo

此类型主要用户保存类结构体,可以通过JniHelper类的getStaticMethodInfo函数实例化JniMethodInfo对象,从而使用实例的env属性调用CallStaticVoidMethod,CallVoidMethod,CallStaticIntMethod等函数进行对保存的类结构调用函数;

示例代码:

JniMethodInfo t;
bool isHave = JniHelper::getStaticMethodInfo(t,
"com/weibo/test/WeiboHelper", //需要调用的Java文件
"toast",//调用的方法名
"()V");//参数

文档就这些。。有点不够用,所以我就是来补充的。。。

到这里只是引用了目标方法,调用静态方法需要通过 CallStatic**Method(classID, methodID) 函数,其中 “**” 可以是Int等基本类型、Object、Void。

调用非静态方法就有对应的Call**Method(classID, methodID) 函数。

最后是示例:

 JniMethodInfo minfo;
bool isHave = JniHelper::getStaticMethodInfo(minfo,
"com/red/test/Test",
"cppTest",
"()V"); if (isHave)
{
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
}

cocos2d-x笔记5: 通过jni实现C++调用Java的更多相关文章

  1. Android JNI c/c++调用java 无需新建虚拟机

    近期通过研究SDL源码 得出android JNI  c/c++调用java 无需新建虚拟机: 具体步骤如下 第一步获得:两个参数 JNIEnv和jclass void Java_com_Test_A ...

  2. JNI C反射调用java方法

    前面记录了调用C的学习笔记,现在来记录一下C反射调用Java的笔记.JNI开发学习之调用C方法 Android开发中调用一个类中没有公开的方法,可以进行反射调用,而JNI开发中C调用java的方法也是 ...

  3. JNI中C调用Java方法

    背景需求 我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT v ...

  4. Music Studio项目心得--JNI实现C++调用JAVA

    这个项目是我參加内蒙古挑战杯的比赛项目,因为时间关系,我没时间实现OpenOMR开源项目由JAVA全然向C++的转换,经过我半个多月的尝试,我将OpenOMR中的1/3的代码改写成C++,只是非常快我 ...

  5. Android与JNI(三) ---- c++调用java(转载)

    源码下载:JniDemo JNI就是Java Native Interface, 即可以实现Java调用本地库, 也可以实现C/C++调用Java代码, 从而实现了两种语言的互通, 可以让我们更加灵活 ...

  6. Android JNI中C调用Java方法

    背景需求 我们需要在JNI的C代码调用Java代码.实现原理:使用JNI提供的反射借口来反射得到Java方法,进行调用. JNI关键方法讲解. 1. 在同一个类中,调用其他方法 JNIEXPORT v ...

  7. JNI由浅入深_7_c调用Java方法一

    1.在Java中声明方法 <span style="font-size:14px;">/** * javah -encoding utf-8 -jni com.exam ...

  8. jni中调用java方法获取当前apk的签名文件md5值

    相应的java方法: void getsign(Context context) throws Exception { PackageInfo localPackageInfo = context.g ...

  9. JNI学习笔记_C调用Java

    一.笔记 1.C调用Java中的方法,参考jni.pdf pg97可以参考博文:http://blog.csdn.net/lhzjj/article/details/26470999步骤: a. 创建 ...

随机推荐

  1. textLayout_1.0.0.595.swz

    使用ai制作的矢量素材,导出到flash里面.生成swf时.有的时候会多一个textLayout_1.0.0.595.swz的文件. 这会导致导出的swf无法加载使用.会显示不出来. 解决办法是: 检 ...

  2. (原创)speex与wav格式音频文件的互相转换

    我们的司信项目又有了新的需求,就是要做会议室.然而需求却很纠结,要继续按照原来发语音消息那样的形式来实现这个会议的功能,还要实现语音播放的计时,暂停,语音的拼接,还要绘制频谱图等等. 如果是wav,m ...

  3. 一个卡片式的ViewPager,带你玩转ViewPager的PageTransformer属性!

    ViewPager的基本用法不必多说,这都很简单,我们可以在ViewPager中加载一个ImageView,也可以加载一个Fragment,这都是目前非常常见的用法.那么我今天说的是ViewPager ...

  4. Android_layout_note

    LinearLayout线程布局 LinearLayout属性 android:orientation表示线性布局的方向 vertical: 垂直.从上往下 horizontal: 水平.从左往右 a ...

  5. 正则表达式 和 junit测试

    需要知道一些常规的正则表达式语句,然后可以仿照规则写出一下正则表达式语句.然后是关于junit测试. 知道了一个之前看过的文档,然后有功夫就看一下那个文档就可以,或者后面找时间搜索一下. 正则表达式是 ...

  6. xml_03

    1.xml 2.对于XML文档的约束   |-DTD      <!DOCTYPE 根元素 [       <!ELEMENT 元素名 (xx)>       <!ATTLIS ...

  7. 如何在已安装vs2010的基础上安装sql2008

    以前老受到别人写的这类东西的帮助,所以这次决定自己试下,第一次发这种,写得不好莫怪.       涉略sql2008一个多星期了.怎么说呢?Transact-SQL的编程虽然不如C++,java等高级 ...

  8. MVC小系列(二十一)【带扩展名的路由可能失效】

    mvc3之后:如果路由带上扩展名,比如这样: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRout ...

  9. mysql查询缓存打开、设置、参数查询、性能变量意思

    http://blog.sina.com.cn/s/blog_75ad10100101by7j.html http://www.cnblogs.com/zemliu/archive/2013/08/0 ...

  10. Nagios-配置版

    1  概念(简介) Nagios是插件式的结构,它本身没有任何监控功能,所有的监控都是通过插件进行的,因此其是高度模块化和富于弹性的.Nagios监控的对象可分为两类:主机和服务.主机通常指的是物理主 ...