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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow