【发布时间】: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