android-gradle
Konfigurera produktsmak
Sök…
Anmärkningar
Produktsmakerna stöder samma egenskaper som defaultConfig
detta beror på att defaultConfig faktiskt tillhör klassen ProductFlavor. Detta betyder att du kan tillhandahålla baskonfigurationen för alla smaker i defaultConfig {}
-blocket, och varje smak kan åsidosätta något av dessa standardvärden, till exempel en pplicationId
.
Hur man konfigurerar build.gradle-filen
android {
...
defaultConfig {...}
buildTypes {...}
productFlavors {
demo {
applicationId "com.example.myapp.demo"
versionName "1.0-demo"
}
full {
applicationId "com.example.myapp.full"
versionName "1.0-full"
}
}
}
Smakkonstanter och resurser i build.gradle
Du kan använda gradle för att ha BuildConfig
konstanter och res
värden per smak. Lägg bara till värdet till den smak du vill stödja.
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 kommer att göra all sammanslagning / åsidosättning för dig. Den genererade koden låter dig också se var värden kommer från, t.ex.
<!-- Values from default config. -->
<string name="app_name" translatable="false">Default Name</string>
och
public final class BuildConfig {
public static final String VERSION_NAME = "1.0";
// Fields from product flavor: demo
public static final boolean isDemo = true;
}
Använda Flavor Dimension
När appen är baserad på mer än ett kriterium kan du i stället för att skapa många smaker definiera smakdimensioner.
Smakdimensionerna definierar den kartesiska produkten som kommer att användas för att producera varianter.
Exempel:
flavorDimensions("dimA", "dimB")
productFlavors {
row1 {
...
dimension = "dimA"
}
row2 {
...
dimension = "dimA"
}
row3 {
...
dimension = "dimA"
}
col1 {
...
dimension = "dimB"
}
col2 {
...
dimension = "dimB"
}
col3 {
...
dimension = "dimB"
}
}
Denna konfigurering kommer att producera 18 (3 3 2) varianter (om du har de två standardbyggnadstyperna: debug
och release
). Följande byggvarianter skapas:
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
Dimensionens ordning definieras av android.flavorDimensions
och driver vilken smak som åsidosätter den andra , vilket är viktigt för resurser när ett värde i en smak ersätter ett värde som definieras i en lägre prioriterad smak.
Smakdimensionen definieras först med högre prioritet. Så i det här fallet:
dimA > dimB > defaultConfig
Det finns också en "smakkombination" källmapp tillgänglig när mer än en smakdimension används. Till exempel src/flavor1Flavor2/
.
- Observera att detta gäller alla kombinationer av alla dimensioner.
- Dess prioritering är högre än källsatser med en enda smak, men lägre än byggtyper.
Lägg till beroenden för smaker
Du kan lägga till olika beroenden för en specifik produktsmak.
<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'
}
Exempel på utvecklings- och produktproduktsmak
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
}
}