我在JNI(C ++)中有一个方法,我希望能够返回一个自定义的Object类型(不是原语或String等...) 我写了一些东西,但我不断收到java.lang.UnsatisfiedLinkError错误。
以下是详细信息:
方法:
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中的原始类型吗?
谢谢,
伊塔马尔