Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Spatialite中jsqlite.Database.internal_init中的java.lang.UnsatisfiedLinkError_Android_Sqlite_Android Ndk_Java Native Interface_Spatialite - Fatal编程技术网

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

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(本机方法

我刚开始为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版本有关:


. (尽管这是针对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