2014-05-15 7 views
5

Ich baue meine Android-App mit dem Gradle-Plugin. Ich verwende die Flavors-Funktion, um vier verschiedene Varianten zu erstellen. Im Moment ist es eine einzelne Dimension mit vier Werten, aber es wäre logischer, sie als zwei Dimensionen mit jeweils zwei Werten einzurichten. Ich habe dieses Gebäude, aber hier stoße ich in Schwierigkeiten.Wie lege ich den Namen meines Android-App-Pakets basierend auf zwei verschiedenen Flavor-Dimensionen fest?

Ich brauche jede der vier Varianten, um einen anderen Paketnamen zu haben. Die ersten drei sind einfach, da ich einen Standard habe und jede Dimension das Paket überschreiben kann, aber ich muss einen Paketnamen festlegen, wenn beide nicht standardmäßige Dimensionen im Spiel sind.

Ich versuchte es nach der Deklaration durch Nachschlagen der komponierten Geschmacksvariante, aber ich hatte nicht viel Glück. Ich kenne Gradle nicht sehr gut, also bin ich sicher, dass es Tricks gibt, die ich nicht angewandt habe. Alternativ könnte ich vielleicht den Paketnamen in src/charmStrange/AndroidManifest.xml angeben und die Zusammenführung damit umgehen lassen? Das scheint in der Zukunft Probleme zu verursachen.

+2

den Namen im Manifest nicht gesetzt Sie Es wird während des Gradle-Build-Prozesses überschrieben. – Dre

+0

Wie unterscheiden sich die Dimensionen? Warum können Sie keinen einzelnen Paketnamen verwenden? Wie viel Platz sparen Sie wirklich mit dieser Strategie? –

+0

@StephanBranczyk Sie unterscheiden sich in etwas anderen Geschäftsregeln, so dass ein einzelnes APK nicht in Frage kommt. Zum Glück für mich, eine dieser Achsen ist seitdem verschwunden, so ist die Frage strittig. Obwohl ich immer noch neugierig auf eine Antwort bin. – Argyle

Antwort

0

Sie wollen die applicationId setzen, nicht die package:

productFlavors { 
     boring.flavorDimension "foo" 
     charm { 
      flavorDimension "foo" 
      applicationId "com.example.charm" 
     } 
     strange { 
      flavorDimension "bar" 
      applicationId "com.example.strange" 
     } 
     // This is the idea of what I want, but it doesn't work because there 
     // must be only a single dimension specified here. 
     charmStrange { 
      flavorDimension "foo", "bar" 
      packageName "com.example.charminglystrange" 
     } 
    } 
+0

Seit ich die Frage geschrieben habe, hat sich der Name dieser Variablen geändert. Die grundlegende Natur der Frage hat jedoch nicht. – Argyle

1

hatte ich eine ähnliche Frage diese Antwort in meinem Fall nicht getestet wurde ich das Produkt Geschmack der App-ID durch den Satz anhängen andere Dimension, Ihrem Beispiel verwenden würde es anhängen .strange com.example.charm

android.applicationVariants.all { variant -> 
    def flavorString = variant.getVariantData().getVariantConfiguration().getFlavorName() 
    def mergedFlavour = variant.getVariantData().getVariantConfiguration().getMergedFlavor(); 
    def appId = variant.getVariantData().getVariantConfiguration().getApplicationId(); 

    if(flavorString.contains("Strange")) { 
     mergedFlavour.setApplicationId(appId + ".strange") 
    } 


} 

aber in Ihrem Fall, dass Sie einen vollständigen Paketnamen zu verpacken, so etwas wie

android.applicationVariants.all { variant -> 
    def flavorString = variant.getVariantData().getVariantConfiguration().getFlavorName() 
    def mergedFlavour = variant.getVariantData().getVariantConfiguration().getMergedFlavor(); 
    def appId = variant.getVariantData().getVariantConfiguration().getApplicationId(); 

    if(flavorString.contains("charmStrange")) { 
     mergedFlavour.setApplicationId("com.example.charminglystrange) 
    } 


} 

charmStrange könnte CharmStrange sein müssen, versuchen Sie mit ihm spielen

+0

danke, tolle Arbeit – xitx

Verwandte Themen