【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下)
示例代码段2: Xcode 代码: //静态函数示例2.有参数,无返回值------------------------------$$$$$$$-------------------------------- #if(CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)//判断当前是否为Android平台 JniMethodInfominfo;//定义Jni函数信息结构体 //getStaticMethodInfo次函数返回一个bool值表示是否找到此函数 boolisHave=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.有参数,无返回值 publicstaticvoidtestFunWithInt(int_int){ Log.e("Himi","静态函数示例1.有参数,无返回值;传入的参数int="+_int); } 运行截图: 示例代码段3: Xcode 代码: //静态函数示例3.有参数,有返回值--------------------------------$$$$$$$-------------------------------- #if(CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)//判断当前是否为Android平台 JniMethodInfominfo;//定义Jni函数信息结构体 //getStaticMethodInfo次函数返回一个bool值表示是否找到此函数 boolisHave=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值 JniMethodInfominfo_ty; boolisHave=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.有参数,有返回值 publicstaticinttestFunWithIntAndRtn(int_int){ Log.e("Himi","静态函数示例1.有参数,有返回值;传入的参数int="+_int); return_int+1000; } 运行截图: 示例代码段4: Xcode 代码: #if(CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)//判断当前是否为Android平台 JniMethodInfominfo;//定义Jni函数信息结构体 //getStaticMethodInfo次函数返回一个bool值表示是否找到此函数 boolisHave=JniHelper::getStaticMethodInfo(minfo,"com/ai/ommr/OhMonsterMR4Android","testFunWithStringAndRtn","(I)Ljava/lang/String;"); jobjectjobj; if(!isHave){ CCLog("jni:此函数不存在"); }else{ CCLog("jni:此函数存在"); //调用此函数 jobj=minfo.env->CallStaticObjectMethod(minfo.classID,minfo.methodID,823); } CCLog("jni-java函数执行完毕"); #endif Android(Java) 代码: //静态函数示例4.有参数,有返回值(String类型) publicstaticStringtestFunWithStringAndRtn(int_int){ Log.e("Himi","静态函数示例4.有参数,有返回值(String类型);int="+_int); return"yes,return'String'isOK--byHimi"; } 运行截图: 示例代码段5: Xcode 代码: #if(CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)//判断当前是否为Android平台 JniMethodInfominfo;//定义Jni函数信息结构体 //getStaticMethodInfo次函数返回一个bool值表示是否找到此函数 boolisHave=JniHelper::getStaticMethodInfo(minfo, "com/ai/ommr/OhMonsterMR4Android",//类的路径 "rtnActivity",//方法名 "()Ljava/lang/Object;");//括号里的是参数,后面的是返回值。 jobjectjobj; 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 代码: //----函数示例之非静态函数调用 //(先获取个对象) publicstaticActivityactInstance;//定义单例 publicstaticObjectrtnActivity(){ returnactInstance; } //使用此对象进行调用非静态函数 publicvoidnostaticFun(){ Log.e("Himi","nostaticFunctionisOK-ByHimi"); } 运行截图: 本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/908818,如需转载请自行联系原作者