Mi aplicación tiene varios sabores para varios mercados de sistemas de facturación dentro de la aplicación.
Tengo una única biblioteca que comparte el código base de todos mis proyectos. Así que decidí agregar esos sistemas de pago a esta biblioteca como sabores de productos.
La pregunta es ¿puede la biblioteca de Android tener sabores de productos?
Si es así, ¿cómo puedo incluir diferentes sabores en el respectivo sabor de la aplicación?
Busqué mucho y no pude encontrar nada sobre este escenario. Lo único cercano que encontré fue esto 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')
}
Cambié la configuración a diferentes cosas, ¡pero no funcionó!
Estoy usando Android Studio 0.8.2.
3.4.2
versión y gradle a la última5.5.1
, aún falló con el tiempo de compilación o la vinculación de recursos falló en aapt, o no puedo encontrar el símbolo que está dentro de la biblioteca móduloRespuestas:
Finalmente descubrí cómo hacer esto, lo explicaré aquí para otros que enfrentan el mismo problema:
La parte clave es establecer publishNonDefault en true en la biblioteca build.gradle, luego debe definir las dependencias como lo sugiere la guía del usuario.
Todo el proyecto sería así:
Biblioteca build.gradle:
proyecto build.gradle:
Ahora puede seleccionar el tipo de aplicación y el panel de Variantes de compilación y la biblioteca se seleccionará en consecuencia y toda la compilación y ejecución se realizará en función del tipo seleccionado.
Si tiene varios módulos de aplicaciones basados en la biblioteca, Android Studio se quejará del conflicto de selección de variantes, está bien, simplemente ignórelo.
fuente
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)) solo tenemos que agregar configuraciones personalizadas en el archivo build.gradle del módulo principal para poder usar todos los tipos de compilación múltiples de varios tipos en
Build Variants
. También tenemos que establecer publishNonDefault como verdadero en el archivo build.gradle del módulo de biblioteca .Solución de ejemplo:
Lib build.gradle
App build.gradle
fuente
Error:java.lang.RuntimeException: Error: more than one library with package name
, ocurrióActualización para el complemento de Android 3.0.0 y superior
De acuerdo con la documentación oficial de Android - Migre configuraciones de dependencia para módulos locales ,
Entonces, en la respuesta de Ali, cambia
a
Y el complemento se encargará de las configuraciones específicas de variantes automáticamente. Espero que ayude a otros a actualizar Android Studio Plugin a 3.0.0 y superior.
fuente
Mi complemento de Android es 3.4.0, y encuentro que no necesita configuraciones ahora. Todo lo que necesita es asegurarse de que el flavourDimensions y productFlavors en la aplicación contenga un productFlavor del mismo flavourDimensions y productFlavors en las bibliotecas. Para muestra:
En el build.gradle de mylibrary
build.gradle de la aplicación:
Después de la sincronización, puede cambiar todas las opciones en la ventana Build Variants:
fuente
Para que los sabores funcionen en una biblioteca AAR, debe definir defaultPublishConfig en el archivo build.gradle de su módulo de biblioteca de Android.
Para obtener más información, consulte: Publicación de la biblioteca .
fuente
Por el momento no es posible, aunque si mal no recuerdo es una característica que quieren agregar. (Editar 2: enlace , enlace2 )
Editar: por el momento estoy usando la
defaultPublishConfig
opción para declarar qué variante de biblioteca se publica:fuente
Sé que este tema se ha cerrado, pero solo una actualización con gradle 3.0, vea esto: https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#variant_aware y grep
matchingFallbacks
ymissingDimensionStrategy
. Ahora es mucho más sencillo declarar las dependencias entre los tipos de módulos.... y en este caso preciso con gradle3.0, como los sabores comparten el mismo nombre, gradle los mapearía mágicamente, no se requiere configuración.
fuente
También encontré un problema al compilar módulos para varias opciones.
Lo que encontré:
Parece que no necesitamos agregarlo
publishNonDefault true
albuild.gradle
archivo lib , ya que Gradle 3.0.1 .Después de descompilar una clase,
BaseExtension
encontré esto:Y en lugar de:
Deberíamos usar:
Lo único importante es agregar una
configurations {...}
parte albuild.gradle
.Entonces, la variante final del
build.gradle
archivo de la aplicación es:Además, puede utilizar variantes de filtro para restringir variantes de compilación.
Ps no olvides incluir módulos en el
settings.gradle
archivo, como:fuente