zoukankan      html  css  js  c++  java
  • cocos2dx jni

    头文件JniUtil.h中需要引入如下两个.h文件:

    #include <jni.h>
    #include "platform/android/jni/JniHelper.h"

    通过C++调用Java

    声明一个函数,专门用于处理从C++调用Java的方法,所有调用Java的地方都走这个函数。

    这样可以减少jni代码,通过Json来传递具体的调用指令,在java那边通过switch来进行区分,然后再通过java去调用具体的方法。

    static void callJni(const char * data);

    在JniUtil.cpp文件中如下实现:

    void JniUtil::callJni(const char *data){

    JniMethodInfo minfo;//定义Jni函数信息结构体
    //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
    const char * jniClass = "com/xxxx/xxxx/xxxxxxxx";//这里写你所要调用的java代码的类名
    bool isHave = JniHelper::getStaticMethodInfo(minfo,jniClass,"callJni","(Ljava/lang/String;)V");//本人在此传递的参数是字符串
    if (!isHave) {
    CCLog("jni->%s/callJni:此函数不存在", jniClass);
    }else{
    CCLog("jni->%s/callJni:此函数存在", jniClass);
    jstring jdata = minfo.env->NewStringUTF(data);
    //调用此函数
    minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,jdata);
    }
    CCLog("jni-java函数执行完毕");
    }

    Java的实现:

    public static void callJni(final String data) {
    mHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
    //这里处理C++传递过来的数据
    }
    }, 100);
    }

    通过Java代码调用C++

    //在java类中定义一个方法,用于提供给java调用C++
    private static native void xxxxxx(int value);

    在JniUtil.cpp中作如下实现:

    extern "C"
    {
    //方法名与java类中的包名+方法名,以下划线连接
    void Java_com_xxxx_xxxx_xxxx_xxxx(JNIEnv* env, jobject thiz, jint a)
    {
    //这里java调用nativePaySuccess(1);,这里就会被调用。jint a = 1

    }
    }

  • 相关阅读:
    Random简介
    十道海量数据处理面试题
    Django models 的字段类型
    执行monkey APK 制作
    MTK平台-抓取蓝牙log
    超级硬件代理解决企业Web提速上网问题
    Red Hat Linux 安装 (本地、网络安装)
    由安装两块网卡的linux系统中引起网络不通想到的
    Linux企业应用--RHAS 2.1 下安装中文 Lotus Domino R 6.5 图解
    巧用Linux 架设TFTP Server备份路由器的配置文件
  • 原文地址:https://www.cnblogs.com/zhujiulunjian/p/6574969.html
Copyright © 2011-2022 走看看