web-dev-qa-db-ja.com

Android Studio 3 + Gradle 4.0 + ShrinkResources + libraryProject =プロジェクトで一致する構成が見つかりません

プロジェクトを最新のGradle4.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. 1つのflavorDimensionsと2つのproductFlavorsを追加しました
  4. 3つのビルドタイプを追加し、1つのビルドタイプを別のビルドタイプから継承させます
  5. 継承されたビルドタイプで有効にするshrinkResources

最後のステップで、この質問に似た前述のエラーが生成されます: Gradle 4.0一致する構成が見つかりません

ここで何が問題なのか、またはこの問題の解決策を誰かが考えていますか?バグレポートも提出します。

私の完全な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')
}
10
JimVanB

考えられる回避策は、buildTypesがないすべてのモジュールで作成することですが、Googleがそのソリューションを作成することを計画したとき、それはクレイジーな混乱コードです。詳細情報: https://issuetracker.google.com/issues/62170415 私として(ただしモデレーターによって削除されました)、あなたは言及します。

しかし、2番目の(同じですがはるかにクリーンな)解決策があります:これをトッププロジェクトに追加します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プラグインがアプリの「ステージング」ビルドタイプと一致する必要があるかを指定する必要があります。これは、アプリの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'
}

編集:2017-09-06

buildTypeMatchingはASベータ4から削除されました。
今度はmatchingFallbacksを使用します。
参照: https://stackoverflow.com/a/46038946/459499

7
mtrakal

アプリに、ライブラリの依存関係に含まれていないビルドタイプが含まれている場合。

たとえば、アプリには「ステージング」ビルドタイプが含まれていますが、依存関係には「デバッグ」と「リリース」ビルドタイプのみが含まれています。

次のようなエラーが発生します

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

依存関係のマッチングに関連するビルドエラーを解決します 公式ドキュメント

3
Qamar4P

重複の可能性 Gradle4.0一致する構成が見つかりません

すべてのモジュールに正確な数のビルド構成(buildTypes)があることを確認してください

3.0より前のセットアップでは、すべてのcom.Androidでdebug {}release {}しかありませんでした。ライブラリモジュール。 :appモジュールと同様の構成をもう1つ追加しました。それは私にとってはうまくいきます。

0
Vik