tutorial studio para now must flavors flavor descargar configurar belong all android gradle

android - studio - La dependencia de Gradle se basa tanto en el tipo de compilación como en el sabor



gradle version android studio (4)

Complemento de Android para Gradle 3.0.0

Build plugin 3.0.0 utiliza la resolución de dependencia con devDebug variantes, por devDebug variante devDebug de un módulo de aplicación utilizará automáticamente la variante devDebug de su dependencia de módulo de biblioteca. Para responder la pregunta, esto sería suficiente:

implementation project('':common'')

Lea más aquí: https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#variant_aware

Respuesta original

Pude encontrar una solución aquí: https://github.com/JakeWharton/u2020/blob/master/build.gradle

Más información sobre por qué mi código original no es suficiente está disponible aquí: https://code.google.com/p/android/issues/detail?id=162285

Solución de trabajo:

configurations { pubDebugCompile devDebugCompile pubReleaseCompile devReleaseCompile } dependencies { pubReleaseCompile project(path: '':common'', configuration: "pubRelease") devReleaseCompile project(path: '':common'', configuration: "devRelease") pubDebugCompile project(path: '':common'', configuration: "pubDebug") devDebugCompile project(path: '':common'', configuration: "devDebug") }

Tengo varios tipos de compilación: debug , release . También tengo dos sabores pub y dev .

pub aplicación con sabor a pub depende de una biblioteca de pub , lo mismo ocurre con el sabor dev . Ahora me gustaría que la aplicación de tipo de compilación de debug dependa de la compilación de debug de la biblioteca. Lo siguiente no funciona:

pubReleaseCompile project(path: '':common'', configuration: "pubRelease") devReleaseCompile project(path: '':common'', configuration: "devRelease") pubDebugCompile project(path: '':common'', configuration: "pubDebug") devDebugCompile project(path: '':common'', configuration: "devDebug")

Nota: La biblioteca está configurada para compilar todas las variantes.

¿Hay alguna manera de especificar la dependencia del proyecto condicional en función del sabor y el tipo de construcción?

EDITAR: para evitar confusiones aquí, siga los archivos build.gradle relevantes del proyecto que estoy usando actualmente.

project / common / build.gradle (la biblioteca)

apply plugin: ''com.android.library'' apply plugin: ''com.jakewharton.hugo'' // annotation-based code generated logs only in debug build android { defaultPublishConfig "pubRelease" publishNonDefault true // four variants of the library are built buildTypes { debug {} release { minifyEnabled false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.txt'' } } productFlavors { pub { // custom build config fields } dev { // custom build config fields } } } dependencies { // ... }

project / parent / build.gradle (uno de los módulos de la aplicación que usa la biblioteca)

apply plugin: ''com.android.application'' apply plugin: ''com.jakewharton.hugo'' android { // ... signingConfigs { release { // ... } } buildTypes { release { signingConfig signingConfigs.release proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-project.txt'' shrinkResources true minifyEnabled true } debug { versionNameSuffix ''-debug'' } } productFlavors { pub { // custom res values } dev { // custom res values } } } dependencies { // ... pubCompile project(path: '':common'', configuration: "pubRelease") devCompile project(path: '':common'', configuration: "devRelease") }


Eche un vistazo a las variantes de sabor múltiple. No debe usar buildTypes para esto. Pero puedes definir multi-sabores:

flavorDimensions "first", "second" productFlavors { pub { flavorDimension "first" } dev { flavorDimension "first" } deb { flavorDimension "second" } rel { flavorDimension "second" } }

Y luego puedes agregar dependencias a tus libs como esta

pubRelCompile project(path: '':common'', configuration: "pubRel") devRelCompile project(path: '':common'', configuration: "devRel") pubDebCompile project(path: '':common'', configuration: "pubDeb") devDebCompile project(path: '':common'', configuration: "devDeb")


Primero defina los distintos tipos de compilación:

buildTypes { pubRelease { //config } devRelease { //config } }

Crea una tarea que se ejecutará solo para un buildType y un sabor específicos:

task pubReleaseTask << { //code } task devReleaseTask << { //code }

Puede agregar la dependencia de forma dinámica:

tasks.whenTaskAdded { task -> if (task.name == ''pubRelease'') { task.dependsOn pubReleaseTask } if (task.name == ''devRelease'') { task.dependsOn devReleaseTask } }


Siga el ejemplo de @ dooplaye, suponga que solo desea compilar Leanback en un sabor, puede consultar el siguiente fragmento:

applicationVariants.all { variant -> def flavorString = "" def flavors = variant.productFlavors for (int i = 0; i < flavors.size(); i++) { flavorString += flavors[i].name; } if (flavorString.equalsIgnoreCase("pubdeb")) { dependencies { compile(''com.android.support:leanback-v17:22.2.1'') } } }