Android Spatialite中jsqlite.Database.internal_init中的java.lang.UnsatisfiedLinkError

我刚开始使用Android并使用Spatialite而无法弄清楚为什么我的应用程序因为这个错误而在一些设备上崩溃:

java.lang.UnsatisfiedLinkError:找不到void jsqlite.Database.internal_init()的实现(尝试过Java_jsqlite_Database_internal_1init和Java_jsqlite_Database_internal_1init__)
    at jsqlite.Database.internal_init(Native Method)
    在jsqlite.Database.(Database.java:25)

此崩溃报告来自带有Android 6.0的Nexus 5(hammerhead),但已在Xoom上报告了Android 4.1和其他一些未知设备.我认为它可能与这些问题中提到的NDK版本有关:

Adding “.so” library to my android studio project
Android NDK java.lang.UnsatisfiedLinkError: findLibrary returned null
https://bitbucket.org/almworks/sqlite4java/issues/71/arm64-bit.(虽然这是针对sqlite4java)

除此之外我还得到这个错误/警告(取决于设备):libjsqlite.so有文本重定位.这会浪费内存并防止安全性增强.请修理.虽然它没有像其他错误一样崩溃应用程序.

解决方法:

我通过设置应用程序built.gradle(或在AndroidManifest.xml中)解决了这个问题:

targetSdkVersion 21

它的工作原理!
我知道这不是一个好的解决方案,它是一个补丁,但我工作!

*** UPDATE

如果无法将目标版本更改为21,则可以执行以下操作:

>从以下网址下载源代码:https://github.com/geopaparazzi/geopaparazzi
>将项目中的所有引用清除为spatialite,.war文件和jndi库
>复制模块geopaparazzispatialitelibrary并集成到您的项目中
>清除模块中不需要的代码
>编译,享受您的项目目标版本23

这是一个复杂的过程,但它的工作原理.

特别感谢andrea antonello,他帮助我解决了这个问题,并且做了很好的工作.

相关文章

SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
安卓开发,利用SQLite实现登陆注册功能