Вам не хватает слоя JNI в вашей C-части. Чтобы позволить нативному интерфейсу Java GetLibVersion()
найти подходящую функцию в C-части, вам нужно определить имя C-функции с помощью Java_ai_widya_mediatekso_JniLoader_GetLibVersion(JNIEnv *env, jobject thiz)
, как и сказал журнал аварий. Не пропустите параметры JNI в функции C.
Если вы хотите иметь точно такое же имя функции в части C, что и в части Java, вы можете зарегистрировать новое имя в JVM. Вызовите функцию ниже в вашем JNI_Onload ().
static int registerNativeMethods(JNIEnv* env)
{
jclass clazz;
const char* className = "ai/widya/mediatekso/JniLoader";
clazz = env->FindClass(className);
if (clazz == NULL) {
ALOGE("Native registration unable to find class '%s'", className);
return JNI_FALSE;
}
JNINativeMethod methods[] = {
{"GetLibVersion", "()V", (void*) GetLibVersion },
{"GetProtoVersion", "()V", (void*) GetProtoVersion },
};
if (env->RegisterNatives(clazz, methods, 2) < 0) {
ALOGE("RegisterNatives failed for '%s'", className);
return JNI_FALSE;
}
return JNI_TRUE;
}
И не забудьте добавить параметры JNI в ваши функции C, как это GetLibVersion(JNIEnv *env, jobject thiz)
.