web-dev-qa-db-fra.com

Android Studio 3 + Gradle 4.0 + shrinkResources + libraryProject = Impossible de trouver une configuration correspondante dans le projet

J'ai eu des problèmes pour migrer mon projet vers la dernière version de Gradle 4.0 + Android Studio 3, ce qui me donne toutes sortes d'erreurs. Petit à petit, j'ai réussi à tout régler sauf celui-ci.

    Could not resolve all dependencies for configuration ':app:forGoogleCoverageRuntimeClasspath'.
   > Unable to find a matching configuration in project :mylibrary:
       - Configuration 'debugApiElements':
           - Required com.Android.build.gradle.internal.dependency.AndroidTypeAttr 'AndroidTypeAttr{name=Aar}' and found compatible value 'AndroidTypeAttr{name=Aar}'.
           - Required com.Android.build.gradle.internal.dependency.BuildTypeAttr 'BuildTypeAttr{name=coverage}' and found incompatible value 'BuildTypeAttr{name=debug}'.
           - Found com.Android.build.gradle.internal.dependency.VariantAttr 'VariantAttr{name=debug}' but wasn't required.
           - Required org.gradle.api.attributes.Usage 'for runtime' and found incompatible value 'for compile'.
           - Required store 'ProductFlavorAttr{name=forGoogle}' but no value provided.
       - Configuration 'debugRuntimeElements':
           - Required com.Android.build.gradle.internal.dependency.AndroidTypeAttr 'AndroidTypeAttr{name=Aar}' and found compatible value 'AndroidTypeAttr{name=Aar}'.
           - Required com.Android.build.gradle.internal.dependency.BuildTypeAttr 'BuildTypeAttr{name=coverage}' and found incompatible value 'BuildTypeAttr{name=debug}'.
           - Found com.Android.build.gradle.internal.dependency.VariantAttr 'VariantAttr{name=debug}' but wasn't required.
           - Required org.gradle.api.attributes.Usage 'for runtime' and found compatible value 'for runtime'.
           - Required store 'ProductFlavorAttr{name=forGoogle}' but no value provided.
       - Configuration 'releaseApiElements':
           - Required com.Android.build.gradle.internal.dependency.AndroidTypeAttr 'AndroidTypeAttr{name=Aar}' and found compatible value 'AndroidTypeAttr{name=Aar}'.
           - Required com.Android.build.gradle.internal.dependency.BuildTypeAttr 'BuildTypeAttr{name=coverage}' and found incompatible value 'BuildTypeAttr{name=release}'.
           - Found com.Android.build.gradle.internal.dependency.VariantAttr 'VariantAttr{name=release}' but wasn't required.
           - Required org.gradle.api.attributes.Usage 'for runtime' and found incompatible value 'for compile'.
           - Required store 'ProductFlavorAttr{name=forGoogle}' but no value provided.
       - Configuration 'releaseRuntimeElements':
           - Required com.Android.build.gradle.internal.dependency.AndroidTypeAttr 'AndroidTypeAttr{name=Aar}' and found compatible value 'AndroidTypeAttr{name=Aar}'.
           - Required com.Android.build.gradle.internal.dependency.BuildTypeAttr 'BuildTypeAttr{name=coverage}' and found incompatible value 'BuildTypeAttr{name=release}'.
           - Found com.Android.build.gradle.internal.dependency.VariantAttr 'VariantAttr{name=release}' but wasn't required.
           - Required org.gradle.api.attributes.Usage 'for runtime' and found compatible value 'for runtime'.
           - Required store 'ProductFlavorAttr{name=forGoogle}' but no value provided.

Pour cerner le problème:

  1. J'ai créé un projet d'application minimum à partir de l'assistant de projet d'Android Studios 
  2. ajouté un module de bibliothèque vide que j’ajoute ensuite à mes dépendances d’application.
  3. a ajouté un arômeDimensions et deux arômes de produit
  4. ajouté 3 types de construction et laisser un type de construction hériter d'un autre
  5. laisse le type de construction hérité activer shrinkResources

La dernière étape produit l'erreur mentionnée, qui est semblable à cette question: Gradle 4.0 Impossible de trouver une configuration correspondante

Quelqu'un at-il une idée de ce qui ne va pas ici ou une solution à ce problème? Je vais aussi déposer un rapport de bogue.

Mon dossier de diplôme complet:

apply plugin: 'com.Android.application'

apply plugin: 'kotlin-Android'

Android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "gradletest.test"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
    }

    flavorDimensions "store"

    productFlavors {
        forAmazon {
            dimension "store"
        }

        forGoogle {
            dimension "store"
        }
    }

    buildTypes {

        debug {
            debuggable true
            minifyEnabled false
        }

        release {
            minifyEnabled true
            debuggable false
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }

        coverage.initWith(buildTypes.debug)
        coverage {
            testCoverageEnabled true
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }


}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.Android.support', module: 'support-annotations'
    })
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    compile 'com.Android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
    compile 'com.Android.support.constraint:constraint-layout:1.0.2'

    implementation project(':mylibrary')
}
10
JimVanB

La solution de contournement possible est de créer dans tous les modules les buildTypes manquants, mais c'est un code dérangeant lorsque Google prévoit de créer une requête pour celui-ci. Plus d'infos dans: https://issuetracker.google.com/issues/62170415 comme moi (mais supprimé par le modérateur) et que vous mentionnez.

Mais il existe une deuxième solution (identique mais bien plus propre): Ajoutez-la à votre projet principal build.gradle

subprojects {
    afterEvaluate {project ->
        if (project.hasProperty("Android")) {
            Android {
                buildTypes {
                    YOUR_MISSING_BUILD_TYPES {
                       BUILD_TYPE_PARAMS_OR_EMPTY
                    }
                }
            }
        }
    }
}

EDIT: 2017-07-12

C'est finalement corrigé dans classpath 'com.Android.tools.build:gradle:3.0.0-alpha6'. Vous pouvez utiliser un nouveau DSL: https://issuetracker.google.com/issues/62241369

Android {
  buildTypeMatching 'staging', 'debug'
  productFlavorMatching 'color', 'blue', 'cyan'
}

N'oubliez pas de supprimer la solution ci-dessus avant le projet de construction!

EDIT: 2017-07-18

Il existe une documentation officielle: https://issuetracker.google.com/issues/62241369

Pour résoudre cette erreur, vous devez spécifier le type de construction à partir de "mylibrary" le plugin Android devrait correspondre à la "mise en scène" de l'application type de construction. Vous pouvez le faire avec la propriété buildTypeMatching dans le fichier Le fichier build.gradle de l'application, comme indiqué ci-dessous:

// Add the following to the consumer's build.gradle file.
Android {
    ...
    // Tells the Android plugin to use a library's 'debug' build type
    // when a 'staging' build type is not available. You can include
    // additional build types, and the plugin matches 'staging' to the
    // first build type it finds from the one's you specify. That is,
    // if 'mylibrary' doesn't include a 'debug' build type either, the
    // plugin matches 'staging' with the producer's 'release' build type.
    buildTypeMatching 'staging', 'debug', 'release'
}

EDIT: 2017-09-06

buildTypeMatching a été supprimé de AS beta 4.
utilise maintenant matchingFallbacks.
voir: https://stackoverflow.com/a/46038946/4594990

7
mtrakal

SI votre application inclut un type de construction, contrairement à une dépendance de bibliothèque.

Par exemple, votre application inclut un type de construction "intermédiaire", mais une dépendance inclut uniquement un type de construction "débogage" et "édition".

Vous obtiendrez une erreur comme 

Unable to resolve dependency for ':app@staging/compileClasspath': Could not resolve project :library. Open File Show Details

Vous pouvez résoudre cette erreur en ajoutant 

buildTypes {
        staging {
            proguardFile getDefaultDexGuardFile('dexguard-release.pro')
            proguardFile 'dexguard-rules.pro'
            matchingFallbacks = ['debug', 'release'] //add this line
        }
    }

Résoudre les erreurs de construction liées à la correspondance de dépendance documents officiels

3
Qamar4P

Double possible de Gradle 4.0 Impossible de trouver une configuration correspondante

Assurez-vous de disposer du nombre exact de configurations de construction (buildTypes) dans tous vos modules.

Dans ma configuration antérieure à la version 3.0, je n'avais que debug {} et version {} dans tous mes modules com.Android.library. J'ai ajouté une configuration supplémentaire similaire à celle de: module d'application. Cela me convient parfaitement.

0
Vik