我是开发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(锤头),但已在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具有文本重定位。这会浪费内存并防止安全性增强。请修理。虽然它不像其他错误那样使应用程序崩溃。
答案 0 :(得分:5)
我通过设置应用built.gradle
(或在AndroidManifest.xml中)解决了这个问题:
targetSdkVersion 21
它有效! 我知道这不是一个好的解决方案,它是一个补丁,但我的工作!
*** UPDATE
如果您无法将目标版本更改为21,则可以执行以下操作:
geopaparazzispatialitelibrary
并集成到您的项目中这是一个复杂的过程,但它确实有效。
特别感谢andrea antonello,他帮助我解决了这个问题,并且在使用spaceite时做得非常好。
答案 1 :(得分:1)
如果这可以帮助任何有同样问题的人,我通过更新jni库解决了这个问题。为此,我下载了这个文件:
来自geopaparazzi github repo,其中包含截至目前的最新版本的jni库。
将spatialiteandroid库中的.so文件替换为存档文件中的文件。
您可以在此处找到该库的所有版本:https://github.com/geopaparazzi/libjsqlite-spatialite-android/tree/master/archive: