关闭

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

标签: cocos2d-xandroidjni
2734人阅读 评论(0) 收藏 举报
分类:

以前写过一次,但是最近在做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++是小写

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:19585次
    • 积分:205
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条
    文章存档