如何使用 2 个字符串参数从 jni java 库调用

How to call from jni java library with 2 string parameters?

本文关键字:jni java 调用 参数 何使用 字符串      更新时间:2023-10-16

我是这样试的:

 void CallbackStringFromJni(const char *name, const char *type)
 {
    jboolean isAttached;
    JNIEnv *env;
    jmethodID mid;
    jstring js, js2;
    LOGE("callbackStringFromJni Begin");
    env = getJniEnv(&isAttached);
    if (env == NULL)
            goto FAIL0;
    mid = getApplicationJniMethodId(env, applicationJniObj, "callbackStringFromJni", "(SS)V");
    if (mid == NULL)
            goto FAIL1;
    js = (*env)->NewStringUTF(env, name);
    js2 = (*env)->NewStringUTF(env, type);
    (*env)->CallVoidMethod(env, applicationJniObj, mid, js, js2);
    if (isAttached)
    {
        (*global_vm)->DetachCurrentThread(global_vm);
    }
    LOGE("callbackStringFromJni End");
    return;
FAIL1:
    if (isAttached)
    {
        (*global_vm)->DetachCurrentThread(global_vm);
    }
FAIL0:
    LOGE("callbackStringFromJni FAILED");
    return;
}

但我得到这个:

01-26 11:53:02.500: E/VidyoMobile app/src/main/jni/ndkVidyoSample.c(31091): getApplicationJniMethodId - getApplicationJniMethodId: Failed to get callbackStringFromJni method
01-26 11:53:02.603: E/AndroidRuntime(31091): java.lang.NoSuchMethodError: no non-static method "Lcom/vidyo/vidyocore/VidyoCoreApplication;.callbackStringFromJni(SS)V"

我在 java 中的方法如下所示:

public void callbackStringFromJni(String name, String typeS) {
    Log.e("","callbackStringFromJni name: " + name + ".. type: " + typeS);
}

它必须是这样的:

mid = getApplicationJniMethodId(env, applicationJniObj, "callbackStringFromJni", "(Ljava/lang/String;Ljava/lang/String;)V");

"(SS)V"