android-gradle
Configura gli aromi del prodotto
Ricerca…
Osservazioni
I sapori del prodotto supportano le stesse proprietà di defaultConfig
questo perché defaultConfig appartiene effettivamente alla classe ProductFlavor. Ciò significa che è possibile fornire la configurazione di base per tutti gli aromi nel blocco defaultConfig {}
e ciascun aroma può sovrascrivere uno qualsiasi di questi valori predefiniti, come ad esempio pplicationId
.
Come configurare il file build.gradle
android {
...
defaultConfig {...}
buildTypes {...}
productFlavors {
demo {
applicationId "com.example.myapp.demo"
versionName "1.0-demo"
}
full {
applicationId "com.example.myapp.full"
versionName "1.0-full"
}
}
}
Costanti di sapore e risorse in build.gradle
Puoi usare gradle per avere costanti BuildConfig
e valori res
su base per flavor. Basta aggiungere il valore al sapore che vuoi supportare.
android {
defaultConfig {
resValue "string", "app_name", "Full App"
buildConfigField "boolean", "isDemo", "false"
}
productFlavors {
demo {
resValue "String", "app_name", "Demo App"
buildConfigField "boolean", "isDemo", "true"
}
full {
// use default values
}
}
}
Gradle farà tutto il processo di fusione / override per te. Il codice generato ti permetterà anche di vedere da dove provengono i valori, ad es
<!-- Values from default config. -->
<string name="app_name" translatable="false">Default Name</string>
e
public final class BuildConfig {
public static final String VERSION_NAME = "1.0";
// Fields from product flavor: demo
public static final boolean isDemo = true;
}
Utilizzo della dimensione dell'aroma
Quando l'app è basata su più di un criterio, invece di creare molti aromi puoi definire le dimensioni dell'aroma.
Le dimensioni del sapore definiscono il prodotto cartesiano che verrà utilizzato per produrre varianti.
Esempio:
flavorDimensions("dimA", "dimB")
productFlavors {
row1 {
...
dimension = "dimA"
}
row2 {
...
dimension = "dimA"
}
row3 {
...
dimension = "dimA"
}
col1 {
...
dimension = "dimB"
}
col2 {
...
dimension = "dimB"
}
col3 {
...
dimension = "dimB"
}
}
Questa configurazione produrrà 18 (3 3 2) varianti (se hai i 2 tipi di build standard: debug
e release
). Verranno create le seguenti varianti di costruzione:
row1-col1-debug
row1-col2-debug
row1-col3-debug
row1-col1-release
row1-col2-release
row1-col3-release
row2-col1-debug
row2-col2-debug
row2-col3-debug
row2-col1-release
row2-col2-release
row2-col3-release
row3-col1-debug
row3-col2-debug
row3-col3-debug
row3-col1-release
row3-col2-release
row3-col3-release
L' ordine della dimensione è definito da android.flavorDimensions
e le unità che hanno il sapore sovrascrivono l'altro , che è importante per le risorse quando un valore in un sapore sostituisce un valore definito in un aroma con priorità più bassa.
La dimensione dell'aroma è definita con priorità più alta prima. Quindi in questo caso:
dimA > dimB > defaultConfig
C'è anche una cartella sorgente "combinazione di sapori" disponibile quando si utilizza più di una dimensione di sapore. Ad esempio src/flavor1Flavor2/
.
- Nota che questo è per tutte le combinazioni di tutte le dimensioni.
- La sua priorità è superiore a quella dei sorgenti singole a sapore singolo, ma inferiore a quella dei tipi di build.
Aggiungi dipendenze per sapori
È possibile aggiungere diverse dipendenze per un determinato gusto del prodotto.
Basta usare il gruppo <flavorName>Compile 'group:name:xyz'
syntax:
android {
...
productFlavors {
flavor1 {
//.....
}
flavor2 {
//.....
}
}
}
...
dependencies {
compile 'com.android.support:appcompat-v7:24.2.0'
// Add a dependency only for flavor1
flavor1Compile 'group:name:x.y.z'
// Add a dependency only for flavor2
flavor2Compile 'group:name:x.y.z'
}
Sviluppo e produzione di esempi di prodotti
productFlavors {
// Define separate dev and prod product flavors.
dev {
// dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
// to pre-dex each module and produce an APK that can be tested on
// Android Lollipop without time consuming dex merging processes.
minSdkVersion 21
}
prod {
// The actual minSdkVersion for the application.
minSdkVersion 15
}
}