目前的情况是
    先从java掉用C++,然后C++调用JAVA 这个过程就是回调

    1. binding.buttonTestSyncDialog.setOnClickListener{
    2. BetwinNative.callShowSyncDialog()
    3. }

    callShowSyncDialog()这个函数在BetwinNative.kt的文件中
    这个文件中会有如下一行代码

    1. external fun callShowSyncDialog()

    external关键字,相当于java的native
    那么点进去之后发现

    在 native-lib.cpp 找到

    static const JNINativeMethod methods[] = {

    1. {"registerOperation", "(Ljava/lang/String;)V", (void *) registerOperation},<br /> {"nativeCallMethod", "(Ljava/lang/String;)Ljava/lang/String;", (void *) nativeCallMethod},<br /> {"runQCoreApplication", "()V", (void *) runQCoreApplication},<br /> {"callShowSyncDialog", "()V", (void *) callShowSyncDialog},<br /> {"callShowSyncInputDialog", "()V", (void *) callShowSyncInputDialog},<br /> {"callToastMessage", "()V", (void *) callToastMessage},<br /> {"callChangeKeyPasswordDialog", "()V", (void *) callChangeKeyPasswordDialog},<br /> {"callChangeClientPasswordDialog", "()V", (void *) callChangeClientPasswordDialog},

    };

    void callShowSyncDialog(JNIEnv *env) {
    //测试C++调用java
    jint value = callJavaMethodShowSyncDialog(env, 10, “C++标题”, “C++内容”);
    logd(“ java return value ShowSyncDialog %d “, value);
    }

    在callback.h文件中找到如下内容

    jint callJavaMethodShowSyncDialog(JNIEnv *env, int errorCode, std::string title, std::string content) {
    jclass jclazz = env->FindClass(“com/cslc/minipos/jni/nativefunc/BetWinCallback”); //找到需要回调的类
    if (jclazz == 0) {
    logd(“class not find “);
    return false;
    }

    1. jmethodID methodid = env->GetStaticMethodID(jclazz, "showSyncDialog", //找到需要回调的方法<br /> "(ILjava/lang/String;Ljava/lang/String;)I");<br /> if (methodid == 0) { <br /> logd("helloFromJava method not find ");<br /> return false;<br /> }<br /> jint param1 = errorCode;<br /> jstring param2 = env->NewStringUTF(title.c_str());<br /> jstring param3 = env->NewStringUTF(content.c_str());<br /> return env->CallStaticIntMethod(jclazz, methodid, param1, param2, param3);<br />}

    上面这个方法 在jni.h中声明了
    jint (CallStaticIntMethod)(JNIEnv, jclass, jmethodID, …);
    jint (CallStaticIntMethodV)(JNIEnv, jclass, jmethodID, va_list);
    jint (CallStaticIntMethodA)(JNIEnv, jclass, jmethodID, const jvalue*);

    具体的回调 都可以在callJavaMethodShowSyncDialog中进行实现

    如果要写一个.h文件 那么首先要在 CMakeLists.txt 文件中的
    add_library( # Sets the name of the library.
    betwin

    1. # Sets the library as a shared library.<br /> SHARED
    2. # Provides a relative path to your source file(s).<br /> native-lib.cpp
    3. entity/CommonResponse.h<br /> entity/DataTerminalLoginOutput.h<br /> entity/DataTerminalLoginOutput.cpp<br /> utils/StringUtil.h<br /> utils/StringUtil.cpp<br /> utils/logutil.h<br /> jsoncpp/json_tool.h<br /> jsoncpp/json_reader.cpp<br /> jsoncpp/json_valueiterator.inl<br /> jsoncpp/json_value.cpp<br /> jsoncpp/json_writer.cpp<br /> jsoncpp/assertions.h<br /> jsoncpp/allocator.h<br /> jsoncpp/config.h<br /> jsoncpp/json_features.h<br /> jsoncpp/forwards.h<br /> jsoncpp/json.h<br /> jsoncpp/reader.h<br /> jsoncpp/value.h<br /> jsoncpp/version.h<br /> jsoncpp/writer.h<br /> nativeImpl/terminlLogin.h<br /> nativeImpl/sellerLogin.h<br /> nativeImpl/hardwareDetection.h<br /> nativeImpl/register.h<br /> nativeImpl/callback.h<br /> nativeImpl/test.h<br /> )<br />加上这个声明才能够在你自己的.h文件中调用相应的#include <jni.h> 才能够正确的有引进这个文件