2015-08-04 20 views
5

Sto lavorando con Android Studio e lo script gradle build. Quando ho intenzione di modificare alcune impostazioni ho bisogno di iterate alcuni campi. Ma non sono molto chiaro sullo difference tra all e each.Qual è la differenza tra "tutti" e "ciascuno" in gradle?

Ad esempio, ho cercato su google un codice per modificare il nome del file apk di output. Itera codice del applicationVariants dal all e variant.outputs da each:

applicationVariants.all { variant -> 
    variant.outputs.each { output -> 
     output.outputFile = new File(output.outputFile.parent, "MyApp.apk") 
    } 
} 

risposta

2

each è un costrutto scanalato pianura. È usato per iterare su un dato oggetto, non lo modifica (oggetto originale) e restituisce l'oggetto (invariato) al termine. Vedi:

assert [1, 2, 3] == [1, 2, 3].each { println it } 

Mentre all è un metodo aggiunto da Gradle sé. Quindi, il plugin android aggiunge l'estensione this, che ha il metodo getApplicationVariants. Poiché groovy consente di omettere get, è possibile utilizzare solo applicationVariants. Ora, l'estensione menzionata utilizza la classe this per mantenere la raccolta di varianti, che si estende - this. In quest'ultimo è definito il metodo all, per quanto vedo è solo un'elaborazione batch.

+0

Quindi 'each' è di sola lettura per il contenitore? Ma come funziona il codice, modificando 'output.outputFile'? – jayatubi

+0

Non esattamente :) Cambia lo stato interno dell'oggetto, può essere modificato. Per esempio. È possibile utilizzare ciascuno per ripetere un elenco di elenchi e aggiungere un elemento casuale a ogni elenco della raccolta. – Opal

+0

@jayatubi, è chiaro ora? In tal caso, si prega di accettare la risposta. – Opal

Problemi correlati