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

问题描述 投票:0回答:2

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

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

这是我加载库的java代码。

这是我的主要java代码

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

android android-ndk shared-libraries implementation .so
2个回答
0
投票

使用link到评论中提供的示例项目,生活非常简单。

您需要在项目中使用https://github.com/CassieLuoli/react-native-smartconnection/blob/master/android/src/main/java/com/mediatek/demo/smartconnection/JniLoader.java as is文件。从GitHub下载它而不更改类名或包,并在Java应用程序中使用它,就像它们在example中一样。


0
投票

您缺少C部分中的JNI图层。要让Java本机接口GetLibVersion()能够在C部分中找到匹配的函数,您需要使用Java_ai_widya_mediatekso_JniLoader_GetLibVersion(JNIEnv *env, jobject thiz)定义C函数名称,因为崩溃日志告诉您。不要错过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;
}

并且不要忘记将JNI参数添加到C函数中,例如GetLibVersion(JNIEnv *env, jobject thiz)

© www.soinside.com 2019 - 2024. All rights reserved.