Ich mache ein Cordova-Plugin, das eine einfache Wrapper für eine .jar-Datei und ihre zwei .so Abhängigkeiten wäre. Ich habe es vorher in einer normalen Android-Anwendung mit Android Studio versucht. Durch das Kopieren der nativen Bibliotheken in den jniLibs/armeabi-Ordner und die jar-Datei in libs/funktionierte es perfekt.Native Bibliothek nicht von Cordova apk geladen
Am Cordova Plugin habe ich die gleiche Ordnerstruktur erstellt und alles ist am selben Ort. In der plugin.xml habe ich die zwei Dateien in libs/armeabi kopiert, was funktioniert, denn wenn ich in die apk schaue, sind sie im "richtigen" Ordner.
Aber wenn ich versuche, das Plugin von der cordova Anwendung verwenden sie eine UnsatisfiedLinkError wirft, wenn es die native Bibliothek zu nennen versucht:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.ionicframework.*******-2/base.apk"],nativeLibraryDirectories=[/data/app/com.ionicframework.*******-2/lib/arm, /vendor/lib, /system/lib]]] couldn't find "libjni.so"
W/System.err(4224): at java.lang.Runtime.loadLibrary(Runtime.java:366)
W/System.err(4224): at java.lang.System.loadLibrary(System.java:988)
W/System.err(4224): at *******.<clinit>(ComIO.java:407)
W/System.err(4224): at *******.<init>(Printer.java:33)
W/System.err(4224): at net.terbe.dev.cordova.*******.print(*******.java:54)
W/System.err(4224): at *******.cordova.*******.execute(*******.java:42)
W/System.err(4224): at org.apache.cordova.CordovaPlugin.execute(CordovaPlugin.java:98)
W/System.err(4224): at org.apache.cordova.PluginManager.exec(PluginManager.java:132)
W/System.err(4224): at org.apache.cordova.CordovaBridge.jsExec(CordovaBridge.java:57)
W/System.err(4224): at org.apache.cordova.engine.SystemExposedJsApi.exec(SystemExposedJsApi.java:41)
W/System.err(4224): at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
W/System.err(4224): at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:53)
W/System.err(4224): at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err(4224): at android.os.Looper.loop(Looper.java:135)
W/System.err(4224): at android.os.HandlerThread.run(HandlerThread.java:61
Wo soll ich diese Bibliotheken kopieren?
Danke. Ich habe nur diese beiden .so-Dateien vom Gerätehersteller in einem Ordner namens Armeabi neben dem Glas. Und die arbeiten von dort aus, wenn ich die Test-App in Android Studio mit der gleichen Ordnerstruktur baue. Ich werde versuchen, sie auch in die anderen Verzeichnisse zu kopieren. In der Ausnahme ist ein Ordner/lib/arm/aufgeführt. Bedeutet es, dass es versucht, sie von dort zu laden? –
Perrier
Sie hatten Recht. Ich musste die Binärdatei nur in libs/armeabi-v7a anstatt in libs/armeabi kopieren. Danke für Ihre Hilfe! – Perrier
Dies funktioniert nicht für mich, wie ich in https://stackoverflow.com/questions/45546988/so-library-not-loaded-from-cordova-apk erklären. @Perrier können Sie bitte angeben, welche Cordova-Version und Android API-Ebene Sie verwenden? Vielen Dank! – franDayz