Есть ли возможность использовать Android JNI в обычном Java приложении?

Есть библиотека скомпилированая для android как jni под все платформы, по сути so файлы. Пробую подключить эту библиотеку из обычного java приложения, вроде подключает, но выдает ошибку "liblog.so: cannot open shared object file: No such file or directory", т.к. в этой библиотеке есть такая зависимость. Установил потом android-liblog, android-liblog-dev но это не помогло, ошибка та же.
ldconfig -p | grep liblog ничего не выдает.
Исходники библиотеки закрыты, т.к. в библиотеке закрытый протокол. Хотелось бы его использовать без android. У библиотеки такие зависимости:
liblog.so
libz.so
libm.so
libstdc++.so
libc.so
libdl.so

Каким образом можно исправить зависимости? И возможно ли запустить эту библиотеку в обычном Java приложении?

UPD: Решил проблему через добавление переменной LD_LIBRARY_PATH в конфигурацию запуска. Но появилась новая проблема. /usr/lib/x86_64-linux-gnu/libm.so: invalid ELF header Какой пакет нужно установить? Ubuntu 64
  • Вопрос задан
  • 310 просмотров
Пригласить эксперта
Ответы на вопрос 2
@9arret
эмм а что мешает то использовать в обычном Java ? JNI - java native interface , он хоть в джаве хоть в анроиде
Ответ написан
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
С чего вы решили что вот так просто можно взять нативные библиотеки и перетащить их с одной платформы на другую без пересборки.
1) Необходимо чтобы совпадали архитектуры.
2) Необходимо чтобы совпадало окружение, т.е. ядро системы(если задействованы оттуда вызовы), библиотеки вокруг(опять же их версии и то что они не изменены в угоду конкретной ОС).
3) Соблюдены внешние API системы.

Условно вы можете подсунуть часть библиотек которые обычные(если это так и они не изменены):
liblog.so - могу ошибаться но это чисто андроидная либа и под обычным линуксом используется частично для какразтаки сборки нативных приложух под андроид но не как зависимость библиотек на линуксе.
libz.so - это zlib
libm.so - это часть libc. Снова лотерея, библиотека монструозная и можно сказать это второе ядро системы.
libc.so - см. libm.so
libdl.so - см. libm.so
libstdc++.so - даже думать не надо, легко найдете но опять же подойдет ли?
Места где они ищутся и под какими именами можете просимлинкать.

Можете представить что пытаетесь пересадить карбюратор ВАЗ на какой нибудь FIAT.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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