Android Spatialite中jsqlite.Database.internal_init中的java.lang.UnsatisfiedLinkError
我刚开始为Android开发和使用Spatialite,我不明白为什么我的应用程序会因为这个错误而在一些设备上崩溃: java.lang.UnsatisfiedLinkError:未找到void jsqlite.Database.internal_init()的实现(尝试了java_jsqlite_Database_internal_1nit和java_jsqlite_Database_internal_1nit_1;) 位于jsqlite.Database.internal_init(本机方法) 在jsqlite.Database.(Database.java:25) 这个崩溃报告来自于安卓6.0的Nexus5(hammerhead),但在安卓4.1和其他一些未知设备的Xoom上也有报道。我认为可能与这些问题中提到的NDK版本有关:Android Spatialite中jsqlite.Database.internal_init中的java.lang.UnsatisfiedLinkError,android,sqlite,android-ndk,java-native-interface,spatialite,Android,Sqlite,Android Ndk,Java Native Interface,Spatialite,我刚开始为Android开发和使用Spatialite,我不明白为什么我的应用程序会因为这个错误而在一些设备上崩溃: java.lang.UnsatisfiedLinkError:未找到void jsqlite.Database.internal_init()的实现(尝试了java_jsqlite_Database_internal_1nit和java_jsqlite_Database_internal_1nit_1;) 位于jsqlite.Database.internal_init(本机方法
. (尽管这是针对sqlite4java的)
除此之外,我还收到了这个错误/警告(取决于设备):libjsqlite.so有文本重定位。这是在浪费内存并防止安全性增强。请修理。尽管它不会像其他错误那样使应用程序崩溃。我通过在应用程序
build.gradle
(或在AndroidManifest.xml)中设置以下内容来解决它:
而且它有效!
我知道这不是一个好的解决方案,这是一个补丁,但我工作
***更新
如果无法将目标版本更改为21,则可以执行以下操作:
- 从以下位置下载源代码:
- 清除项目中对spatialite、.war文件和jndi库的所有引用
- 复制模块
地理空间数据库
并集成到项目中
- 清除模块中不需要的代码
- 编译,并享受您的项目目标版本23
特别感谢andrea antonello,他帮助我解决了这个问题,并在spatialite方面做了大量工作。如果这可以帮助任何人解决同样的问题,我通过更新jni库解决了这个问题。为此,我下载了以下文件: 来自geopaparazzi github repo,其中包含截至目前最新版本的jni库 将SpatialItemAndroid库中的.so文件替换为存档文件中的文件
您可以在这里找到该库的所有版本:您能详细介绍一下
libjsqlite.so
您包含了哪些文件及其位置(jniLibs/XXX)?我将它们包含在src/main/jniLibs/armeabi、src/main/jniLibs/armeabi-v7a和src/main/jniLibs/x86中。就像这个例子一样。它在包括Nexus 5、Nexus 5X在内的一些设备上崩溃,但在其他一些设备上运行在我的三星S6 Edge上。。。在lib
文件夹中包含。是否包含库?是的。不过我刚搬回sqlite。谢谢你的帮助。
targetSdkVersion 21