Ricerca…


Osservazioni

I sapori del prodotto supportano le stesse proprietà di defaultConfig questo perché defaultConfig appartiene effettivamente alla classe ProductFlavor. Ciò significa che è possibile fornire la configurazione di base per tutti gli aromi nel blocco defaultConfig {} e ciascun aroma può sovrascrivere uno qualsiasi di questi valori predefiniti, come ad esempio pplicationId .

Come configurare il file 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"
        }
    }
}

Costanti di sapore e risorse in build.gradle

Puoi usare gradle per avere costanti BuildConfig e valori res su base per flavor. Basta aggiungere il valore al sapore che vuoi supportare.

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 farà tutto il processo di fusione / override per te. Il codice generato ti permetterà anche di vedere da dove provengono i valori, ad es

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

e

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

Utilizzo della dimensione dell'aroma

Quando l'app è basata su più di un criterio, invece di creare molti aromi puoi definire le dimensioni dell'aroma.

Le dimensioni del sapore definiscono il prodotto cartesiano che verrà utilizzato per produrre varianti.

Esempio:

flavorDimensions("dimA", "dimB")

productFlavors {

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

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

Questa configurazione produrrà 18 (3 3 2) varianti (se hai i 2 tipi di build standard: debug e release ). Verranno create le seguenti varianti di costruzione:

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

L' ordine della dimensione è definito da android.flavorDimensions e le unità che hanno il sapore sovrascrivono l'altro , che è importante per le risorse quando un valore in un sapore sostituisce un valore definito in un aroma con priorità più bassa.

La dimensione dell'aroma è definita con priorità più alta prima. Quindi in questo caso:

dimA > dimB > defaultConfig

C'è anche una cartella sorgente "combinazione di sapori" disponibile quando si utilizza più di una dimensione di sapore. Ad esempio src/flavor1Flavor2/ .

  • Nota che questo è per tutte le combinazioni di tutte le dimensioni.
  • La sua priorità è superiore a quella dei sorgenti singole a sapore singolo, ma inferiore a quella dei tipi di build.

Aggiungi dipendenze per sapori

È possibile aggiungere diverse dipendenze per un determinato gusto del prodotto.

Basta usare il gruppo <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'
} 

Sviluppo e produzione di esempi di prodotti

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow