天天看点

【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:

//静态函数示例3.有参数,有返回值--------------------------------$$$$$$$-------------------------------- 

//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函数执行完毕"); 

// 静态函数示例3.有参数,有返回值 

public static int testFunWithIntAndRtn(int _int) { 

    Log.e("Himi", "静态函数示例1.有参数,有返回值;传入的参数int=" + _int); 

    return _int+1000; 

示例代码段4:

    bool isHave = JniHelper::getStaticMethodInfo(minfo,  "com/ai/ommr/OhMonsterMR4Android","testFunWithStringAndRtn","(I)Ljava/lang/String;"); 

    jobject jobj; 

        jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID,823); 

// 静态函数示例4.有参数,有返回值(String类型) 

public static String testFunWithStringAndRtn(int _int) { 

    Log.e("Himi", "静态函数示例4.有参数,有返回值(String类型);int=" + _int); 

    return "yes,return 'String' is OK --by Himi"; 

<a href="http://www.himigame.com/wp-content/uploads/2012/04/3333.png"></a>

示例代码段5:

                                                "com/ai/ommr/OhMonsterMR4Android",  //类的路径 

                                                "rtnActivity",   //方法名 

                                                "()Ljava/lang/Object;");   //括号里的是参数,后面的是返回值。 

    if (isHave) { 

       jobj = minfo.env-&gt;CallStaticObjectMethod(minfo.classID, minfo.methodID); 

    CCLog("正确获取到 jobj"); 

    // 

    isHave = JniHelper::getMethodInfo(minfo, 

                                                 "com/ai/ommr/OhMonsterMR4Android",  //类的路径 

                                                 "nostaticFun",   //方法名 

                                                 "()V");   //括号里的是参数,后面的是返回值。   

         minfo.env-&gt;CallVoidMethod(jobj, minfo.methodID); 

     CCLog("jni-java函数执行完毕"); 

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,如需转载请自行联系原作者

继续阅读