@nick0x01

Трабл в получении Java-классов java-библиотеки в нативном коде посредством Jni?

Собственно дано:

1. Java-библиотека с реализацией нужного функционала. (в том числе, в ней есть несколько классов методы которых отмечены как нативные).

2. Библиотека на плюсах, использующая функционал java-либы и реализующая нативные методы из нее. Все это с использованием Jni.

3. Есть android-приложение, в котором нужно все это использовать.


Java-либа была подключена в эклипсовсокм проекте, и в java-коде приложения я могу инстанцировать и использовать объекты классов из j-библиотеки. Но не могу использовать эти классы в нативном коде — классы просто не находятся (FindClass возвращает NULL). Jni-зависимый код работает (например, могу достучаться до MainActivity и попользовать его в нативе). Jni была инициализирована из MainActivity.

Возможно, это из-за того, что классы были загружены разными ClassLoader'ами (на сколько я себе представляю этот процесс в Java).

Кто уже сталкивался с такой проблемой? Может быть есть решение данной проблемы?

Переносить инициализацию jni в java-библиотеку из кода самого приложения очень не хочется (ибо это создаст зависимость java-либы от плюсового кода).
  • Вопрос задан
  • 3696 просмотров
Пригласить эксперта
Ответы на вопрос 1
makkarpov
@makkarpov
Вполне возможно, что из-за ClassLoader-ов, ведь это проявляется даже без JNI. В Java-коде такой класс тоже не будет найден, пока не будет явно указан ClassLoader (Class.forName(«package.Class», true, myLoader)).
Если я не ошибаюсь, то System.loadLibrary() загружает либу в контексте того класслоадера, который загрузил класс, вызывавший эту функцию. Так что вполне возможно, ваша J-либа и ваш основной код были загружены из разных класслоадеров, и System.loadLibrary был вызван из класслоадера с кодом — тогда библиотека не найдет JNI-методы, а JNI — не найдет библиотеку.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы