Не найдена реализация для нативного

Я скомпилировал исходники 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.

Другие вопросы по тегам