Suche…


Bemerkungen

Die Produktvarianten unterstützen dieselben Eigenschaften wie defaultConfig da defaultConfig tatsächlich zur ProductFlavor-Klasse gehört. Dies bedeutet , dass Sie die Basiskonfiguration für alle Aromen in dem zur Verfügung stellen können defaultConfig {} Block und jeder Geschmack jeden dieses Standardwertes, wie zum Beispiel des eines außer Kraft setzen kann pplicationId .

So konfigurieren Sie die build.gradle-Datei

android {
    ...
    defaultConfig {...}
    buildTypes {...}
    productFlavors {
        demo {
            applicationId "com.example.myapp.demo"
            versionName "1.0-demo"
        }
        full {
            applicationId "com.example.myapp.full"
            versionName "1.0-full"
        }
    }
}

Geschmackskonstanten und -ressourcen in build.gradle

Sie können gradle verwenden, um BuildConfig Konstanten und res Werte nach Geschmack zu erhalten. Fügen Sie einfach den Wert zu der Flavour hinzu, die Sie unterstützen möchten.

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 übernimmt das Zusammenführen / Überschreiben. Mit dem generierten Code können Sie auch sehen, woher die Werte kommen, z

<!-- Values from default config. -->
<string name="app_name" translatable="false">Default Name</string>

und

public final class BuildConfig {
    public static final String VERSION_NAME = "1.0";
    // Fields from product flavor: demo
    public static final boolean isDemo = true;
}

Flavor-Dimension verwenden

Wenn die App auf mehreren Kriterien basiert, können Sie, anstatt viele Geschmacksrichtungen zu erstellen, Geschmacksdimensionen definieren.

Die Geschmacksdimensionen definieren das kartesische Produkt, das zur Herstellung von Varianten verwendet wird.

Beispiel:

flavorDimensions("dimA", "dimB")

productFlavors {

    row1 {
        ...
        dimension = "dimA"
    }
    row2 {
        ...
        dimension = "dimA"
    }
    row3 {
         ...
        dimension = "dimA"
    }

    col1 {
        ...
        dimension = "dimB"
    }
    col2 {
        ...
        dimension = "dimB"
    }
    col3 {
         ...
        dimension = "dimB"
    }
}

Diese Konfiguration erzeugt 18 (3 3 2) Varianten (wenn Sie die 2 Standard-Build-Typen haben: debug und release ). Die folgenden Build-Varianten werden erstellt:

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

Die Reihenfolge der Dimension wird durch android.flavorDimensions definiert und bestimmt , welche Flavour die andere überschreibt , was für Ressourcen wichtig ist, wenn ein Wert in einem Flavour einen Wert ersetzt, der in einem Flavour mit niedriger Priorität definiert ist.

Die Geschmacksdimension wird zuerst mit höherer Priorität definiert. Also in diesem Fall:

dimA > dimB > defaultConfig

Wenn mehr als eine Geschmacksdimension verwendet wird, ist auch ein Quellordner "Flavour-Kombination" verfügbar. Zum Beispiel src/flavor1Flavor2/ .

  • Beachten Sie, dass dies für alle Kombinationen aller Dimensionen gilt.
  • Seine Priorität ist höher als bei den einzelnen Quellgruppen, aber niedriger als bei den Build-Typen.

Fügen Sie Abhängigkeiten für Geschmacksrichtungen hinzu

Sie können verschiedene Abhängigkeiten für eine bestimmte Produktart hinzufügen.

Verwenden Sie einfach die <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'
} 

Beispiel für die Entwicklung und Herstellung von Produktvarianten

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
        }
    }


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow