2013-05-23 19 views
20

Próbuję dodać bibliotekę zewnętrzną, Scandit. Wciąż otrzymuję ten błąd:Dodawanie pliku .so w Androidzie 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) 
    ..... 

Zakładam, że to dlatego, że nie jestem właściwie w tym pliku .so, które pochodzi z biblioteki, ale nie mogę dowiedzieć się, jak to zrobić.

Używam Androida Studio i dodałem bibliotekę przechodząc do ustawień modułu -> biblioteki i dodałem katalog ze słoikiem oraz katalog z plikiem tak.

+0

jak można dodać '.so' i umieścić go na co katalog? – ariefbayu

+0

Właśnie dodałem katalog, w którym się znajduje, ponieważ nie wiem, jak go dodać. Oba znajdują się w/libs –

Odpowiedz

56

Możesz dodawać gotowe pliki * .so w Android Studio, używając gradacji 0.7.2+. Najpierw utwórz jniLibs w tej lokalizacji/aplikacji/src/main/location i skopiuj cały folder z plikami * .so (armeabi, armeabi-v7a, mips, x86) w jniLibs.

enter image description here

+3

Uratowałeś mi życie, próbuję 2½ godziny, działałem idealnie, wszystkie dziwne błędy zniknęły, dziękuję ci za podzielenie się swoją mądrością. @Josh Wilson Możesz oznaczyć jako rozwiązanie? – Florida

+0

@ TGMCians możesz pokazać nam kawałek kodu, który wymaga kompilacji plików .so. –

+2

Thaaaaaaaaaaaaaaaaaanks, że bardzo pomogłeś. – vrbsm

0

Myślę, że to problem nowego systemu budowania gradle. Wypróbuj rozwiązanie tego answer. Istnieje również link do dyskusji w grupie google, która opisuje rozwiązanie i problemy bardziej szczegółowe.

6

Aby użyć natywnej biblioteki (czyli pliki) trzeba dodać niektóre kody w „build.gradle” pliku.

Ten kod służy do usuwania katalogu "armeabi" i kopiowania plików "tak" do "armeabi", a "czysty projekt".

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

Zostałem odesłany z dołu. https://gist.github.com/pocmo/6461138

+1

Nie zapomnij dodać armeabi-v7 i x86! – datayeah

3

miałem folder libs w moim projekcie gdzie włączyłem zewnętrzne biblioteki dodana linia kompilacji fileTree (dir: „libs”, to: „* .jar”) w zależności {} w pliku zbudować Gradle użytkownika.

Następnie zrobiłem folder lib, a wewnątrz niego folder armeabi, w którym wstawiłem wszystkie potrzebne pliki .so. Następnie skompresowałem folder do pliku .zip (struktura wewnątrz pliku zip to teraz lib/armeabi/*. So) Zmieniłem nazwę pliku .zip na armeabi.jar i dodałem go do folderu libs jako bibliotekę zewnętrzną.

+0

Naprawdę chciałbym móc głosować jeszcze raz! Dziękuję Ci!!! – Bex

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

otrzymuję ten kod z facebook fresco biblioteki

+0

Czy ten kod nie dzieli części APK na mniejsze części, jak na systemy zależne, aby ogólny rozmiar apk został zmniejszony? – Jalpesh

Powiązane problemy