2013-05-23 14 views
20

Ich versuche eine externe Bibliothek hinzuzufügen, Scandit. Ich erhalte diese Fehlermeldung:Hinzufügen einer .so-Datei in Android Studio

java.lang.UnsatisfiedLinkError: Couldn't load scanditsdk-android-3.3.1 from loader dalvik.system.PathClassLoader[dexPath=/data/app/com.clover.barcode2-1.apk,libraryPath=/data/app-lib/com.clover.barcode2-1]: findLibrary returned null 
    at java.lang.Runtime.loadLibrary(Runtime.java:365) 
    ..... 

ich es annehmen, ist, weil ich richtig bin nicht die .so-Datei enthält, die mit der Bibliothek kommt, aber ich kann nicht herausfinden, wie es zu tun.

Ich benutze Android Studio und ich habe die Bibliothek hinzugefügt, indem Sie zu Moduleinstellungen -> Bibliotheken und fügte das Verzeichnis mit dem Jar und das Verzeichnis mit der So-Datei.

+0

, wie Sie die '.so' und in welchem ​​Verzeichnis um es fügen? – ariefbayu

+0

Ich habe gerade das Verzeichnis hinzugefügt, in dem es sich befindet, weil ich nicht weiß, wie ich es hinzufügen soll. Sie befinden sich beide in/libs –

Antwort

56

Sie können vorgebaute * .so-Dateien in Android Studio mit Gradle 0.7.2+ hinzufügen. Erstellen Sie zuerst die jniLibs an diesem Ort/app/src/main/location und kopieren Sie den gesamten Ordner mit * .so-Dateien (armeabi, armeabi-v7a, mips, x86) in die jniLibs.

enter image description here

+3

Du hast mein Leben gerettet, ich versuche zu 2½ Stunden, hat perfekt gearbeitet, all die seltsamen Fehler sind weg, danke für deine Weisheit. @Josh Wilson Sie können als Lösung markieren? – Florida

+0

@TGMCians können Sie bitte zeigen Sie uns ein Stück Code, die zum Kompilieren von .so-Dateien benötigen. –

+2

Thaaaaaaaaaaaaaaanks Sie haben viel geholfen. – vrbsm

0

Ich denke, dass es ein Problem des neuen Gradle Build Systems ist. Versuchen Sie die Lösung dieser answer. Es gibt auch einen Link zu einer Google-Gruppendiskussion, die Lösung und die Probleme detaillierter beschreibt.

6

nativer Bibliothek verwenden (so Dateien) Sie müssen einige Codes in der "build.gradle" Datei hinzufügen.

Dieser Code dient zum Löschen des "armeabi" -Verzeichnisses und zum Kopieren von "so" -Dateien in "armeabi", während "Projekt bereinigen".

task copyJniLibs(type: Copy) { 
    from 'libs/armeabi' 
    into 'src/main/jniLibs/armeabi' 
} 
tasks.withType(JavaCompile) { 
    compileTask -> compileTask.dependsOn(copyJniLibs) 
} 
clean.dependsOn 'cleanCopyJniLibs' 

Ich wurde von unten verwiesen. https://gist.github.com/pocmo/6461138

+1

vergessen Sie nicht, Armea-v7 und x86 hinzuzufügen! – datayeah

3

Ich hatte einen libs Ordner in meinem Projekt, bei dem ich externe Bibliotheken enthalten die Linie kompilieren filetree hinzugefügt (dir: 'libs', schließen ein: * .jar ') in Abhängigkeiten {} in der Build-Datei gradle.

Dann habe ich einen Lib-Ordner erstellt und darin einen Armeabi-Ordner, in den ich alle benötigten .so-Dateien eingefügt habe. Ich habe dann den Ordner in eine ZIP-Datei gezippt (die Struktur in der ZIP-Datei ist jetzt lib/armeabi/*.) Ich habe die ZIP-Datei in armeabi.jar umbenannt und sie dem libs-Ordner als externe Bibliothek hinzugefügt.

+0

Ich wünschte wirklich, ich könnte das mehr als einmal abstimmen! Vielen Dank!!! – Bex

0
splits { 
    abi { 
     enable true 
     reset() 
     include 'x86', 'x86_64', 'arm64-v8a', 'armeabi-v7a', 'armeabi' 
     universalApk false 
    } 
} 

ich diesen Code von Facebook fresco Bibliothek

+0

Ist das nicht der Code für die Aufspaltung der APK in kleinere Teile wie von abhängigen Systemen, so dass die Gesamtgröße der Apk reduziert wird? – Jalpesh

Verwandte Themen