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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow