java.lang.UnsatisfiedLinkError:用于第二种方法

java.lang.UnsatisfiedLinkError: for the second method

本文关键字:二种 方法 lang UnsatisfiedLinkError 用于 java      更新时间:2023-10-16

我正在尝试从用java编写的IntentService调用本机回调方法。IntentService 中的代码片段是这样的 -

private static native void native_notificationCallback();
public void somemethod(){
    //some other code... 
    native_notificationCallback();
}

另一个在一个单独的类中——

private static native void native_initCallback();
public void somemethod(){
    //some other code... 
    native_initCallback();
}

内幕.cpp是这样的——

void JNICALL Notification_initCallback(JNIEnv* env, jobject obj)
{
    //code
}
void JNICALL Notification_notificationCallback(JNIEnv* env, jobject obj)
{
    //code
}
void init(){
    static const JNINativeMethod methods[] =
    {
        {"native_initCallback","()V",(void*)&Notification_initCallback},
        {"native_notificationCallback","()V",(void*)&Notification_notificationCallback}
    };
    // Register the native hooks
    if (env->RegisterNatives(cls, methods,sizeof(methods)/sizeof(methods[0])))
        goto fail;
}

问题是当我调用native_initCallback时它工作得很好,但是当我调用native_notificationCallback时,应用程序崩溃,导致java.lang.UnsatisfiedLinkError.我不明白为什么它适用于第一种方法,为什么不适用于第二种方法,因为除了名称之外,它们几乎相同。

您说这两个本机方法位于不同的类中,但是在您的RegisterNatives调用中,您将它们都分配给一个类。如果要使用不同的类注册每个方法,则必须进行两次RegisterNatives调用。该方法由类、名称和签名键控。