工作上要接入移动MM的SDK,但是对C++和JAVA的相互调用一点都不了解,自己动手实践一下,先做C++调用JAVA函数的功能,下篇再写JAVA调用C++函数的功能。
网上搜了下觉得这篇文章很好,
http://www.himigame.com/iphone-cocos2dx/725.html
- 1.创建cocos2d-x工程
- 2.eclipse导入刚创建工程的proj.android工程
- 3.新建java 类,实现两个输出提示的函数show1/show2。
- 4.新建jnitojava.cpp文件,其中getTips()函数实现JNI调用第3步在java中实现的函数show1.
- 5.在cocos2dx工程中的调用函数getTips()。
1 ……
2 ……
3.新建java 类,实现两个输出提示的函数show1/show2。
在eclipse工程下,src文件夹,右键点击org.cocos2dx.cpp包->new->class
输入类名javaShow 点击 finish.
在src/org.cocos2dx.cpp/下会有一个javaShow.java文件,双击编辑 代码如下:
javaShow.java
package org.cocos2dx.cpp;
public class JavaShow {
public static JavaShow test = null;
public static Object getInstance(){
if (test == null){
test = new JavaShow();
}
return test;
}
public static void show1(){
System.out.println("CALLED: javashow::show1");
}
public static void show2(String name){
System.out.println("CALLED: javashow:show2: " + name);
}
}
实现了两个函数show1 和show2
4.新建jnitojava.cpp文件,其中getTips()函数实现JNI调用第3步在java中实现的函数show1.
新建两个文件,头文件jnitojava.h、实现文件jnitojava.cpp. 放在目录proj.android\jni\hellocpp下。
jnitojava.h代码如下:
#ifndef __JniToJava_H_
#define __JniToJava_H_
extern "C"
{
void getTips();
void getTips2(const char* name);
}
#endif
jnitojava.cpp代码如下:
#include "jnitojava.h"
#include "cocos2d.h"
#include "platform\android\jni/JniHelper.h"
#include <jni.h>
#define CLASS_NAME "org/cocos2dx/cpp/JavaShow"
using namespace cocos2d;
extern "C"
{
void getTips()//c++通过jni调用java函数show1
{
JniMethodInfo jinfo;
if(JniHelper::getStaticMethodInfo(jinfo,CLASS_NAME,"show1","()V"))
{
jinfo.env->CallStaticVoidMethod(jinfo.classID,jinfo.methodID);
}
}
void getTips2(const char* name)//c++通过jni调用java函数show2
{
JniMethodInfo jinfo;
if(JniHelper::getStaticMethodInfo(jinfo,CLASS_NAME,"show2","(Ljava/lang/String;)V"))
{
jstring jname = jinfo.env->NewStringUTF(name);
jinfo.env->CallStaticVoidMethod(jinfo.classID,jinfo.methodID,jname);
}
}
}
5.在cocos2dx工程中的调用函数。
新创建的工程,helloworld.cpp头部加入
#include "HelloWorldScene.h"
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
#include <android/log.h>
#include "../proj.android/jni/hellocpp/jnitojava.h"
#endif
修改按钮返回函数
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
getTips();//调用函数,函数里通过jni调用java函数
getTips2("printf this string");
#endif
eclipse->run as ->android application 连接真机运行
出来一个经典的hello world界面,每点击一次右下角的关闭按钮,eclipse的logcat窗口就会打印
CALLED: javashow::show1
CALLED: javashow:show2: printf this string
C++调用JAVA完成
明天再了解下JAVA调用C++
本文详细介绍了一种在Cocos2d-x项目中实现C++调用Java的方法。具体步骤包括创建Cocos2d-x工程、实现Java类、编写JNI调用代码等,并通过实例演示了如何从C++中调用Java的静态方法。

被折叠的 条评论
为什么被折叠?



