2015-06-26 8 views
21

Ho un problema in cui sto cercando di includere una libreria nel mio progetto chiamato ParseLoginUI.Fornito Dipendenza Gradle È AAR non JAR

Il problema è che utilizza il tag fornito anziché compilare. Credo che il tag fornito significhi che il progetto deve fornire questa dipendenza affinché la libreria funzioni, piuttosto che questa libreria che compila le librerie stesse.

Quindi nella mia libreria Android fa riferimento all'SDK di Facebook in questo modo.

provided 'com.facebook.android:facebook-android-sdk:4.0.1' 

Quindi nel mio mobile/build.gradle quale è il mio modulo principale, compilo gli sdks di Facebook in questo modo.

compile 'com.facebook.android:facebook-android-sdk:4.0.1' 

Ho seguito la guida per l'installazione di questa libreria e questo è il modo in cui si intende farlo. Ecco l'avviso che ottengo che mi impedisce di compilare il file ParseLoginUI/build.gradle (quello che lo fornisce).

Warning:Project ParseLoginUI: provided dependencies can only be jars. com.facebook.android:facebook-android-sdk:aar:4.0.1 is an Android Library. 

La documentazione per questa libreria ha una correzione che è:

Se si utilizza Gradle 1.1.0 o superiore, è possibile riscontrare "Warning: Progetto ParseLoginUI: fornito dipendenze possono essere solo com.facebook.android:facebook-android-sdk:aar:4.0.1 è una libreria Android ". È un problema aperto di Android gradle build tool. Attualmente il workround utilizza il gradle 1.0.0.

Abbastanza corretto ma non voglio eseguire il downgrade del mio gradle (attualmente in esecuzione v1.2.3) solo per risolvere questo problema. Ci deve essere un modo per aggirare questo o un modo migliore di farlo.

La mia domanda

Come posso includere il Facebook SDK sia nel modulo di libreria e il mio modulo principale?

+0

Ho lo stesso problema. Hai aggiustato? Grazie. – Ricardo

risposta

7

hai già detto che si tratta di un problema aperto in Gradle. Se si utilizza ParseLoginUI come modulo libreria. Basta cambiare il file build.gradle in ParseLoginUI stesso.

provided 'com.facebook.android:facebook-android-sdk:4.0.1' 
           to 
    compile 'com.facebook.android:facebook-android-sdk:4.0.1' 
+0

Con questa soluzione si ottengono più errori di file dex – StuStirling

+1

Non dare a Facebook sdk di compilazione nel progetto. Quindi non dovresti ricevere più errori di file dex – sowmia

+0

Finora funziona e questa è la soluzione più semplice. Potrei eventualmente avere ulteriori problemi in fondo alla strada, ma sta lavorando per ora – StuStirling

2

Secondo this issue, dovrebbe essere possibile fare con il plugin Gradle 1.3.0-beta3. Potrebbe essere necessario aggiornare gli strumenti di creazione alla versione 23.0.0 rc1 o successiva.

+0

Impossibile farlo funzionare. Modificati sia gli strumenti di compilazione per il modulo della mia app mobile su 23.0.0 rc2 che il mio percorso di classe per Gradle nel file 'build.grade' del mio progetto in' com.android.tools.build: grade: 1.3.0-beta3' e ogni volta che l'ho eseguito ho ricevuto un errore sul voto senza causa – StuStirling

0

invece di che,

  1. Clone ParseLoginUI da here

  2. Importa ParseLoginUI come modulo e comprendono questi su Gradle

    compile project(':ParseLoginUI') 
    compile 'com.facebook.android:facebook-android-sdk:4.0.1' 
    

Spero che questo aiuti

+0

Questo è quello che ho già fatto. Il problema è che ParseLoginUI contiene l'ambito fornito sull'SDK di Facebook. – StuStirling

2

Dopo aver provato, ho trovato la soluzione ...

Prima di tutto, AAR significa libreria di archivi Android, che non è un JAR. Ho cercato qualcosa chiamato facebook-android-sdk-4.0.1.jar, ma senza fortuna.

Il trucco è scaricare il codice di Facebook e aggiungerlo come modulo. In questo modo, funziona perfettamente e puoi utilizzare il gradle 1.2.3 con ParseLoginUI.

Vai qui: https://developers.facebook.com/docs/android/downloads

download: https://developers.facebook.com/resources/facebook-android-sdk-4.0.1.zip decomprimerlo.

Vai al tuo progetto. -Rimuovere in ParseLoginUI il riferimento a Parse

Premere FILE, NUOVO, MODULO DI IMPORTAZIONE.

Selezionare una cartella denominata facebook all'interno della zip non compressa.

chiamata quel modulo facebook-android-sdk-4.0.1.

Ora aggiungere nella vostra parseloginui una dipendenza a quel modulo, utilizzando:

compile project(':facebook-android-sdk-4.0.1’) 

È inoltre necessario copiare un file dal zip scaricato nella nuova cartella del modulo, il file è gradle.properties. Quello che ha:

ANDROID_BUILD_MIN_SDK_VERSION=9 

ANDROID_BUILD_TARGET_SDK_VERSION=21 

ANDROID_BUILD_TOOLS_VERSION=21.1.2 

ANDROID_BUILD_SDK_VERSION=21 

Questo è tutto.

Premere SINCRONIZZA e incrociare le dita.

Ho lavorato nel mio caso dopo diverse ore giocando con Gradle e Android Studio. Fammi sapere se capisci. Se hai problemi di riferimento (ho avuto), usa FILE, PROJECT STRUCTURE per aggiungere correttamente i riferimenti jar ai tuoi moduli. (Li ho scritti manualmente e sembra che fosse un errore nei miei riferimenti di analisi, probabilmente un percorso o un simbolo, non lo so. Farlo utilizzando l'interfaccia utente di Android Studio risolverà il problema). BTW, è possibile utilizzare una versione di analisi in ParseLoginUI e un'altra più recente nel progetto (non l'ho verificato per la versione di Facebook).

Questo è quello che ho nel mio ParseLoginUI lima Gradle:

compile 'com.parse.bolts:bolts-android:1.2.0' 

compile 'com.android.support:support-v4:22.0.0' 

compile project(':facebook-android-sdk-4.0.1') 

compile files('libs/Parse-1.9.1.jar') 

compile files('libs/ParseFacebookUtilsV4-1.9.1.jar') 

E questo è quello che ho nella mia app Gradle:

compile 'com.google.android.gms:play-services:7.5.0' 

compile project(':facebook-android-sdk-4.0.1') 

compile 'com.parse.bolts:bolts-android:1.2.0' 

compile files('libs/Parse-1.9.2/Parse-1.9.2.jar') 

compile files('libs/Parse-1.9.2/ParseFacebookUtilsV4-1.9.2.jar') 

compile project(':ParseLoginUI’) 

Nota: io uso Gradle versione 2.4 e plugin di Android versione 1.2.3. Seleziona quello in FILE, PROJECT STRUCTURE, PROJECT.

Buona fortuna.

+0

RE "AAR significa libreria di archivi Android, che non è un JAR": True AAR è un normale JAR _plus_ altre cose come asserzioni e meta dati Android. Se viene fornita una AAR, questa è generalmente la più sicura da usare. –

1

Si può provare questa sintassi:

fornite (nome: "", ext: 'AAR')

Assicurarsi che il build.gradle principale ha il percorso o maven repo al aar pacchetto che vuoi fornito.

0

Ho riscontrato questo problema con la calligrafia (github.com/chrisjenx/Calligraphy) e il gradle 2.3.3. Ho cambiato il repository da jcenter() a mavenCentral() e ora è ok!