CPP文件中(以HelloWorld为例):
1、
#include "../platform/android/jni/JniHelper.h"
2、
// 判断当前是否为Android平台
#if (CC_TARGET_PLATFORM== CC_PLATFORM_ANDROID)
// 定义Jni函数信息结构体
JniMethodInfo minfo;
// getStaticMethodInfo次函数返回一个bool值表示是否找到此函数
bool isHave = JniHelper::getStaticMethodInfo(minfo, "com/meetfuture/jnitest/JNI_Test", "testFunWithInt","(I)V");
if (!isHave)
{
CCLog("jni:此函数不存在");
}
else
{
CCLog("jni:此函数存在");
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID, 823); // 调用此函数
}
CCLog("jni-java函数执行完毕");
#endif
代码说明:
#if (CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)
//...
#endif
判断设备是否为
Android
设备,如果是,则执行代码到
#endif
为止,如果不是,则跳过此段代码。JniHelper::getStaticMethodInfo(JniMethodInfo&methodinfo,
const char *className,
const char*methodName,
const char *paramCode);
获取JAVA方法的信息,共有四个参数:
第一个参数:JniMethodInfo 类型,用于JNI的操作
第二个参数:类的路径。本例类的路径为:"com/mycompany/jnitest/JNI_Test"
第三个参数:方法名。注意方法名一定要定义为static。对应上图的方法名为:"testFunWithInt"
第四个参数:(参数)返回值。括号内为传入的参数类型,括号后面为返回值类型
本例中的(参数)返回值为:"(I)V"
之后经过NDK编译,Eclipse导入运行,在日志中会得到如下结果:
通过修改JAVA代码,可以得到不同的结果
至此C++调用JAVA的方法已经实现