2015-01-22 15 views
18

Ho uno spazio di lavoro contenente diverse app e un progetto di libreria comune che sto cercando di convertire da Eclipse ad Android Studio e da Ant a Gradle. Attualmente, nei nostri script delle formiche, sostituiamo il testo in alcune delle nostre classi prima della compilazione, a seconda che la build sia a scopo di debug, QA, test di accettazione di Beta/Customer o destinati a essere rilasciati su Google Play.Utilizzare diversi tipi di build del modulo libreria nel modulo app Android in Android Studio e Gradle

Voglio sfruttare il sistema di varianti di build in Gradle e utilizzare risorse di valore (booleani, stringhe, ecc.) Per evitare che lo script di compilazione sostituisca il testo nelle mie classi.

Dal momento che la duplicazione dei diversi valori per tutti i tipi di build in tutti i prodotti della mia app sarebbe un problema di manutenzione, voglio inserirli nei tipi di build nella mia libreria comune. Ho provato questo, ma non importa quale tipo di build io uso nei miei moduli di app, il modulo app inserisce la build Release del modulo di libreria comune.

C'è un modo che è possibile ottenere i diversi tipi di build dei moduli di app per utilizzare il tipo di build corrispondente del modulo della libreria?

Questo è stato eseguito da Android Studio con la finestra dello strumento Varianti di generazione che mostra entrambi i moduli come utilizzando la variante di debug. L'immagine dovrebbe leggere il debug sia per l'app che per la libreria.

debug debug

risposta

4

Beh, Gradle Android plug semplicemente non può costruire il debug di version dei moduli della libreria dipendenti. Questo è un vecchio problema well-known e questo non è stato ancora risolto.
Puoi provare a utilizzare alcuni soluzioni alternative dalla discussione che ho citato, in particolare dare un'occhiata ai post # 35 e # 38.

+0

# 35 è la soluzione di cui la risposta di @Aleksander Ilic. – cren90

26

Documentazione tratta dal capitolo Library Publication in Gradle Plugin User Guide.

Per impostazione predefinita una biblioteca pubblica solo la sua variante rilascio. Questa variante verrà utilizzata da tutti i progetti che fanno riferimento alla libreria, indipendentemente dalla variante da loro stessi creata. Questa è una limitazione temporanea dovuta alle limitazioni di gradazione che stiamo lavorando per la rimozione.

Ad ogni modo, esistono soluzioni per questo problema.

Pubblica tutto - E 'possibile pubblicare tutte costruire varianti del vostro progetto di libreria aggiungendo seguente riga al progetto di libreria:

android { 
    publishNonDefault true 
} 

allora si dovrebbe modificare le dipendenze nel progetto di applicazione come segue:

dependencies { 
    releaseCompile project(path: ':yourLibrary', configuration: 'release') 
    debugCompile project(path: ':yourLibrary', configuration: 'debug') 

    // This is also possible 
    customCompile project(path: ':yourLibrary', configuration: 'custom') 
} 

Modifica impostazioni predefinite - È possibile modificare la varaint viene pubblicato dalla libreria con l'aggiunta seguente riga al vostro proje libreria ct:

android { 
    defaultPublishConfig "debug" 
} 

E in questo caso non c'è bisogno di cambiare le dipendenze di app perché sarà sempre ottenere debug variante build.

+0

Questa è la soluzione migliore attualmente. Grazie mille! – JohnWatsonDev

+0

Questa è la soluzione che abbiamo finito per utilizzare. È menzionato nel link nella risposta di @ aga. – cren90

+0

Molto pulito, non lo chiamerei soluzione alternativa – Benoit

1

Proprio collegamento https://issuetracker.google.com/issues/36967265

//in library Project build.gradle (lib): 
apply plugin: 'com.android.library' 

android { 
    publishNonDefault true 
... 
    buildTypes { 
     release { 
... 
     } 
     debug { 
... 
     } 
    } 
} 
dependencies { 
... 
} 


//in main Project build.gradle (application) 
apply plugin: 'com.android.application' 

android { 
... 
    buildTypes { 
     release { 
... 
     } 
     debug { 
... 
     } 
    } 
} 
dependencies { 
    debugCompile project(path: ':libName', configuration: "debug") 
    releaseCompile project(path: ':libName', configuration: "release") 
... 
} 
Problemi correlati