web-dev-qa-db-fra.com

Android dimensions de la saveur du studio gradle, les variantes de construction ne fonctionnent pas correctement

J'ai deux dimensions d'une application, appelez ensuite le vert et le bleu. Il n'y aura que ces deux dimensions mais un nombre illimité de saveurs de produits. C'est comme ça que je l'installe en gradle

flavorDimensions "green", "blue"

productFlavors {

    one {
        applicationId "com.app.green.one"
        versionCode 1
        versionName "1.0.0.1";
        flavorDimension = "green"
    }
    two {
        applicationId "com.app.blue.two"
        versionCode 6
        versionName "1.0.1";
        flavorDimension = "blue"
    }
}

Mais après avoir synchronisé Gradle, dans l'onglet des variantes de construction, tout ce que je vois est oneTwoDebug et oneTwoRelease, où je devrais voir greenOneDebug greenOneRelease, blueTwoDebug, blueTwoRelease

En théorie, je veux que ce soit quelque chose comme ça

one {
    applicationId "com.app.green.one"
    versionCode 1
    versionName "1.0.0.1";
    flavorDimension = "green"
}
two {
    applicationId "com.app.blue.two"
    versionCode 6
    versionName "1.0.1";
    flavorDimension = "blue"
}
three {
    applicationId "com.app.green.three"
    versionCode 1
    versionName "1.0.0.1";
    flavorDimension = "green"
}
four {
    applicationId "com.app.blue.four"
    versionCode 6
    versionName "1.0.1";
    flavorDimension = "blue"
}

Dans ce cas, les dimensions représentent le "type" d'application, puis les saveurs sont plus pour les organisations qui peuvent être ajoutées.

** EDIT J'ai eu la mauvaise configuration pour Gradle comme indiqué ici est une description plus précise de ce que j'ai

flavorDimensions "type", "organization"

productFlavors {

    blue {
        applicationId "com.app.blue"
        flavorDimension = "type"
        versionCode 6
        versionName "1.0.1";
    }
    red {
        applicationId "com.app.red"
        flavorDimension = "type"
        versionCode 1
        versionName "1.0.0.1";
    }

    company1 {
        flavorDimension = "organization"
    }
    company2 {
        flavorDimension = "organization"
    }
}

Jusqu'à présent, cela fonctionne, donc je peux créer des répertoires source Java pour les types de basculement, mais que faire si je veux des fichiers de configuration spécifiques à l'organisation, dois-je créer Java dirs source pour chaque organisation également?

21
Brian

Je pense que vous avez mal compris le concept de flavourDimension.

Une flaveurDimension est quelque chose comme une catégorie de saveur et chaque combinaison d'une saveur de chaque dimension produira une variante.

Dans votre cas, vous devez définir une dimension flavour nommée "type" et une autre dimension nommée "organisation". Il produira, pour chaque saveur de la dimension "organisation" tout "type" possible (ou la double formulation: pour chaque "type" il produira une variante pour chaque organisation).

Les dimensions de saveur définissent le produit cartésien qui sera utilisé pour produire des variantes.


EDIT : Je vais essayer d'illustrer avec du code pseudo-gradle:

Définissons un "type": bronze, argent et or

Définissons quelques organisations: customerA, customerB, customerC

Tous ceux-ci sont ProductFlavors , mais ils appartiennent à 2 dimensions différentes:

flavorDimensions("type_line", "organization")
productFlavors {

    gold {
        ...
        dimension = "type_line"
    }
    silver {
        ...
        dimension = "type_line"
    }
    bronze {
         ...
        dimension = "type_line"
    }

     customerA {
        ...
        dimension = "organization"
    }
    customerB {
        ...
        dimension = "organization"
    }
    customerC {
         ...
        dimension = "organization"
    }

}

Cette configuration produira 18 (3 * 3 * 2) variantes (si vous avez les 2 types de build standard: debug et release):

gold-customerA-debug; Gold-customerA-release; or-customerB-debug; or-customerB-release; Gold-customerC-debug; Gold-customerC-release;

silver-customerA-debug; silver-customerA-release; silver-customerB-debug; silver-customerB-release; silver-customerC-debug; silver-customerC-release;

... (pareil pour le bronze)

Notez que le nom de la dimension est totalement arbitraire et n'a aucun impact sur les noms de variantes.

Les dimensions de saveur sont très puissantes, mais si vous en utilisez trop: cela entraîne une explosion exponentielle du nombre de variantes (une tâche de nettoyage post-construction peut être utile pour supprimer une variante inutile ou non sensée)

35
ben75