Не найдена реализация для нативного
Я скомпилировал исходники c с помощью android-ndk, затем поместил файл.so в папку libs моего проекта android, но когда я вызываю нативную функцию, у меня появляется ошибка "Не найдена реализация для нативной". Если я пытаюсь вызвать эту функцию из оболочки adb, все работает нормально, поэтому я не понимаю, почему эта ошибка. Пожалуйста, помогите, Андреа
2 ответа
Существует точная схема именования, связанная с JNI, которая не очень очевидна. Возможно, ваша функция не соответствует этому?
Например, если вы хотите иметь возможность вызывать встроенную функцию startServer из своего кода JAVA, предполагая, что ваш пакет называется com.example.something, а ваш класс называется MyClass, вы должны иметь функцию-член в своем классе JAVA, например, так:
private native void startServer();
И тогда ваша реализация JNI должна выглядеть так:
JNIEXPORT void Java_com_example_something_MyClass_startServer(JNIEnv *env, jobject obj) {
// Do something here...
}
В противном случае возникает ошибка связи.
Другая причина, по которой вы можете получить это, заключается в том, что вы не вызываете свою библиотеку во время выполнения вызова функции JNI:
static {
System.loadLibrary("myJNIFILE");
}
должен быть вызван где-то перед фактической ссылкой на функцию JNI.