Я пытаюсь использовать NDK с C++ и, может казаться, не получаю корректное соглашение о присвоении имен метода. мой собственный метод следующие:
extern "C" {
JNIEXPORT void JNICALL Java_com_test_jnitest_SurfaceRenderer_drawFromJni
(JNIEnv* env, jclass c)
{
//
}
}
с заголовком, обернутым в экстерна "C" {} aslo.
Все компилирует прекрасный, создает .so файл и копирует в, освобождает папку в соответствии с моим проектом, но когда я отлаживаю и работаю в Eclipse, я продолжаю получать сообщение кошки журнал та не из "никакой реализации, найденной для собственного компонента...". Есть ли что-то, что я пропускаю, как все примеры NDK находятся в C?
Спасибо.
Есть несколько вещей, которые могут привести к "реализация не найдена". Одна из них - неправильное имя прототипа функции, другая - невозможность загрузить .so вообще. Вы уверены, что System.loadLibrary()
вызывается до использования метода?
Если у вас не определена функция JNI_OnLoad
, вы можете создать ее и заставить ее выдавать сообщение журнала, чтобы убедиться, что либа подтягивается успешно.
Вы уже избежали самой распространенной проблемы - забыли использовать extern "C"
- так что это либо вышеупомянутое, либо какая-то небольшая ошибка в написании. Как выглядит декларация Java?
Есть cpp пример для приложений в ndk: https://android.googlesource.com/platform/development/+/marshmallow-release/ndk/platforms/android-5/samples/hello-gl2/jni/ gl_code.cpp