Cocos2d-js: C++ 调用java 代码

来源:互联网 发布:o reilly 知乎 编辑:程序博客网 时间:2024/06/07 02:19

前言
对于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));}
0 0
原创粉丝点击