2016-03-29 12 views
3

Ich bin neu für Android zu entwickeln und einzusetzen SpatiaLite und kann nicht herausfinden, warum mein app auf ein paar Geräte abstürzt aufgrund dieses Fehlers:java.lang.UnsatisfiedLinkError in jsqlite.Database.internal_init in Android SpatiaLite

java.lang.UnsatisfiedLinkError: keine Implementierung für nichtig jsqlite.Database.internal_init() (versuchte Java_jsqlite_Database_internal_1init und Java_jsqlite_Database_internal_1init__) bei jsqlite.Database.internal_init (Mutter Methode) bei jsqlite.Database gefunden (Database.java:25).

Dieser Absturzbericht stammt von einem Nexus 5 (Hammerhead) mit Android 6.0, wurde aber auf Xoom mit Android gemeldet 4.1 und ein paar andere unbekannte Geräte. Ich denke, es ist vielleicht zu NDK-Versionen verwendet werden, wie in diesen Fragen erwähnt:

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. (obwohl dies für sqlite4java ist)

Ansonsten bekomme ich auch diesen Fehler/Warnung (je nach Gerät): libjsqlite.so hat Text Umzüge. Dies verschwendet Speicher und verhindert eine Sicherheitsverhärtung. Bitte repariere. Obwohl es die App nicht wie der andere Fehler abstürzt.

+0

Könnten Sie Details geben, was 'libjsqlite.so' Dateien haben Sie enthalten und deren Lage (jniLibs/XXX)? – antonio

+0

Ich habe sie bei src/main/jniLibs/armeabi, src/main/jniLibs/armeabi-v7a und src/main/jniLibs/x86 aufgenommen. Genau wie im Beispiel. Es stürzt auf einigen Geräten ab, einschließlich Nexus 5, Nexus 5X, läuft aber auf meinem Samsung S6 Edge auf einigen anderen. – Jisike

+0

Wenn Sie Ihre apk dekomprimieren, sehen Sie Armea, etc ... im 'lib'-Ordner mit den' .so' Bibliotheken? – antonio

Antwort

4

ich es gelöst, indem sie in der App Einstellung built.gradle (oder im AndroidManifest.xml) diese:

targetSdkVersion 21 

Und es funktioniert! Ich weiß, dass es keine gute Lösung ist, es ist ein Patch, aber ich arbeite!

*** UPDATE

Wenn Sie die Zielversion auf 21 ändern können, können Sie folgendes tun:

  • den Code Quelle von herunterladen: https://github.com/geopaparazzi/geopaparazzi
  • Reinigen Sie alle Referenzen in Ihr Projekt zu spatialite, .war-Datei und jndi-Bibliotheken
  • Kopieren Sie das Modul geopaparazzispatialitelibrary und integrieren Sie in Ihr Projekt
  • Reinigen Sie den Code, den Sie brauchen nicht aus dem Modul
  • Compilieren und Projekt-Version 23

Es ist ein bisschen komplexer Prozess, aber es funktioniert Targeting genießen.

Speziell dank Andrea Antonello, er hilft mir, das Problem zu lösen, und eine gute Arbeit mit spatialite.

1

Falls dies jemand mit dem gleichen Problem helfen kann, habe ich dies gelöst, indem ich die jni-Bibliotheken aktualisiert habe. Dazu heruntergeladen ich diese Datei:

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

vom geopaparazzi GitHub Repo, die die neueste Version der jni Bibliotheken ab sofort enthält.

Ersetzen Sie die SO-Dateien in der Spatialiteandroid-Bibliothek durch die in der Archivdatei.

Sie können alle Versionen der Bibliothek finden Sie hier: https://github.com/geopaparazzi/libjsqlite-spatialite-android/tree/master/archive:

Verwandte Themen