Я пытаюсь вызвать собственный метод обратного вызова из IntentService, написанного на Java. Фрагмент кода в 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
, Я не понимаю, почему это работает для первого метода, а почему нет для второго, поскольку оба они почти идентичны, кроме названия.
Вы говорите, что два нативных метода находятся в разных классах, но в вашем RegisterNatives
Позвоните, вы назначите их обоих в один класс. Если вы хотите зарегистрировать каждый метод в другом классе, вам нужно сделать два RegisterNatives
звонки. Метод основан на классе, имени и подписи.
Других решений пока нет …