Android Studio 3 + Gradle 4.0 + ShrinkResources + libraryProject = Не удалось найти подходящую конфигурацию в проекте

У меня проблемы с переносом моего проекта на новейшую версию Gradle 4.0 + Android Studio 3, которая дает мне всевозможные ошибки. Понемногу мне удалось разобрать их все, кроме этого.

    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.

Чтобы решить проблему:

  1. Я создал минимальный проект приложения из помощника проекта Android Studios.
  2. добавил пустой библиотечный модуль, который я затем добавляю в свои зависимости приложения.
  3. добавлен один ароматРазмеры и 2 продуктаАроматы
  4. добавлено 3 типа сборки и позволяет одному типу сборки наследоваться от другого
  5. разрешить унаследованному типу сборки включить shrinkResources

На последнем шаге возникает указанная ошибка, аналогичная этому вопросу: Gradle 4.0 Не удалось найти подходящую конфигурацию

Кто-нибудь знает, в чем здесь дело или решение этой проблемы? Я тоже отправлю отчет об ошибке.

Мой полный файл градиента:

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

person JimVanB    schedule 29.05.2017    source источник
comment
Отчет об ошибке в разделе: issuetracker.google.com/issues/62170415. На данный момент это помогает мне удалить усадочные ресурсы из моего типа сборки.   -  person JimVanB    schedule 31.05.2017


Ответы (4)


Возможный обходной путь — создание во всех модулях отсутствующих buildTypes, но это сумасшедший код, когда Google планировал создать для него решение. Дополнительная информация: https://issuetracker.google.com/issues/62170415 от меня ( но удалено модератором) и вы упомянули.

Но есть и второе (такое же, но гораздо более чистое) решение: добавьте это в свой главный проект build.gradle

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

РЕДАКТИРОВАНИЕ: 12 июля 2017 г.

Это наконец исправлено в classpath 'com.android.tools.build:gradle:3.0.0-alpha6'. Вы можете использовать новый DSL: https://issuetracker.google.com/issues/62241369.

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

Не забудьте удалить описанный выше обходной путь перед сборкой проекта!

РЕДАКТИРОВАНИЕ: 18 июля 2017 г.

Имеется официальная документация: https://issuetracker.google.com/issues/62241369.

Чтобы устранить эту ошибку, вам нужно указать, какой тип сборки из «mylibrary» должен соответствовать подключаемому модулю Android «постановочному» типу сборки приложения. Вы можете сделать это с помощью свойства buildTypeMatching в файле build.gradle приложения, как показано ниже:

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

РЕДАКТИРОВАНИЕ: 06 сентября 2017 г.

buildTypeMatching был удален из AS beta 4.
теперь используйте matchingFallbacks.
см.: https://stackoverflow.com/a/46038946/4594990

person mtrakal    schedule 03.06.2017
comment
В моем проекте типы сборки в модуле приложения и модуле lib — «отладка» и «выпуск». Пробовал помещать buildTypeMatching «отладка», «выпуск» в приложение build.gradle. Он по-прежнему выдает ту же ошибку разработчика. android.com/studio/build/ - person DroidLearner; 20.07.2017
comment
Вот мой тип сборки для приложения и библиотеки gist.github.com/anonymous/1dda4a85d4d3c021a8fc07251901f9f2 - person DroidLearner; 27.07.2017

ЕСЛИ ваше приложение включает тип сборки, которого нет в зависимости от библиотеки.

Например, ваше приложение включает в себя тип сборки "staging", но зависимость включает только тип сборки "debug" и "release".

Вы получите ошибку, как

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

Вы можете устранить эту ошибку, добавив

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

Устранение ошибок сборки, связанных с сопоставлением зависимостей официальный документы

person Qamar4P    schedule 30.10.2017

Возможный дубликат Gradle 4.0 не может найти подходящую конфигурацию

Убедитесь, что у вас есть точное количество конфигураций сборки (buildTypes) во всех ваших модулях.

В моей настройке до версии 3.0 у меня были только debug{} и release{} во всех моих модулях com.android.library. Я добавил еще одну конфигурацию, аналогичную конфигурации модуля :app. У меня строится нормально.

person Vik    schedule 13.06.2017
comment
Ваш способ работал на Canary 4 и 6. На Canary 7 и Canary 8 все равно выдает ошибку - person DroidLearner; 27.07.2017
comment
Вот мой тип сборки для приложения и библиотеки gist.github.com/anonymous/1dda4a85d4d3c021a8fc07251901f9f2 - person DroidLearner; 27.07.2017

если вы доберетесь сюда, то мое решение:

    buildTypes {
        release {
            // minifyEnabled false
            // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        build {
            //   minifyEnabled false
            //   proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
person Atef Farouk    schedule 18.10.2020