0

Ich habe in der letzten Stunde versucht, einen Variablennamen wie FLAVOR_NAME in gradle.properties zu setzen und dann in build.gradle eine Art dynamischen dynamischen Namen zu verwenden . Noch kein Erfolg. Ist es überhaupt möglich, einen dynamischen Aromennamen zu haben? Ich meine, so etwas wie:Name der Android-App als Variable anstelle der statischen Zeichenfolge

$FLAVOR_NAME{ 
    versionName FLAVOR_VERSION 
    versionCode FLAVOR_CODE 
} 
+0

Wahrscheinlich nicht mit dieser Syntax, aber es sollte eine Möglichkeit in der DSL eine Methode aufrufen, die einen Geschmack basierend auf einer Variablen hinzufügt. Oder denken Sie daran, dass Ihre 'build.gradle' von etwas anderem ausgegeben wird, dass Code die Datei generiert, also sind Ihre Variablen in Ihrem Code-Generator, nicht' build.gradle' selbst. – CommonsWare

+0

@ Eloy_007 Würde es Ihnen etwas ausmachen, was Sie für eine 'build.gradle' Datei haben? Während flavourNames nicht wirklich dynamisch * sind, kann die [buildVariant] (https://developer.android.com/studio/build/build-variants.html) aus mehreren Flavor-Namen aufgebaut werden. – abest

+0

Ah vergiss ich am Ende Bash-Skripte, die dynamisch alle diese Namen für mich ersetzen. Es ist irgendwie scheiße, dass Gradle-Plugin das nicht unterstützt (zumindest für das, was ich sagen konnte) –

Antwort

2

@ Eloy_007,

Während Ihre Frage zu this one ähnlich ist, gibt es einige Nuancen in Frage, die ich folgendes denken beantworten.

Zunächst gibt es eine great article that you should read, wo der Autor (Coby Plain) geht um einen besseren Rahmen für die Arbeit mit Aromen. Außerdem hat die android10/Android-CleanArchitecture repo eine wirklich schöne Struktur zum Importieren von Gradle-Eigenschaften. Suchen Sie in buildsystem/dependencies.gradle und presentation/build.gradle nach Anleitung.

Das heißt, hier ist eine kurze Probe, welche Eigenschaften sieht aus wie importieren, wenn sie mit halb dynamic/importiert Aromen arbeiten:

In der gradle-Datei können wir eine externe Datei verweisen, die alle unsere verwandten hat definierten Eigenschaften zusammen und vielleicht einige einfache groovy Magie verwenden, um Strings zu verbinden usw.

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

Dann in der referenzierten properties.gradle Sie definieren flavors wie folgt:

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

Zumindest dies ermöglicht Ihnen Ihre Aromen außerhalb Ihrer build.gradle Datei definieren, so dass Sie die Menge an cruft minimze können Sie zu sichten haben. Plus, Major Key, hält die Revisionshistorie für die build.gradle Datei sauber.

HTH, viel Glück!

+0

Es hat tatsächlich viel geholfen. Danke @abset. Ich markiere es als akzeptiert. –

Verwandte Themen