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. Для этого я скачал этот файл:
из репозитория геопапарацци github, который содержит последнюю версию библиотек jni на данный момент.
Замените файлы.so в библиотеке пространственных данных и Android файлами в файле архива.
Вы можете найти все версии библиотеки здесь: https://github.com/geopaparazzi/libjsqlite-spatialite-android/tree/master/archive: