cocos2dx 调用java,cocos2dx中利用xcode 调用java中的函数

1.

先把cocos2dx根目录中的

/Users/zhaoshun/cocos2dx/cocos2d-2.0-x-2.0.4/cocos2dx/platform/android 目录

拷贝到 xcode项目的

工程根目录/libs/cocos2dx/platform 目录下

2.

在xcode工程中

文件开头加入 预编译

//使用预编译,对当前平台为Android时才会导入如下头文件

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

#include

#include "platform/android/jni/JniHelper.h"

#include

。。。。。。代码

#endif

3.

在cocos2dx方法中 调用java方法

比如

void HelloWorld::menuCloseCallback(CCObject* pSender)

{

静态函数示例1.无参数,无返回值

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台

JniMethodInfo minfo;//定义Jni函数信息结构体

//getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数

bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/example/testGame/testGame","testFun", "()V");

if (!isHave) {

CCLog("jni:此函数不存在");

}else{

CCLog("jni:此函数存在");

//调用此函数

minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);

}

CCLog("jni-java函数执行完毕");

#endif

}

函数的签名可以使用如下命令获取

javap -s 包名 类名 可以显示函数的签名 到bin的classes目录

4. JniHelper.h文件 讲解

此文件在 cocos2dx跟目录/cocos2dx/cocos2dx/platform/android/jni/JniHelper.h

内容

#ifndef __ANDROID_JNI_HELPER_H__

#define __ANDROID_JNI_HELPER_H__

#include

#include

#include "platform/CCPlatformMacros.h"

NS_CC_BEGIN

typedef struct JniMethodInfo_

{

JNIEnv * env;

jclass classID;

jmethodID methodID;

} JniMethodInfo;

class CC_DLL JniHelper

{

public:

static JavaVM* getJavaVM();

static void setJavaVM(JavaVM *javaVM);

static const char* getExternalAssetPath();

static void setExternalAssetPath(const char* externalAssetPath);

static jclass getClassID(const char *className, JNIEnv *env=0);

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

static bool getMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode);

static std::string jstring2string(jstring str);

private:

static JavaVM *m_psJavaVM;

static std::string m_externalAssetPath;

};

NS_CC_END

#endif // __ANDROID_JNI_HELPER_H__

// 静态函数示例1.无参数,无返回值

public static void testFun() {

Log.e("Himi", "静态函数示例1.无参数,无返回值");

}

// 静态函数示例2.有参数,无返回值

public static void testFunWithInt(int _int) {

Log.e("Himi", "静态函数示例1.有参数,无返回值;传入的参数int=" + _int);

}

// 静态函数示例3.有参数,有返回值

public static int testFunWithIntAndRtn(int _int) {

Log.e("Himi", "静态函数示例1.有参数,有返回值;传入的参数int=" + _int);

return _int+1000;

}

// 静态函数示例4.有参数,有返回值(String类型)

public static String testFunWithStringAndRtn(int _int) {

Log.e("Himi", "静态函数示例4.有参数,有返回值(String类型);int=" + _int);

return "yes,return 'String' is OK --by Himi";

}

//---- 函数示例之非静态函数调用

//(先获取个对象)

public static Activity actInstance;//定义单例

public static Object rtnActivity() {

return actInstance;

}

//使用此对象进行调用非静态函数

public void nostaticFun() {

Log.e("Himi", "no static Function is OK - By Himi");

}

静态函数示例1.无参数,无返回值

//#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台

// JniMethodInfo minfo;//定义Jni函数信息结构体

// //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数

// bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/example/testGame/testGame","testFun", "()V");

//

// if (!isHave) {

// CCLog("jni:此函数不存在");

// }else{

// CCLog("jni:此函数存在");

// //调用此函数

// minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);

// }

// CCLog("jni-java函数执行完毕");

//#endif

静态函数示例2.有参数,无返回值

//#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台

// JniMethodInfo minfo;//定义Jni函数信息结构体

// //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数

// bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/example/testGame/testGame","testFunWithInt", "(I)V");

//

// if (!isHave) {

// CCLog("jni:此函数不存在");

// }else{

// CCLog("jni:此函数存在");

// //调用此函数 第三个参数为 传入的值

// minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,888);

// }

// CCLog("jni-java函数执行完毕");

//#endif

// //静态函数示例3.有参数,有返回值--------------------------------$$$$$$$--------------------------------

//#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台

// JniMethodInfo minfo;//定义Jni函数信息结构体

// //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数

//

// bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/example/testGame/testGame","testFunWithIntAndRtn","(I)I");

// jint _int;

// if (!isHave) {

// CCLog("jni:此函数不存在");

// }else{

// CCLog("jni:此函数存在");

// //调用此函数

// _int = minfo.env->CallStaticIntMethod(minfo.classID, minfo.methodID,823);

//

// //尝试jint是否能正常接收返回的int值

// JniMethodInfo minfo_ty;

// bool isHave = JniHelper::getStaticMethodInfo(minfo_ty, "com/example/testGame/testGame", "testFunWithInt", "(I)V");

// if (isHave) {

// minfo_ty.env->CallStaticVoidMethod(minfo_ty.classID, minfo_ty.methodID,_int);

// }

//

// }

// CCLog("jni-java函数执行完毕");

//#endif

//#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台

// JniMethodInfo minfo;//定义Jni函数信息结构体

// //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数

// bool isHave = JniHelper::getStaticMethodInfo(minfo, "com/example/testGame/testGame","testFunWithStringAndRtn","(I)Ljava/lang/String;");

// jobject jobj;

// if (!isHave) {

// CCLog("jni:此函数不存在");

// }else{

// CCLog("jni:此函数存在");

// //调用此函数

// jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID,823);

// }

// CCLog("jni-java函数执行完毕");

//#endif

//#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台

// JniMethodInfo minfo;//定义Jni函数信息结构体

// //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数

// bool isHave = JniHelper::getStaticMethodInfo(minfo,

// "com/example/testGame/testGame", //类的路径

// "rtnActivity", //方法名

// "()Ljava/lang/Object;"); //括号里的是参数,后面的是返回值。

// jobject jobj;

// if (isHave) {

// jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);

// }

// CCLog("正确获取到 jobj");

//

// //

// isHave = JniHelper::getMethodInfo(minfo,

// "com/example/testGame/testGame", //类的路径

// "nostaticFun", //方法名

// "()V"); //括号里的是参数,后面的是返回值。

//

// if (isHave) {

// minfo.env->CallVoidMethod(jobj, minfo.methodID);

// }

// CCLog("jni-java函数执行完毕");

//#endif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值