Multi sabor app basado en la biblioteca de múltiples sabores en Android Gradle

Mi aplicación tiene varios sabores para varios mercados en los sistemas de facturación de aplicaciones.

Tengo una sola biblioteca que comparte el código base para todos mis proyectos. Así que decidí agregar los sistemas de pago a esta biblioteca como sabores de productos.

La pregunta es ¿Puede la librería android tener sabores de producto?

Si es así, ¿cómo puedo incluir diferentes sabores en el sabor de la aplicación?

Busqué mucho, y no pude encontrar nada sobre este escenario. Lo único que encontré fue lo siguiente en http://tools.android.com/tech-docs/new-build-system/user-guide :

dependencies { flavor1Compile project(path: ':lib1', configuration: 'flavor1Release') flavor2Compile project(path: ':lib1', configuration: 'flavor2Release') } 

He cambiado la configuración a diferentes cosas, pero no funcionó!

Estoy usando android studio 0.8.2.

Finalmente me enteré de cómo hacer esto, lo explicaré aquí para otros que enfrentan el mismo problema:

La parte clave es establecer publishNonDefault como true en la biblioteca build.gradle, entonces debe definir las dependencias como lo sugiere la guía del usuario.

Todo el proyecto sería así:

Biblioteca build.gradle:

 apply plugin: 'com.android.library' android { .... publishNonDefault true productFlavors { market1 {} market2 {} } } 

Proyecto build.gradle:

 apply plugin: 'com.android.application' android { .... productFlavors { market1 {} market2 {} } } dependencies { .... market1Compile project(path: ':lib', configuration: 'market1Release') market2Compile project(path: ':lib', configuration: 'market2Release') } 

Ahora puede seleccionar el panel de sabor de la aplicación y las variantes de creación y la biblioteca se seleccionará en consecuencia y todas las compilaciones y ejecuciones se realizarán en función del sabor seleccionado.

Si tienes varios módulos de aplicación basados ​​en la biblioteca, Android Studio se quejará del conflicto de selección de variantes, está bien, solo ignóralo.

Introduzca aquí la descripción de la imagen

Hay un problema con la respuesta de Ali . Estamos perdiendo una dimensión muy importante en nuestras variantes de construcción. Si queremos tener todas las opciones (en mi ejemplo a continuación 4 (2 x 2)) sólo tenemos que agregar configuraciones personalizadas en el módulo principal build.gradle archivo para poder utilizar todos los multi-sabor multi-buildType en Build Variants . También tenemos que establecer publishNonDefault true en el módulo de biblioteca build.gradle file.

Ejemplo de solución:

Librería

 android { publishNonDefault true buildTypes { release { } debug { } } productFlavors { free { } paid { } } } 

App build.gradle

 android { buildTypes { debug { } release { } } productFlavors { free { } paid { } } } configurations { freeDebugCompile paidDebugCompile freeReleaseCompile paidReleaseCompile } dependencies { freeDebugCompile project(path: ':lib', configuration: 'freeDebug') paidDebugCompile project(path: ':lib', configuration: 'paidDebug') freeReleaseCompile project(path: ':lib', configuration: 'freeRelease') paidReleaseCompile project(path: ':lib', configuration: 'paidRelease') } 

Por el momento no es posible, aunque si recuerdo correctamente es una característica que quieren agregar. (Editar 2: link , link2 )

Edit: Por el momento estoy usando la opción defaultPublishConfig para declarar qué variante de biblioteca se publica:

 android { defaultPublishConfig fullRelease defaultPublishConfig demoRelease } 

También puede usar esto para tener compilaciones dependientes del sabor:

 ext { flavorType = "" } gradle.startParameter.getTaskNames().each { task -> if(task.contains("flavor1")){ flavorType = "flavor1" } else if (task.contains("flavor2")){ flavorType = "flavor2" } else { flavorType = "flavor3" } } if(flavorType == 'flavor1' || flavorType == 'flavor2') { compile 'com.android.support:support-v4:18.0.+' } 

Para obtener los sabores que funcionan en una biblioteca AAR, debe definir defaultPublishConfig en el archivo build.gradle de su módulo de la Biblioteca de Android.

Para obtener más información, consulte: Publicación de la biblioteca .

Publicación de la biblioteca

De forma predeterminada, una biblioteca sólo publica su variante de versión. Esta variante será utilizada por todos los proyectos que hacen referencia a la biblioteca, independientemente de la variante que construyan ellos mismos. Esta es una limitación temporal debido a las limitaciones de Gradle que estamos trabajando para eliminar. Puede controlar qué variante se publica:

Android {defaultPublishConfig "depuración"}

Tenga en cuenta que este nombre de configuración de publicación hace referencia al nombre completo de la variante. Liberar y depurar sólo son aplicables cuando no hay sabores. Si desea cambiar la variante publicada predeterminada mientras usa los sabores, escribiría:

Android {defaultPublishConfig "flavor1Debug"}

  • ¿Cómo ejecutar la prueba de unidad en un módulo de Android?
  • Cómo comprobar cuál es la última versión de una dependencia para usar en gradle
  • El script de compilación de gradle de Android devuelve el error 137 en preDexDebug
  • La compilación de Android studio falló con el siguiente error
  • Cómo especificar lesiones para proguard dentro de android gradle archivos de compilación para las bibliotecas que se extraen de maven central
  • Cómo configurar gradle-2.2.1-all.zip manualmente
  • No hay carpeta de bundle de liberación después de actualizar Android Studio
  • Una biblioteca utiliza el mismo paquete que este proyecto después de importar Facebook SDK
  • Creación y ejecución de aplicaciones a través de Gradle y Android Studio 2.0 es más lento
  • Rebuild necesario después de cambiar los archivos de diseño xml en Android Studio
  • Exportar un proyecto eclipse como gradle
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.