9

我有問題將我的項目遷移到最新的Gradle 4.0 + Android Studio 3版本,這給我帶來了各種各樣的錯誤。我一點一點地設法排除他們,除了這一個。Android Studio 3 + Gradle 4.0 + shrinkResources + libraryProject =無法在項目中找到匹配的配置

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的工作室項目助理創建了最低的應用項目,
  2. 添加一個空庫模塊,然後我添加到我的應用程序依賴。
  3. 加入一個flavorDimensions和2個productFlavors
  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') 
} 
+0

錯誤報告相關的解決構建錯誤:HTTPS:/ /issuetracker.google.com/issues/62170415隨時恭維。現在它幫助我從我的構建類型中移除shrinkResources – JimmyVanBraun

回答

6

可能的解決辦法是在缺少buildTypes所有模塊創建的,但它的瘋狂搞亂代碼,當谷歌刨創建sollution它。更多的信息在: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年7月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年7月18日

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

爲了解決這個錯誤,你需要指定從 建設型 「在MyLibrary」 的Android插件應該與應用的「分期」 構建類型相匹配。您可以使用 應用程序構建中的buildTypeMatching屬性來執行此操作。文件的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年9月6日

buildTypeMatching已經從AS的β4.
現在使用matchingFallbacks除去。
看到:https://stackoverflow.com/a/46038946/4594990

+0

在我的項目中,app模塊和lib模塊中的構建類型是'debug'和'release'。試圖把buildTypeMatching'調試','釋放'在應用程序build.gradle。它仍然拋出相同的錯誤https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#buildTypeMatching – DroidLearner

+0

這是我的App和庫的構建類型https:// gist .github.com/anonymous/1dda4a85d4d3c021a8fc07251901f9f2 – DroidLearner

+1

buildTypeMatching已被刪除。 https://stackoverflow.com/a/46038946/4594990 – vigilancer

0

Gradle 4.0 Unable to find a matching configuration

可能的複製請確保您有您的所有模塊的構建配置(buildTypes)的確切數字。

在我的前3.0安裝,我做了所有我com.android.library模塊只調試{}發佈{}。我添加了一個類似於app模塊的配置。它適合我。

+0

你的做法,在加那利4和6工作。在金絲雀7和金絲雀8,它仍然會拋出一個錯誤 – DroidLearner

+0

這是我的構建類型的應用程序和庫https: //gist.github.com/anonymous/1dda4a85d4d3c021a8fc07251901f9f2 – DroidLearner

3

如果您的應用程序包含庫依賴關係不包含的構建類型。例如,您的應用程序包含「暫存」構建類型,但依賴項僅包含「調試」和「發佈」構建類型。

你會得到錯誤,如

Unable to resolve dependency for ':[email protected]/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 
     } 
    } 

進行依賴下的匹配official docs

相關問題