前言
对于Cocos 这一块,完全是个菜鸟,虽然很多看不懂,但做项目需要用到,没办法只能自己慢慢摸索前进了. (•̀ᴗ•́)و ̑̑
环境:Cocos2d-js 、Android
Cocos2d 里面调用Java 方法操作,在制作Android版本时,需要使用C++调用java的函数,这个通过jni实现.
下面是 总结的几种 示例,记录一下,以后忘了还可以温故一下 ╰( ̄▽ ̄)╭。
C++ 调用 java :
#inclde "jnixxx.h" // 头文件
#ifder WIN32
#else
#define CLASS_NAME "com/xxx/xxxx/xxActivity" // 需要调用的完整类名
extend "C"{
// 调用 java 返回值为 String 方法
std::string jniGetTest(){
std::string strTest;
JniMedhodInfo info;
bool ret = JniHelper:: getStaticMethodInfo(info, CLASS_NAME, "getTest", "()Ljava.lang/String;"); // 调用java 的静态方法 getTest();
jstring jsStr;
if(ret){
jsStr = static_cast<jstring>(info.env->CallStaticObjectMehod(info.classID, info.methodID));
const char* s = info.env->GetStringUTFChars(jsStr, NULL);
if(s){
strTest;
info.env->ReleaseStringUTFChars(jsStr, s);
}
info.env->DeleteLocalRef(info.classID);
return strTest;
}
}
// 调用 java 返回值为 boolean 方法
bool jniIsNetWork(){
JniMethodInfo info;
bool ret = JniHelper::getStaticMehodInfo(info, CLASS_NAME, "isNetWork", "()Z"); // 调用java 的静态 boolean 方法 isNetWork();
bool isConnect;
if(ret){
isConnect = static_cast<bool>(info.env->CallStaticObjectMethod(info.classID, info.methodID));
info.env->DeleteLocalRef(info.classID);
}
return isConnect;
}
// 调用 java 返回值为 void 方法
void jniGetLogin(){
JniMethodInfo info;
bool ret = JniHelper::getStaticMehodInfo(info,CLASS_NAME, "onLogin", "()V"); // // 调用java 的静 void 态方法 isNetWork();
if(ret){
info.env->CallStaticObjectMehtod(info.classID, info.methodID);
info.env->DeleteLocalRef(info.classID);
}
}
}
#endif
java代码:
// 返回 String 类型 方法
public static String getTest(){
String str = "getTest";
return str;
}
// 返回 boolean 类型 方法
public static boolean isNetWork(){
boolean isConnect = false;
return isConnect;
}
// void 类型 方法
public static void onLogin(){
startActivity(this, new Intent(this, LoginActivity,class));
}