android-gradle
Konfiguruj smaki produktu
Szukaj…
Uwagi
Smaki produktu obsługują te same właściwości co defaultConfig
ponieważ defaultConfig faktycznie należy do klasy ProductFlavor. Oznacza to, że możesz podać konfigurację podstawową dla wszystkich smaków w bloku defaultConfig {}
, a każdy smak może zastąpić dowolną z tych wartości domyślnych, na przykład pplicationId
.
Jak skonfigurować plik 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"
}
}
}
Stałe smaku i zasoby w build.gradle
Możesz użyć gradle, aby mieć stałe BuildConfig
i wartości res
dla poszczególnych smaków. Po prostu dodaj wartość do smaku, który chcesz wesprzeć.
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 wykona za Ciebie wszystkie operacje łączenia / zastępowania. Wygenerowany kod pozwala również zobaczyć, skąd pochodzą wartości, np
<!-- Values from default config. -->
<string name="app_name" translatable="false">Default Name</string>
i
public final class BuildConfig {
public static final String VERSION_NAME = "1.0";
// Fields from product flavor: demo
public static final boolean isDemo = true;
}
Używanie wymiaru smaku
Gdy aplikacja jest oparta na więcej niż jednym kryterium, zamiast tworzyć wiele smaków, możesz zdefiniować wymiary smaków.
Wymiary smaku określają produkt kartezjański, który będzie używany do produkcji wariantów.
Przykład:
flavorDimensions("dimA", "dimB")
productFlavors {
row1 {
...
dimension = "dimA"
}
row2 {
...
dimension = "dimA"
}
row3 {
...
dimension = "dimA"
}
col1 {
...
dimension = "dimB"
}
col2 {
...
dimension = "dimB"
}
col3 {
...
dimension = "dimB"
}
}
Ta konfiguracja wygeneruje 18 (3 3 2) wariantów (jeśli masz 2 standardowe typy kompilacji: debug
i release
). Zostaną utworzone następujące warianty kompilacji:
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
Kolejność wymiaru jest zdefiniowana przez android.flavorDimensions
i napędy, których smak zastępuje inny , co jest ważne dla zasobów, gdy wartość w smaku zastępuje wartość zdefiniowaną w smaku o niższym priorytecie.
Wymiar smaku jest definiowany najpierw z wyższym priorytetem. Więc w tym przypadku:
dimA > dimB > defaultConfig
Dostępny jest również folder źródłowy „kombinacja smaku”, gdy używany jest więcej niż jeden wymiar smaku. Na przykład src/flavor1Flavor2/
.
- Pamiętaj, że dotyczy to wszystkich kombinacji wszystkich wymiarów.
- Jego priorytet jest wyższy niż zestawów źródeł pojedynczego smaku, ale niższy niż typy kompilacji.
Dodaj zależności dla smaków
Możesz dodać różne zależności dla określonego smaku produktu.
Wystarczy użyć <flavorName>Compile 'group:name:xyz'
składnia:
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'
}
Przykład opracowywania i produkcji smaków produktu
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
}
}