У меня есть метод в JNI (C ++), и я хочу иметь возможность возвращать пользовательский тип объекта (не примитив или строку и т. Д.). Я что-то записал, но продолжаю получать java.lang.UnsatisfiedLinkError error.
Вот подробности:
Метод:
static jobject Java_android_sdk_Core_ProcessFrame(JNIEnv *env, jobject myobj, jbyteArray frameData)
{
jclass clazz;
jmethodID cid;
jobject jCoreOut;
static const char* const strClassName = "android/sdk/Core/CoreOutput";
clazz = env->FindClass(strClassName);
if (clazz == NULL) {
LOGE("Can't find class CoreOutput");
}
cid = env->GetMethodID(clazz,"<init>", "()V");
jCoreOut = env->NewObject(clazz, cid);
// Free local references
env->DeleteLocalRef(clazz);
return jCoreOut;
}
У меня есть дескрипторы методов, определенные следующим образом:
static const JNINativeMethod gMethods[] = {
{ "CreateCore", "(III)V", (void*) Java_android_sdk_Core_CreateCore },
{ "ProcessFrame", "([B)Landroid/sdk/Core/CoreOutput;", (void*) Java_android_sdk_Core_ProcessFrame }
};
Я выполняю регистрацию метода, позвонив по телефону:
if (env->RegisterNatives(clazz, gMethods,
sizeof(gMethods) / sizeof(gMethods[0])) != JNI_OK)
{
LOGE("Failed registering JNI methods");
return result;
}
И регистрация для других моих собственных методов прошла успешно.(Я могу использовать их ...)
Когда я пытаюсь вызвать метод ProcessFrame, я получаю следующий вывод из Logcat:
11-23 16:10:10.139: ERROR/AndroidRuntime(4923): java.lang.UnsatisfiedLinkError: ProcessFrame
Я уверен, что он что-то естьделать со мной, не определяя метод правильно.Кто-нибудь может пролить свет на это?
Может ли кто-нибудь указать мне хороший учебник, который охватывает больше, чем обработка примитивных типов в JNI?
Спасибо,
Итамар