您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x 使用JniHelper 调用 java代码 获取安卓生成的唯一标示UUID

2013-12-05 10:51 841 查看
以前写过一次,但是最近在做cocos2d-x通过jni调用java代码的东西,然后又忘了,所以写一下备注一下

cocos2d-x版本:2.2.1

代码:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
#include <android/log.h>
#endif

引入头文件,在win32下是代码是无效的,所以加个判断。

源文件:

std::string GameUtil::getUUID()
{
std::string str;
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
JniMethodInfo minfo;//定义Jni函数信息结构体

bool isHave = JniHelper::getStaticMethodInfo(minfo,
"com/test/hello/hello", //类的路径。最后一个hello是java文件名,但是不需要加入文件名后缀
"getUUID", //方法名
"()Ljava/lang/String;"); //括号里的是参数,后面的是返回值。
jstring jstr;
if (isHave) {
//CallStaticObjectMethod是返回一个jobject格式的函数
//还知道一个函数式CallStaticIntMethod
jstr = (jstring)(minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID));
str = JniHelper::jstring2string(jstr);
minfo.env->DeleteLocalRef(minfo.classID);
minfo.env->DeleteLocalRef(jstr);
}
CCLOG("UUID is :%s",str.c_str());
#endif
return str;
}

这段代码是获取java代码内的提供的UUID

详细参数就不多写了,Himi有文章写的很详细

链接:http://blog.csdn.net/xiaominghimi/article/details/7602984

具体功能是:

1.JniHelper::getStaticMethodInfo,获取是否查询到了类函数,返回一个bool

2.使用CallStaticObjectMethod函数获取getUUID的返回值

3.JniHelper::jstring2string使用该函数把 jstring 转换成 std::string

4.使用完以后释放对象DeleteLocalRef()
唯一区别就是,新版本需要把java文件也写上,以前是只用写一个路径,不用写文件名,不然调用的时候程序会崩溃,提示找不到文件


java代码:

public static String getUUID()
{
Log.e("getUUID:",java.util.UUID.randomUUID().toString());
return java.util.UUID.randomUUID().toString();
}

这是一个静态函数,记住c++和java的string是有大小写的区别的,java是大写,c++是小写
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cocos2d-x android jni