java.lang.UnsatisfiedLinkError в jsqlite.Database.internal_init в Android Spatialite

Я новичок в разработке для Android и использую Spatialite и не могу понять, почему мое приложение падает на нескольких устройствах из-за этой ошибки:

java.lang.UnsatisfiedLinkError: Реализация для void не найдена

Это сообщение о сбое от Nexus 5 (молоток) с Android 6.0, но о Xoom с Android 4.1 и нескольких других неизвестных устройствах. Я думаю, что это может быть связано с версиями NDK, как указано в этих вопросах:

Добавление библиотеки ".so" в мой проект студии android
Android NDK java.lang.UnsatisfiedLinkError: findLibrary вернул ноль https://bitbucket.org/almworks/sqlite4java/issues/71/arm64-bit. (хотя это для sqlite4java)

Кроме этого я также получаю эту ошибку / предупреждение (в зависимости от устройства): libjsqlite.so имеет перемещения текста. Это тратит память и предотвращает усиление безопасности. Пожалуйста исправьте. Хотя это не приводит к сбою приложения, как и другая ошибка.

2 ответа

Я решил это, установив в приложении built.gradle (или в AndroidManifest.xml) это:

targetSdkVersion 21

И это работает! Я знаю, что это не хорошее решение, это патч, но я работаю!

***ОБНОВИТЬ

Если вы не можете изменить целевую версию на 21, вы можете сделать следующее:

  • Загрузите исходный код с: https://github.com/geopaparazzi/geopaparazzi
  • Очистите все ссылки в вашем проекте на библиотеки пространственных объектов, файлов.war и jndi
  • Модуль копирования geopaparazzispatialitelibrary и интегрировать в свой проект
  • Очистите код, который вам не нужен, из модуля
  • Скомпилируйте и наслаждайтесь версией проекта 23

Это немного сложный процесс, но он работает.

Особенно благодаря Андреа Антонелло, он помог мне решить проблему и отлично справился с работой с пространством.

В случае, если это может помочь кому-то с той же проблемой, я решил это путем обновления библиотек jni. Для этого я скачал этот файл:

https://github.com/geopaparazzi/libjsqlite-spatialite-android/blob/master/archive/20150616.libjsqlite.4.3.0.tar.bz2

из репозитория геопапарацци github, который содержит последнюю версию библиотек jni на данный момент.

Замените файлы.so в библиотеке пространственных данных и Android файлами в файле архива.

Вы можете найти все версии библиотеки здесь: https://github.com/geopaparazzi/libjsqlite-spatialite-android/tree/master/archive:

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