9

Tôi gặp sự cố khi di chuyển dự án sang phiên bản Gradle 4.0 + Android Studio 3 mới nhất, cung cấp cho tôi tất cả các loại lỗi. Từng chút một, tôi đã sắp xếp tất cả chúng ra ngoại trừ cái này.Android Studio 3 + Gradle 4.0 + shrinkResources + libraryProject = Không thể tìm thấy cấu hình phù hợp trong dự án

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. 

Để móng tay xuống vấn đề:

  1. tôi đã tạo ra một dự án ứng dụng tối thiểu từ trợ lý dự án Android Studios
  2. thêm một module thư viện trống mà tôi sau đó thêm vào phụ thuộc ứng dụng của tôi .
  3. thêm một flavorDimensions và 2 productFlavors
  4. thêm 3 xây dựng các loại và để cho một build kiểu kế thừa từ một
  5. hãy để kế thừa xây dựng loại phép shrinkResources

Bước cuối cùng tạo ra các lỗi đã đề cập, tương tự như câu hỏi này: Gradle 4.0 Unable to find a matching configuration

Có ai biết vấn đề ở đây hay giải pháp cho vấn đề này không? Tôi cũng sẽ gửi một báo cáo lỗi.

hoàn chỉnh của tôi tập 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

Bug dưới: https://issuetracker.google.com/issues/62170415 cảm thấy tự do gắn dấu sao. Bây giờ nó giúp tôi loại bỏ shrinkResources khỏi kiểu xây dựng của tôi – JimmyVanBraun

Trả lời

6

thể workaround là tạo ở tất cả các module thiếu buildTypes, nhưng nó là mã rối tung điên khi Google bào tạo một sollution cho nó. Thông tin thêm trong: https://issuetracker.google.com/issues/62170415 là tôi (nhưng bị xóa bởi người kiểm duyệt) và bạn đề cập đến.

Nhưng có thứ hai là (tương tự nhưng nhiều bụi) giải pháp: thêm video này vào dự án hàng đầu của bạn build.gradle

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

EDIT: 2017-07-12

Nó cuối cùng cố định trong classpath 'com.android.tools.build:gradle:3.0.0-alpha6'. Bạn có thể sử dụng DSL mới: https://issuetracker.google.com/issues/62241369

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

Đừng quên để loại bỏ cách giải quyết trên trước khi xây dựng dự án!

EDIT: 2017-07-18

Có tài liệu chính thức: https://issuetracker.google.com/issues/62241369

Để giải quyết lỗi này, bạn cần phải xác định mà xây dựng loại từ "mylibrary" plugin Android phải khớp với loại xây dựng "dàn dựng" của ứng dụng. Bạn có thể làm điều này với thuộc tính buildTypeMatching trong bản dựng của ứng dụng .tập tin gradle, như hình dưới đây:

// 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 đã bị xóa khỏi AS beta 4.
hiện nay sử dụng matchingFallbacks.
xem: https://stackoverflow.com/a/46038946/4594990

+0

Trong dự án của tôi, các kiểu xây dựng trong mô-đun ứng dụng và mô-đun lib là 'gỡ lỗi' và 'phát hành'. Đã thử đặt buildTypeMatching 'debug', 'release' trong app build.gradle. Nó vẫn ném cùng một lỗi https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#buildTypeMatching – DroidLearner

+0

Đây là loại xây dựng của tôi cho ứng dụng và thư viện https: // gist .github.com/anonymous/1dda4a85d4d3c021a8fc07251901f9f2 – DroidLearner

+1

buildTypeMatching đã bị xóa. https://stackoverflow.com/a/46038946/4594990 – vigilancer

0

có thể trùng lặp của Gradle 4.0 Unable to find a matching configuration

Hãy chắc chắn rằng bạn có chính xác số lượng xây dựng cấu hình (buildTypes) trong tất cả các module của bạn.

Trong pre-3.0 thiết lập của tôi, tôi đã có chỉ debug {}phát hành {} trong tất cả các module com.android.library tôi. Tôi đã thêm một cấu hình khác tương tự cấu hình của: module ứng dụng. Nó xây dựng tốt cho tôi.

+0

Cách làm của bạn, làm việc trong Canary 4 và 6. Trong Canary 7 và Canary 8, nó vẫn ném một lỗi – DroidLearner

+0

Đây là loại xây dựng của tôi cho ứng dụng và thư viện https: //gist.github.com/anonymous/1dda4a85d4d3c021a8fc07251901f9f2 – DroidLearner

3

NẾU ứng dụng của bạn bao gồm loại bản dựng mà phụ thuộc thư viện thì không.

Ví dụ: ứng dụng của bạn bao gồm loại xây dựng "dàn dựng", nhưng phụ thuộc chỉ bao gồm loại bản dựng "gỡ lỗi" và "phát hành".

Bạn sẽ nhận được lỗi như

Unable to resolve dependency for ':[email protected]/compileClasspath': Could not resolve project :library. Open File Show Details

Bạn có thể giải quyết lỗi này bằng cách thêm

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

Giải quyết xây dựng các lỗi liên quan đến sự phụ thuộc phù hợp với báo cáo official docs

Các vấn đề liên quan