0

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. どちらも名前を除いてほとんど同じであるため、最初の方法で機能し、2番目の方法で機能しなかった理由がわかりません。

4

1 に答える 1

1

2 つのネイティブ メソッドは異なるクラスにあると言いますが、RegisterNatives呼び出しでは両方を 1 つのクラスに割り当てます。各メソッドを異なるクラスに登録する場合は、2 つのRegisterNatives呼び出しを行う必要があります。メソッドは、クラス、名前、および署名によってキー付けされます。

于 2013-10-28T02:10:12.503 に答える