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'')
}
}
}