欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下)

发布时间:2025/3/21 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

 示例代码段2:

Xcode 代码:

 

  • //静态函数示例2.有参数,无返回值------------------------------$$$$$$$-------------------------------- 
  • #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 
  •     JniMethodInfo minfo;//定义Jni函数信息结构体 
  •     //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数 
  •     bool isHave = JniHelper::getStaticMethodInfo(minfo, 
  •                                                 "com/ai/ommr/OhMonsterMR4Android""testFunWithInt","(I)V");   
  •   
  •     if (!isHave) { 
  •         CCLog("jni:此函数不存在"); 
  •     }else
  •         CCLog("jni:此函数存在"); 
  •         //调用此函数 
  •         minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,823); 
  •     } 
  •     CCLog("jni-java函数执行完毕"); 
  • #endif 
  • Android(Java) 代码:

  • // 静态函数示例2.有参数,无返回值 
  • public static void testFunWithInt(int _int) { 
  •     Log.e("Himi""静态函数示例1.有参数,无返回值;传入的参数int=" + _int); 
  • 运行截图:

    示例代码段3:

    Xcode 代码:

     

  • //静态函数示例3.有参数,有返回值--------------------------------$$$$$$$-------------------------------- 
  • #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 
  •     JniMethodInfo minfo;//定义Jni函数信息结构体 
  • //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数 
  •   
  • bool isHave = JniHelper::getStaticMethodInfo(minfo, 
  •                                              "com/ai/ommr/OhMonsterMR4Android","testFunWithIntAndRtn","(I)I"); 
  • jint _int ; 
  • if (!isHave) { 
  •     CCLog("jni:此函数不存在"); 
  • }else
  •     CCLog("jni:此函数存在"); 
  •     //调用此函数 
  •     _int = minfo.env->CallStaticIntMethod(minfo.classID, minfo.methodID,823); 
  •   
  •     //尝试jint是否能正常接收返回的int值 
  •     JniMethodInfo minfo_ty; 
  •     bool isHave = JniHelper::getStaticMethodInfo(minfo_ty, "com/ai/ommr/OhMonsterMR4Android""testFunWithInt",  "(I)V"); 
  •      if (isHave) { 
  •          minfo_ty.env->CallStaticVoidMethod(minfo_ty.classID, minfo_ty.methodID,_int); 
  •      } 
  •   
  • CCLog("jni-java函数执行完毕"); 
  • #endif 
  • Android(Java) 代码:

     

  • // 静态函数示例3.有参数,有返回值 
  • public static int testFunWithIntAndRtn(int _int) { 
  •     Log.e("Himi""静态函数示例1.有参数,有返回值;传入的参数int=" + _int); 
  •     return _int+1000; 
  • 运行截图:

    示例代码段4:

    Xcode 代码:

     

  • #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 
  •     JniMethodInfo minfo;//定义Jni函数信息结构体 
  •     //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数 
  •     bool isHave = JniHelper::getStaticMethodInfo(minfo,  "com/ai/ommr/OhMonsterMR4Android","testFunWithStringAndRtn","(I)Ljava/lang/String;"); 
  •     jobject jobj; 
  •     if (!isHave) { 
  •         CCLog("jni:此函数不存在"); 
  •     }else
  •         CCLog("jni:此函数存在"); 
  •         //调用此函数 
  •         jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID,823); 
  •     } 
  •     CCLog("jni-java函数执行完毕"); 
  • #endif 
  • Android(Java) 代码:

     

  • // 静态函数示例4.有参数,有返回值(String类型) 
  • public static String testFunWithStringAndRtn(int _int) { 
  •     Log.e("Himi""静态函数示例4.有参数,有返回值(String类型);int=" + _int); 
  •     return "yes,return 'String' is OK --by Himi"
  • 运行截图:

    示例代码段5:

    Xcode 代码:

     

  • #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 
  •     JniMethodInfo minfo;//定义Jni函数信息结构体 
  •     //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数 
  •     bool isHave = JniHelper::getStaticMethodInfo(minfo, 
  •                                                 "com/ai/ommr/OhMonsterMR4Android",  //类的路径 
  •                                                 "rtnActivity",   //方法名 
  •                                                 "()Ljava/lang/Object;");   //括号里的是参数,后面的是返回值。 
  •     jobject jobj; 
  •     if (isHave) { 
  •        jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID); 
  •     } 
  •     CCLog("正确获取到 jobj"); 
  •   
  •     // 
  •     isHave = JniHelper::getMethodInfo(minfo, 
  •                                                  "com/ai/ommr/OhMonsterMR4Android",  //类的路径 
  •                                                  "nostaticFun",   //方法名 
  •                                                  "()V");   //括号里的是参数,后面的是返回值。   
  •   
  •     if (isHave) { 
  •          minfo.env->CallVoidMethod(jobj, minfo.methodID); 
  •     } 
  •      CCLog("jni-java函数执行完毕"); 
  • #endif 
  • Java 代码:

     

  • //---- 函数示例之非静态函数调用 
  • //(先获取个对象) 
  • public static Activity actInstance;//定义单例 
  • public static Object rtnActivity() { 
  •     return actInstance; 
  • //使用此对象进行调用非静态函数 
  • public void nostaticFun() { 
  •     Log.e("Himi""no static Function is OK - By Himi"); 
  • 运行截图:










    本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/908818,如需转载请自行联系原作者

    总结

    以上是生活随笔为你收集整理的【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下)的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。