0

J'ai essayé depuis une heure de définir un nom de variable comme FLAVOR_NAME dans gradle.properties, puis de l'utiliser dans build.gradle pour avoir une sorte de nom de saveur dynamique . Pas encore de succès. Est-il même possible d'avoir un nom de saveur dynamique? Je veux dire quelque chose comme:Nom de la saveur de l'application Android en tant que variable au lieu de la chaîne statique

$FLAVOR_NAME{ 
    versionName FLAVOR_VERSION 
    versionCode FLAVOR_CODE 
} 
+0

Probablement pas avec cette syntaxe, mais il devrait y avoir un moyen dans la LIS d'appeler une méthode qui ajoute une saveur basée sur une variable. Ou, considérez votre 'build.gradle' comme une sortie de quelque chose d'autre qui génère du code, donc vos variables sont dans votre générateur de code, pas' build.gradle' lui-même. – CommonsWare

+0

@ Eloy_007 pourriez-vous coller ce que vous avez pour un fichier 'build.gradle'? Alors que les noms de saveurs ne sont pas vraiment dynamiques *, le [buildVariant] (https://developer.android.com/studio/build/build-variants.html) peut être construit à partir de plusieurs noms de saveurs. – abest

+0

Ah, je n'ai jamais fini d'utiliser des scripts bash qui remplacent dynamiquement tous ces noms pour moi. Ca craint que le plugin Gradle ne supporte pas cela (au moins pour ce que je pourrais dire) –

Répondre

2

@ Eloy_007,

Bien que votre question est semblable à this one, il y a quelques nuances dans votre question que je pense que le suivant répondra.

Tout d'abord, il y a un great article that you should read où l'auteur (Coby Plain) fournit un meilleur cadre pour travailler avec les saveurs. En outre, le android10/Android-CleanArchitecture repo a une structure très agréable pour l'importation des propriétés gradle. Regardez dans buildsystem/dependencies.gradle et presentation/build.gradle pour des conseils.

Cela dit, voici un échantillon rapide de ce que les propriétés importation ressemble lorsque vous travaillez avec semi-dynamique/ importés saveurs:

Dans le fichier gradle, nous pouvons référencer un fichier externe qui a tous nos associés propriétés définies ensemble et peut-être utiliser un peu de magie groovy simple à se joindre à cordes etc.

build.gradle:

apply from: "properties.gradle" // load in properties from some other file 

// ... plugins, etc. 

android { 
    // some other sections 
    productFlavors { 
     dev { 
      // you may want to keep some non-imported flavors. 
      // maybe you're working with flavor dimension here 
     } 

     // ... maybe more standard flavors 

     flavors.each {name, flavor -> 
      def wrapEscaped = { s -> "\"${s}\""} // simple function to wrap strings 
      "$name" { 
       applicationId flavor.applicationId 
       versionName "${some_version_number}" 

       buildConfigField "String", "MAJOR_KEY", wrapEscaped(flavor.majorKey) 
       buildConfigField "String", "ANOTHER_ONE", wrapEscaped(flavor.anotherOne) 
       buildConfigField "int", "PILLOW_COUNT", flavor.pillowCount 

       // ... additional configs 
      } 
     } 
    } 
} 

Puis dans la référence properties.gradle vous définissez flavors comme suit:

ext { 
    config = [ 
     baseId : "io.wethebest.mobile" 
    ] 

    flavors = [ 
     free : [ 
      applicationId: config.baseId + ".free", 
      majorKey  : "COCOA BUTTER", 
      anotherOne : "ANOTHER ONE", 
      pillowCount : 1, 
     ] 
     simple : [ 
      applicationId: config.baseId + ".simple", 
      majorKey  : "A HAMMOCK", 
      anotherOne : "ANOTHER ONE", 
      pillowCount : 10, 
     ], 
     paid : [ 
      applicationId: config.baseId, 
      majorKey  : "A JETSKI", 
      anotherOne : "ANOTHER ONE", 
      pillowCount : 100000000, 
     ] 
    ] 
} 

Au minimum, cela permet de définir vos goûts en dehors de votre fichier build.gradle afin que vous puissiez minimze la quantité de cochonneries que vous devez passer en revue. De plus, clé majeure, il conserve l'historique des révisions pour le fichier build.gradle propre.

HTH, bonne chance!

+0

Cela m'a vraiment beaucoup aidé. Merci @abset. Je le marque comme accepté. –