9

我无法将我的项目迁移到最新的 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. 添加了一种风味维度和两种产品风味
  4. 添加了 3 种构建类型并让一种构建类型从另一种继承
  5. 让继承的构建类型启用shrinkResources

最后一步产生上述错误,类似于这个问题: Gradle 4.0 Unable to find a matching configuration

有没有人知道这里出了什么问题或解决这个问题?我也会提交错误报告。

我完整的gradle文件:

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

4 回答 4

7

可能的解决方法是在所有缺少 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
                    }
                }
            }
        }
    }
}

编辑:2017-07-12

终于固定在了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'
}

在构建项目之前不要忘记删除上述解决方法!

编辑:2017-07-18

有官方文档:https ://issuetracker.google.com/issues/62241369

要解决此错误,您需要从“mylibrary”中指定 Android 插件应与应用程序的“staging”构建类型匹配的构建类型。您可以使用应用程序的 build.gradle 文件中的 buildTypeMatching 属性来执行此操作,如下所示:

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

编辑:2017-09-06

buildTypeMatching已从 AS beta 4 中删除。
现在使用matchingFallbacks.
见:https ://stackoverflow.com/a/46038946/4594990

于 2017-06-03T16:40:45.887 回答
3

如果您的应用程序包含库依赖项不包含的构建类型。

例如,您的应用程序包含“暂存”构建类型,但依赖项仅包含“调试”和“发布”构建类型。

你会得到像这样的错误

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

解决与依赖匹配官方文档相关的构建错误

于 2017-10-30T06:09:07.163 回答
0

Gradle 4.0可能重复无法找到匹配的配置

确保在所有模块中都有准确数量的构建配置 (buildTypes)

在我的 3.0 之前的设置中,我的所有 com.android.library 模块中只有debug{}release{}。我添加了一个类似于 :app 模块的配置。它对我来说很好。

于 2017-06-13T00:18:28.837 回答
0

如果你到达这里,那么我的解决方案是:

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

        build {
            //   minifyEnabled false
            //   proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
于 2020-10-18T15:57:44.520 回答