当我使用 .so 文件时没有找到实现 android

No implementation found when i use .so file android

我想使用其他项目的本机库。这是我的图书馆。

这是我第一次在android studio 中使用ndk。我成功加载了库 .so,但是当我想访问该文件时失败了。这是错误

这是我的 java 加载库的代码。

这是我的主要 java 代码

你能解决我的问题吗?谢谢

您的 C 部分缺少 JNI 层。要让 Java 本机接口 GetLibVersion() 能够在 C 部分中找到匹配的函数,您需要定义一个 C 函数名称 Java_ai_widya_mediatekso_JniLoader_GetLibVersion(JNIEnv *env, jobject thiz) 就像崩溃日志告诉您的那样。不要错过C函数中的JNI参数。
如果要在 C 部分中使用与 Java 部分完全相同的函数名称,可以向 JVM 注册一个新名称。在 JNI_Onload() 中调用以下函数。

static int registerNativeMethods(JNIEnv* env)
{
    jclass clazz;
    const char* className = "ai/widya/mediatekso/JniLoader";
    clazz = env->FindClass(className);
    if (clazz == NULL) {
        ALOGE("Native registration unable to find class '%s'", className);
        return JNI_FALSE;
    }
    JNINativeMethod methods[] = {
        {"GetLibVersion", "()V", (void*) GetLibVersion },
        {"GetProtoVersion", "()V", (void*) GetProtoVersion },
    };
    if (env->RegisterNatives(clazz, methods, 2) < 0) {
        ALOGE("RegisterNatives failed for '%s'", className);
        return JNI_FALSE;
    }
    return JNI_TRUE;
}

并且不要忘记像这样 GetLibVersion(JNIEnv *env, jobject thiz) 在您的 C 函数中添加 JNI 参数。

有了您在评论中提供的示例项目 link,生活真的很轻松。

您需要文件 https://github.com/CassieLuoli/react-native-smartconnection/blob/master/android/src/main/java/com/mediatek/demo/smartconnection/JniLoader.java as is in your project. Download it from GitHub without changing the class name or the package and use it in your Java app, like they do in their example.