2013-07-31 9 views
35

Ho un app androide con un certo numero di diversi sapori di prodotti configurati nel mio build.gradle file di esempioOttenere il sapore del prodotto o costruire variante in un app Android

productFlavors { 
    someFlavor {} 
    anotherFlavor {} 
} 

Nel mio codice di applicazione, voglio essere in grado per ottenere il nome del sapore attualmente compilato (o variante di costruzione). Una soluzione è questa:

productFlavors { 
    someFlavor { 
     buildConfig "public static final String PRODUCT_FLAVOR = \"someFlavor\";" 
    } 
    anotherFlavor { 
     buildConfig "public static final String PRODUCT_FLAVOR = \"anotherFlavor\";" 
    } 
} 

E poi nel mio Android app chiamata BuildConfig.PRODUCT_FLAVOR.

C'è un modo in cui posso ottenere gradle farlo automaticamente? O ci sono altre API in Android che posso usare per ottenere il nome del gusto del prodotto?

risposta

53

Modifica: questo viene ora eseguito automaticamente a partire dalla versione 0.7 del plug-in. BuildConfig.java volontà contiene

public static final String BUILD_TYPE = "debug"; 
public static final String FLAVOR = "f1Fa"; 
public static final String FLAVOR_group1 = "f1"; 
public static final String FLAVOR_group2 = "fa"; 

FLAVOR è il nome di variante in combinazione con tutte le dimensioni di sapore/gruppi applicate. Quindi ogni dimensione è disponibile come FLAVOR_<group name>.

Infine BUILD_TYPE contiene il nome del tipo di build utilizzato.

Se si dispone di un'unica dimensione di sapore, è disponibile solo la costante FLAVOR.

Questo è l'unico modo per farlo adesso.

Una cosa che potresti fare è automatizzarla. Quindi puoi fare qualcosa del genere:

android { 
    productFlavors.whenObjectAdded { flavor -> 
     flavor.buildConfig "public static final String PRODUCT_FLAVOR = \"${flavor.name}\";" 
    } 

    // your normal config here. 
} 

In questo modo non devi manualmente farlo per ogni sapore.

+0

Questo è esattamente quello che volevo - grazie. Ho scoperto che dovevo usare whenObjectAdded invece di whenAdded, quindi ho modificato la tua risposta, ma in fondo è corretto. – robd

+1

Grazie mille per aver aggiornato la tua risposta - utile! – robd

+0

Voglio ottenere la variante di build selezionata in build.gradle ma whenObjectAdded non funziona per me. Ecco quello che sto facendo: Android {{ productFlavors flavor1 {} \t \t flavor2 {}} productFlavors.whenObjectAdded {sapore -> println 'quando l'oggetto ha aggiunto:' + sapore } buildTypes { di debug {} rilascio {}} } – userv

6

La soluzione accettata è eccezionale. Per alcuni casi, un sostituto può essere utile però.

È possibile aggiungere un file di configurazione, ad esempio "Appconfig.java" al proprio prodotto Cartelle di origine specifiche per il settore di progettazione, ad esempio src/<productflavor>/java/<packagename>/Appconfig.java; puoi quindi utilizzare Appconfig.PRODUCT_FLAVOR nella tua app. Il compilatore ti manterrà onesto e assicurati di aggiungerlo per tutti i gusti.

Come ho già detto, in questo caso particolare, la soluzione accettata è probabilmente migliore poiché non è nemmeno necessario aggiungere nulla per nuovi prodotti, ma questo approccio potrebbe essere utile per altri casi.

Problemi correlati