2013-06-06 20 views
12

Desidero integrare Zbar nella mia applicazione, ma non riesco a capire come ottenerlo utilizzando il nuovo Android Studio.Come cambiare la directory libs in Gradle?

Ho esaminato l'esempio e ho copiato il codice senza problemi. Il problema che sto avendo è l'aggiunta delle librerie al mio progetto non riesco a capire come farlo. Qualcuno potrebbe passarmi attraverso?

risposta

14

In realtà, la risposta di @ Michael è corretta, è anche obsoleta. Ora, usando Gradle tutto quello che dovete fare è aggiungere le righe di seguito nel file build.gradle:

android { 
... 
    sourceSets { 
    main.jniLibs.srcDirs = ['libs'] 
    test.jniLibs.srcDirs = ['libs'] 
    } 
} 

o direttamente mettere le librerie .so in:

src/main/jniLibs

In questo modo, quando si crea l'applicazione o la libreria, le librerie jni vengono copiate nel file .jar/.aar di destinazione.

+0

Sto anche cercando di integrare ZBar nella mia app e questo ha funzionato per me! –

+0

Hai salvato la mia giornata, grazie. –

21

Non sono particolarmente familiare con IntelliJ o Gradle ma l'ho capito. Ho usato ZBarAndroidSDK-0.2.

  1. Copiare il contenuto della cartella ZBar SDK libs/ nella cartella del progetto libs/.
  2. Modifica il tuo build.gradle (vedi sotto) per assicurarti che il jar e le librerie native siano inclusi nel tuo APK.
  3. Per rendere IntelliJ consapevole di ZBar, aggiungere zbar.jar nella struttura del progetto. Per fare ciò, vai su File > Project Structure > Libraries > + Sign > Java e trova zbar.jar con il selettore di file. Aggiungilo al tuo progetto

Aggiungere il seguente al vostro build.gradle (evitando di mettere qualsiasi altro dipendenze hai):

dependencies { 
    compile files('libs/android-support-v4.jar') 
    compile files('libs/zbar.jar') 
} 

task copyNativeLibs(type: Copy) { 
    from(new File('libs')) { include '**' } 
    into new File(buildDir, 'native-libs') 
} 

tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs } 

clean.dependsOn 'cleanCopyNativeLibs' 

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask -> 
    pkgTask.jniDir new File(buildDir, 'native-libs') 
} 

mio build.gradle si basa su questo succo: https://gist.github.com/khernyo/4226923.

+12

Con Gradle 0.7.2+ puoi mettere le tue librerie native direttamente in 'src/main/jniLibs' e funzionerà automaticamente. – shkschneider

+0

@shkschneider potresti approfondire ulteriormente? Metterei semplicemente i file .so e le loro cartelle nella cartella jniLibs/(jniLibs/armeabi/file.so), quindi rimetti zbar.jar nella cartella libs/e lo aggiungerai al file build.gradle? Grazie –

+3

@JohnShelley Esattamente: '.jar' va a' libs', '.so' va a' jniLibs'. Vedi https://stackoverflow.com/a/22488155/603270 – shkschneider

3

Se si utilizza il gradle 1.1.0, è necessario apportare alcune modifiche alla risposta di @ Michael. Ecco il codice modificato del file gradle che funziona per me.

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:22.0.0' 
    compile files('libs/zbar.jar') 
} 
task copyNativeLibs(type: Copy) { 
    from(new File('libs')) { include '**' } 
    into new File(buildDir, 'native-libs') 
} 
tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn copyNativeLibs } 

clean.dependsOn 'cleanCopyNativeLibs' 

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask -> 
    pkgTask.jniFolders = new HashSet<File>() 
    pkgTask.jniFolders.add(new File(buildDir, 'native-libs')) 
} 
-2

Ho costruito ZBarAndroidSDK-0.2 esempio in Android Studio 2.0, semplicemente aprendo progetto CameraTest dalla cartella esempio.

Ha ristrutturato automaticamente il progetto da eclipse ad Android Studio. È così.