【问题标题】:java.lang.UnsatisfiedLinkError in jsqlite.Database.internal_init in Android SpatialiteAndroid Spatialite 中 jsqlite.Database.internal_init 中的 java.lang.UnsatisfiedLinkError
【发布时间】:2016-07-16 09:45:18
【问题描述】:

我是为 Android 开发和使用 Spatialite 的新手,不知道为什么我的应用会因为这个错误而在一些设备上崩溃:

java.lang.UnsatisfiedLinkError: No implementation found for void jsqlite.Database.internal_init() (试过 Java_jsqlite_Database_internal_1init 和 Java_jsqlite_Database_internal_1init__) 在 jsqlite.Database.internal_init(本机方法) 在 jsqlite.Database.(Database.java:25)

此崩溃报告来自搭载 Android 6.0 的 Nexus 5(锤头),但在搭载 Android 4.1 的 Xoom 和其他一些未知设备上也有报告。我认为这可能与这些问题中提到的 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 有文本重定位。这会浪费内存并防止安全加固。请修复。虽然它不会像其他错误那样使应用程序崩溃。

【问题讨论】:

  • 您能否详细说明您包含哪些 libjsqlite.so 文件及其位置 (jniLibs/XXX)?
  • 我将它们包含在 src/main/jniLibs/armeabi、src/main/jniLibs/armeabi-v7a 和 src/main/jniLibs/x86 中。就像在示例中一样。它在一些设备上崩溃,包括 Nexus 5、Nexus 5X,但在我的三星 S6 Edge 上运行在其他一些设备上。
  • 如果你解压你的apk,你是否在lib文件夹中看到了armeabi等...包含.so库?
  • 是的。我刚搬回sqlite。谢谢你的帮助。

标签: android sqlite android-ndk java-native-interface spatialite


【解决方案1】:

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

targetSdkVersion 21

而且它有效! 我知道这不是一个好的解决方案,它是一个补丁,但我可以工作!

***更新

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

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

这是一个有点复杂的过程,但它有效。

特别感谢 andrea antonello,他帮助我解决了这个问题,并且在 spatialite 方面做得很好。

【讨论】:

    【解决方案2】:

    如果这可以帮助任何有同样问题的人,我通过更新 jni 库解决了这个问题。为此,我下载了这个文件:

    https://github.com/geopaparazzi/libjsqlite-spatialite-android/blob/master/archive/20150616.libjsqlite.4.3.0.tar.bz2

    来自 geopaparazzi github repo,其中包含截至目前最新版本的 jni 库。

    将 spatialiteandroid 库中的 .so 文件替换为存档文件中的文件。

    你可以在这里找到所有版本的库:https://github.com/geopaparazzi/libjsqlite-spatialite-android/tree/master/archive

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 2012-06-26
      • 1970-01-01
      • 2011-03-16
      相关资源
      最近更新 更多