userGyl
V2EX  ›  问与答

一个 jni 相关问题,希望解惑。

  •  
  •   userGyl · Jul 4, 2021 · 2480 views
  •   You need to sign in to view this topic
    This topic created in 1937 days ago, the information mentioned may be changed or developed.
    流程是在 cpp 中调用 jni.cpp 再调用 java,报错
    JNI DETECTED ERROR IN APPLICATION: JNI GetMethodID called with pending exception java.lang.ClassNotFoundException: Didn't find class on path: DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib64, /system_ext/lib64, /system/lib64, /system_ext/lib64]]

    下面贴一下调用代码
    //通过 jvm 获取 env 的方式
    JNIEnv *get_env(int *attach) {
    if (javaVM == NULL) return NULL;
    *attach = 0;
    JNIEnv *jni_env = NULL;
    int status = javaVM->GetEnv((void **) &jni_env, JNI_VERSION_1_6);
    if (status == JNI_EDETACHED || jni_env == NULL) {
    JavaVMAttachArgs vmAttachArgs;
    vmAttachArgs.version = JNI_VERSION_1_6;
    vmAttachArgs.name = NULL;
    vmAttachArgs.group = NULL;

    status = javaVM->AttachCurrentThread(&jni_env, &vmAttachArgs);
    if (status < 0) {
    jni_env = NULL;
    } else {
    *attach = 1;
    }
    }
    return jni_env;
    }
    //对应 java 文件声明的 native 函数
    extern "C"
    JNIEXPORT void JNICALL
    Java_com_hik_netsdk_SimpleDemo_XJni_Heart(JNIEnv *ev, jobject t) {

    int attach = 0;
    JNIEnv *env = get_env(&attach);

    const char *javaPath="包名 /XJni";
    jclass clazz = env->FindClass(javaPath); //debug 显示返回为 null
    jmethodID mid = env->GetMethodID(clazz, "CallJavaHeart", "()V");
    jobject jobject = env->AllocObject(clazz);
    env->CallVoidMethod(jobject, mid);

    if (attach == 1) {
    del_env();
    }


    }


    网上的一些解决方案试过了,但是无效,希望有大佬可以帮忙看看,非常感激
    4 replies  •  2021-07-06 10:00:45 +08:00
    guchengyehai1
        1
    guchengyehai1  
       Jul 5, 2021 via iPhone
    有可能类没有被加载到虚拟机
    amimo
        3
    amimo  
       Jul 6, 2021
    实现不行,可以在 Java 层找好,然后传下来。另外,Java_com_hik_netsdk_SimpleDemo_XJni_Heart 转下来的 env 可以直接使用,不需要重新 get 。
    userGyl
        4
    userGyl  
    OP
       Jul 6, 2021
    @amimo 嗯 现在是在初始化的时候提前 findclass ev 还是用上面代码获取 就 ok 了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2320 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:26 · PVG 19:26 · LAX 04:26 · JFK 07:26
    ♥ Do have faith in what you're doing.