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版本: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++是小写
相关文章推荐
- java使用JNI调用C++代码(vs2010生成dll文件)
- 使用JNI进行混合编程:在C/C++中调用Java代码--------------------cocos2d-x 3.0正式版本(7.5)
- java使用JNI调用C++代码(vs2010生成dll文件)
- 使用java调用C语言的方法,让java获取串口数据并生成一个String对象的代码。
- cocos2d使用jni调用java代码时报jni.h找不到错误
- Cocos2d-x中通过JNI进行C++调用Java代码 JniHelper类的使用
- cocos2d-x中使用JNI的调用JAVA方法
- 一个初级例子讲述C和CPP在JNI中调用安卓Java代码
- 使用JNI进行Java与C/C++语言混合编程(2)--在C/C++中调用Java代码
- Cocos2d-x利用jni调用java层代码
- jni-使用c代码调用java文件
- Cocos2d-x3.3RC0通过JNI调用Android的Java层URI代码发送短信
- cocos2d-x利用jni调用java层代码(c++调java)
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- Cocos2d-x3.3RC0通过JNI调用Android的Java层URI代码发送短信
- 【转】使用JNI进行混合编程:在C/C++中调用Java代码
- JAVA生成全局唯一ID 使用 java.util.UUID
- 使用JNI在C中调用java代码
- cocos2d-x 中多线程的c/c++代码通过JNI调用java代码
- C++ 调用 Java Cocos2d-x利用jni调用java层代码