2013-05-23 19 views
20

Sto tentando di aggiungere una libreria esterna, Scandit. Continuo a ricevere questo errore:Aggiunta di un file .so in Studio Android

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) 
    ..... 

suppongo che sia perché io non includo correttamente il file .so che viene fornito con la libreria, ma non riesco a capire come farlo.

Sto utilizzando Android Studio e ho aggiunto la libreria andando alle impostazioni del modulo -> librerie e aggiunto la directory con il jar e la directory con il file così.

+0

come si fa ad aggiungere il '.so' e metterlo a ciò directory? – ariefbayu

+0

Ho appena aggiunto la directory in cui si trova perché non so come aggiungerlo. Si trovano entrambi in/libs –

risposta

56

È possibile aggiungere file preinstallati * .so in Android Studio utilizzando Gradle 0.7.2+. Prima crea i jniLibs in questa posizione/app/src/main/location e copia tutta la cartella con i file * .so (armeabi, armeabi-v7a, mips, x86) nei jniLibs.

enter image description here

+3

Hai salvato la mia vita da fratello, sto provando per 2 ore e mezza, ho funzionato perfettamente, tutti gli errori strani sono andati, grazie per aver condiviso la tua saggezza. @Josh Wilson Puoi segnare come soluzione? – Florida

+0

@TGMCians puoi mostrarci gradle pezzo di codice che richiede per compilare i file .so. –

+2

Thaaaaaaaaaaaaaaanks hai aiutato molto. – vrbsm

0

Penso che sia un problema del nuovo sistema di generazione gradle. Prova la soluzione di questo answer. C'è anche un collegamento a una discussione di gruppo su google, che descrive la soluzione ei problemi più dettagliati.

6

Per utilizzare nativo-biblioteca (così i file) È necessario aggiungere alcuni codici nel file "build.gradle".

Questo codice serve per pulire la directory "armeabi" e copiare i file "così" in "armeabi" mentre "progetto pulito".

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

Sono stato indirizzato dal basso. https://gist.github.com/pocmo/6461138

+1

non dimenticarti di aggiungere armeabi-v7 e x86! – datayeah

3

ho avuto una cartella librerie nel mio progetto in cui ho incluso librerie esterne aggiungono la linea di compilare FileTree (dir: 'librerie', sono: '* .jar') in dipendenze {} nel file di generazione del Gradle.

Quindi ho creato una cartella lib e al suo interno una cartella armeabi in cui ho inserito tutti i file .so necessari. Ho quindi zippato la cartella in un .zip (la struttura all'interno del file zip è ora lib/armeabi/*. Così) Ho rinominato il file .zip in armeabi.jar e l'ho aggiunto alla cartella libs come libreria esterna.

+0

Vorrei davvero poter votare più di una volta! Grazie!!! – Bex

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

ottengo questo codice dalla libreria affresco facebook

+0

Non è questo codice per dividere l'apk in parti più piccole in base ai sistemi dipendenti in modo che la dimensione complessiva degli apk venga ridotta? – Jalpesh

Problemi correlati