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

时间:2013-10-28 01:59:41

标签: java android c++ java-native-interface unsatisfiedlinkerror

我试图从用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();
}

inteface.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。我不明白为什么它适用于第一种方法,为什么不适用于第二种方法,因为它们除了名称之外几乎都是相同的。

1 个答案:

答案 0 :(得分:1)

你说两个原生方法在不同的类中,但在你的RegisterNatives调用中,你将它们分配给一个类。如果要使用其他类注册每个方法,则必须进行两次RegisterNatives次调用。该方法由类,名称和签名键入。