2013-12-11 17 views
9

Ho scaricato da git l'ultimo zBar QR Code Scanner (SDK 0.2). Sto cercando di implementarlo nella mia applicazione. Lavoro su Android Studio.ZBar - Scanner di codici QR, arresto anomalo in Android Studio

Che cosa ho fatto:

  1. ho copiato zBar.jar a librerie cartella del mio progetto.
  2. Ho creato file * .jar da "amerabi", "amerabi-v7a", "x86" inserendoli zip e modificandone il formato in * .jar.
  3. Ho copiato amerabi.jar, amerabi-v7a.jar e x86.jar nella cartella libs del mio progetto.
  4. Non è necessario modificare nulla in gradle perché è già configurato per importare ogni file jar da progetti libs. Vedi sotto:

    dependencies { 
        compile 'com.android.support:support-v4:18.0.+' 
        compile 'com.crashlytics.android:crashlytics:1.+' 
    
        compile fileTree(dir: 'libs', include: '*.jar') 
    
        compile project(':FacebookSDK') 
        compile project(':actionbarsherlock') 
        compile project(':Aviary-SDK') 
    } 
    
  5. Ogni forma di classe ZBar lib può essere visto così ho configurato tutto. Eseguo il mio ScannerActivity e onCreate ottengo l'errore in questa linea:

    scanner = new ImageScanner(); // this line shows an error 
    scanner.setConfig(0, Config.X_DENSITY, 3); 
    scanner.setConfig(0, Config.Y_DENSITY, 3); 
    

Così implementazione è di 1: 1 lo stesso come nell'esempio.

mio log degli errori:

java.lang.UnsatisfiedLinkError: Couldn't load zbarjni from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/pl.toptof.android.debug-2.apk"],nativeLibraryDirectories=[/data/app-lib/pl.toptof.android.debug-2, /vendor/lib, /system/lib]]]: findLibrary returned null 

Please help me con questo problema. Non so perché il mio Studio Android possa vedere lib ma non può usarlo nello stesso modo in cui viene utilizzato nell'esempio.

risposta

13

Penso che abbiate fatto un errore nelle vostre strutture di vasi. Se si vuole fare pacchetto jar da * .so librerie si consiglia di utilizzare questo tipo di struttura:

/lib/armeabi/*.so

Si tratta di directory ad esempio la struttura per la vostra biblioteca:

lib/ 
---/armeabi 
------/libiconv.so 
------/libzbarjni.so 

e ovviamente è necessario rinominare il pacchetto finale da lib.zip a armeabi.jar Nel tuo caso dovresti ripetere questo processo per armeabi-v7a e x86.

+0

Potete per favore elaborare? Non riesco a farlo funzionare e sto avendo lo stesso problema di @ F1sher –

+6

Lo farò, perché ho lo stesso problema e mi dà la risposta corretta. Quindi se usi Android studio allora crea 2 cartelle prima una è "lib". All'interno di lib creare una cartella "armeabi". All'interno della cartella armeabi vengono inseriti i file .so (libiconv.so e libzbarjni.so). quindi crea un archivio dalla cartella lib ... sarà lib.zip per esempio. Dopodiché dovrai rinominarlo in armeabi.jar. L'ultimo passo è copiare il tuo jar in libs e compilarlo in gradle. –

+0

anche io sto affrontando lo stesso problema mentre lavoro su eclipse, il progetto gira su dispositivi Android ma non su Android TV. Ho seguito i passaggi precedenti, ma i vasi stanno andando via non appena eseguo o costruisco il progetto. Qualche suggerimento ?? –

1

La soluzione è troppo complicata. Quello che ho fatto per farlo funzionare, era quello di utilizzare i file jar già compilati nella soluzione di esempio da this example. Copiali nella cartella lib e assicurati di aggiungerli nel file gradle. Tuttavia, la tua linea compile fileTree(dir: 'libs', include: '*.jar') dovrebbe fare il trucco.

1

Mettere le directory armeabi, armeabi-V7A, e x86 in una sotto-directory chiamata nativo-libs nella cartella di progetto principale. Quindi aggiungere queste impostazioni al tuo build.gradle di file:

android { 
    // other settings 
    sourceSets { 
      main { 
       jni.srcDirs=[] //to suppress makefiles autogeneration 
       jniLibs.srcDirs=['native-libs'] //native *.so in armeabi x86 and mips to include 
      } 
     } 
} 

Il .apk risultante dovrebbe avere le librerie native inclusi ora.

1

È meglio controllare se si dispone della versione più recente possibile di ZBar in dipendenze nel file app.gradle. Ottenere l'ultima versione ha funzionato per me e risolto tutti i problemi come non riuscire a trovare libzbarjni.so e libiconv.so

+0

Per me con 'compile 'me.dm7.barcodescanner: zbar: 1.9.3'' Continuo a ricevere l'errore –

+0

E hai" compile' net.jcip: jcip-annotations: 1.0 '"nella tua app.gradle ? Ho questi plus compileSdkVersion 25, minSdkVersion 16, buildToolsVersion "25.0.2" e ha funzionato per me. Non ho dovuto aggiungere nulla in più. – CottaLotties

+0

Non avevo questa dipendenza, ma ora l'ho aggiunto e il problema rimane. Puoi condividere la tua intera build, gradle in modo da poter confrontare? –

Problemi correlati