J’ai plusieurs types de build: debug
, release
. J’ai aussi deux saveurs pub
et dev
.
application à saveur de pub
dépend d’une bibliothèque de pub
, la même chose vaut pour la saveur dev
. Maintenant, je voudrais que l’application de type construction de debug
dépend de la version de debug
de la bibliothèque. Ce qui suit ne fonctionne pas:
pubReleaseComstack project(path: ':common', configuration: "pubRelease") devReleaseComstack project(path: ':common', configuration: "devRelease") pubDebugComstack project(path: ':common', configuration: "pubDebug") devDebugComstack project(path: ':common', configuration: "devDebug")
Remarque: La bibliothèque est configurée pour comstackr toutes les variantes.
Existe-t-il un moyen de spécifier une dépendance de projet conditionnelle en fonction du type de version et du type de version?
EDIT: Pour éviter toute confusion, suivez les fichiers build.gradle
pertinents du projet que j’utilise actuellement.
project / common / build.gradle (la bibliothèque)
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 (l’un des modules d’application utilisant la bibliothèque)
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 { // ... pubComstack project(path: ':common', configuration: "pubRelease") devComstack project(path: ':common', configuration: "devRelease") }
Build plugin 3.0.0 utilise une résolution dépendante des variantes, devDebug
variante devDebug
d’un module d’application utilisera automatiquement la variante devDebug
de sa dépendance au module bibliothèque. Pour répondre à la question, cela suffirait:
implementation project(':common')
Lire plus ici: https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#variant_aware
J’ai pu trouver une solution ici: https://github.com/JakeWharton/u2020/blob/master/build.gradle
Plus d’informations sur pourquoi mon code d’origine ne suffit pas est disponible ici: https://code.google.com/p/android/issues/detail?id=162285
Solution de travail:
configurations { pubDebugComstack devDebugComstack pubReleaseComstack devReleaseComstack } dependencies { pubReleaseComstack project(path: ':common', configuration: "pubRelease") devReleaseComstack project(path: ':common', configuration: "devRelease") pubDebugComstack project(path: ':common', configuration: "pubDebug") devDebugComstack project(path: ':common', configuration: "devDebug") }
Définissez d’abord les différents types de construction:
buildTypes { pubRelease { //config } devRelease { //config } }
Créez une tâche qui sera exécutée uniquement pour un buildType et une saveur spécifiques:
task pubReleaseTask << { //code } task devReleaseTask << { //code }
Vous pouvez append la dépendance de manière dynamic:
tasks.whenTaskAdded { task -> if (task.name == 'pubRelease') { task.dependsOn pubReleaseTask } if (task.name == 'devRelease') { task.dependsOn devReleaseTask } }
Jetez un coup d’oeil aux variantes multi-saveur Vous ne devriez pas utiliser buildTypes pour cela. Mais vous pouvez définir des multi-saveurs:
flavorDimensions "first", "second" productFlavors { pub { flavorDimension "first" } dev { flavorDimension "first" } deb { flavorDimension "second" } rel { flavorDimension "second" } }
Et puis vous pouvez append des dépendances à vos bibliothèques comme ceci
pubRelComstack project(path: ':common', configuration: "pubRel") devRelComstack project(path: ':common', configuration: "devRel") pubDebComstack project(path: ':common', configuration: "pubDeb") devDebComstack project(path: ':common', configuration: "devDeb")
Suivez l’exemple de @ dooplaye, supposez que vous ne voulez comstackr que le leanback en une seule saveur, vous pouvez vous référer à l’extrait ci-dessous:
applicationVariants.all { variant -> def flavorSsortingng = "" 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') } } }