2015-09-04 4 views
0

В настоящее время я работаю над созданием статической библиотеки C++ для использования JNI с помощью Android. Используя Visual Studio 2015's new support for Android C++ libraries, я смог создать динамическую библиотеку (.so) и потянул ее в Android Studio. Как только он был в соответствующем каталоге, он смог правильно связать, и мне удалось вызвать собственный метод.Статические библиотеки Android Studio 1.3 и C++

Однако, делая то же самое, но создавая библиотеку статический (.a), я постоянно получил UnsatisfiedLinkError, указывая на библиотеку не был найден приложением. Все остальное контролировалось (например, одинаковые настройки сборки, одинаковое расположение библиотеки в файловой системе и т. Д.).

Пробовал ли кто-нибудь еще? Есть ли что-то особенное, что нужно сделать, чтобы заставить Android Studio распознать .a?

+0

Я заметил кое-что интересное ... В реализации функции 'JNI_OnLoad', если я вернусь' JNI_VERSION_1_6', моя динамическая библиотека загружается, но если я вернусь 0x00010008 (который, кажется, что соответствует на 'JNI_VERSION_1_8', хотя я не уверен, потому что моя копия jni.h не определяет его), это не так. Согласно [документации JNI] (http://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/invocation.html#JNJI_OnLoad), возвращение чего-либо ниже, чем 'JNI_VERSION_1_8', не позволит для статической привязки. Но похоже, что эта версия еще не поддерживается в Visual Studio/Android Studio. – dadude999

ответ

0

Оказывается, Android Studio просто не поддерживает Java 8 (и вместе с ней поддерживает связывание статических библиотек C++). Итак, Microsoft немного опережает игру, поддерживая создание этих статических библиотек. Догадаться, что это динамическая связь на данный момент.

enter image description here

Смежные вопросы