¿Cómo configuro el nombre de mi paquete de aplicación de Android basado en dos dimensiones de sabor diferentes?

Estoy construyendo mi aplicación para Android con el complemento Gradle. Estoy usando la función de sabores para crear cuatro variantes diferentes. Por el momento, es una dimensión única con cuatro valores, pero sería más lógico configurarlo como dos dimensiones con dos valores cada uno. Tengo ese edificio, pero aquí es donde me encuentro con problemas.

Necesito que cada una de las cuatro variantes tenga un nombre de paquete diferente. Los tres primeros son fáciles ya que tengo un valor predeterminado y cada dimensión puede anular el paquete, pero necesito establecer un nombre de paquete para cuando ambas dimensiones no predeterminadas estén en juego.

flavorDimensions "foo", "bar" productFlavors { boring.flavorDimension "foo" charm { flavorDimension "foo" packageName "com.example.charm" } strange { flavorDimension "bar" packageName "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" } } 

Traté de establecer después de la declaración por buscar la variante sabor compuesto, pero no tuve mucha suerte. No estoy muy familiarizado con Gradle, así que estoy seguro de que hay trucos que no he empleado. Alternativamente, tal vez podría especificar el nombre del paquete en src/charmStrange/AndroidManifest.xml y dejar que la fusión resolverlo? Parece que podría causar problemas en el futuro.

Ahora puede establecer applicationIdSuffix para productFlavors:

 android { productFlavors { free { applicationIdSuffix = ".free" } prod { } } } 

Fuente: http://android-developers.blogspot.ie/2015/12/leveraging-product-flavors-in-android.html

Tuve una pregunta similar esta respuesta no se prueba en mi caso estaba agregando el sabor del producto a la aplicación de id establecido por la otra dimensión, utilizando su ejemplo que añadiría .strange a paquete 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") } } 

Pero en su caso desea un nombre de paquete completo para algo así como

 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 podría necesitar ser CharmStrange, intenta jugar con él

Usted querrá establecer el applicationId, no el packageName:

  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" } } 
  • Gradle-android-scala-plugin da "No se encontró el constructor que coincide con" error
  • La construcción funciona en depuración, falla en la liberación - entrada duplicada ZipException
  • Android Studio Gradle Error - PreDexDebug
  • No se puede instalar la versión de depuración y de liberación en el mismo dispositivo
  • ¿Cómo veo las tareas de gradle ejecutadas por Android Studio?
  • Android Studio: Volver a cargar dependencias y sincronizar el proyecto
  • ¿Qué es dex en Gradle?
  • Getting Error "No se encontró el método DSL de Gradle: 'compile ()'" al sincronizar Build.Gradle
  • Problema con Android Studio Gradle después de actualizar a la versión 0.6.0
  • Gradle-experimental: 0.1.0 buildConfigField
  • ¿cómo puedo utilizar Android dexOptions?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.