it-swarm.com.de

Android Studio 3.0-Kompilierungsproblem (kann nicht zwischen Konfigurationen wählen)

Problem mit der neuesten Version 3.0 (Beta 2) Mein Projekt hat ein Submodul von einem Drittanbieter, sodass ich nur Zugriff auf deren build.gradle habe.

Mein Projekt hat 3 Geschmacksrichtungen, Snap, Uat, Produktion. Jeder hat zwei Build-Typen, Debug und Release. Wenn ich versuche zu bauen, bekomme ich das.

Error:Cannot choose between the following configurations of project :lp_messaging_sdk:
  - debugApiElements
  - debugRuntimeElements
  - releaseApiElements
  - releaseRuntimeElements
All of them match the consumer attributes:
  - Configuration 'debugApiElements':
      - Found com.Android.build.api.attributes.BuildTypeAttr 'debug' but wasn't required.
      - Found com.Android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' but wasn't required.
      - Found com.Android.build.gradle.internal.dependency.VariantAttr 'debug' but wasn't required.
      - Found org.gradle.api.attributes.Usage 'Java-api' but wasn't required.
  - Configuration 'debugRuntimeElements':
      - Found com.Android.build.api.attributes.BuildTypeAttr 'debug' but wasn't required.
      - Found com.Android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' but wasn't required.
      - Found com.Android.build.gradle.internal.dependency.VariantAttr 'debug' but wasn't required.
      - Found org.gradle.api.attributes.Usage 'Java-runtime' but wasn't required.
  - Configuration 'releaseApiElements':
      - Found com.Android.build.api.attributes.BuildTypeAttr 'release' but wasn't required.
      - Found com.Android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' but wasn't required.
      - Found com.Android.build.gradle.internal.dependency.VariantAttr 'release' but wasn't required.
      - Found org.gradle.api.attributes.Usage 'Java-api' but wasn't required.
  - Configuration 'releaseRuntimeElements':
      - Found com.Android.build.api.attributes.BuildTypeAttr 'release' but wasn't required.
      - Found com.Android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' but wasn't required.
      - Found com.Android.build.gradle.internal.dependency.VariantAttr 'release' but wasn't required.
      - Found org.gradle.api.attributes.Usage 'Java-runtime' but wasn't required.

Ich habe gelesen, dass Probleme mit Untermodulen und Build-Typen aufgetreten sind, aber dann wurde es behoben. Sie mussten die gleichen Build-Typen oder etwas zu den Submodulen build.gradle hinzufügen und dann hinzufügen 

buildTypeMatching  'debug', 'release'

Wenn ich dies jedoch mache, erhalte ich diesen Fehler.

Error:Could not select value from candidates [debug, release] using AlternateDisambiguationRule.BuildTypeRule.

apply plugin: 'com.Android.application'

Android {

    repositories {
        flatDir {
            dirs project(':lp_messaging_sdk').file('aars')
        }
    }

    // Android parameters
    compileSdkVersion = 26
    buildToolsVersion = '26.0.1'

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    dexOptions {
        preDexLibraries true
    }

    defaultConfig {
        minSdkVersion 19
        versionName buildName
        versionCode buildVersion
        multiDexEnabled true
        resConfigs "en", "fr", "fr-rCA"
    }

    signingConfigs {
        release {

        }
    }

    flavorDimensions "default"

    productFlavors {
        snap {
            ext.betaDistributionGroupAliases = "INTERNAL"
            ext.betaDistributionReleaseNotesFilePath = 'changelog.txt'
            ext.betaDistributionNotifications = true
            dimension "default"
        }

        uat {
            ext.betaDistributionGroupAliases = "INTERNAL"
            ext.betaDistributionNotifications = true
        }

        production {
        }
    }

    buildTypes {
        debug {
            versionNameSuffix createVersionNameSuffix()
            applicationIdSuffix '.debug'
            minifyEnabled true
            testCoverageEnabled false
            buildConfigField "String", "PLAY_STORE_VERSION_NAME", '"' + PLAY_STORE_VERSION_NAME + '"'
            // Workaround for : https://code.google.com/p/Android/issues/detail?id=212882
            proguardFiles fileTree(dir: 'proguard', include: ['*.pro']).asList().toArray()
            ext.enableCrashlytics = false
        }

        release {
            versionNameSuffix createVersionNameSuffix()
            minifyEnabled true
            testCoverageEnabled = false
            signingConfig signingConfigs.release
            buildConfigField "String", "PLAY_STORE_VERSION_NAME", '"' + PLAY_STORE_VERSION_NAME + '"'
            // Workaround for : https://code.google.com/p/Android/issues/detail?id=212882
            proguardFiles fileTree(dir: 'proguard', include: ['*.pro']).asList().toArray()
        }

    }

    //Used to ignore duplicated entries added to meta-inf
    packagingOptions {
        exclude 'LICENSE.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/services/javax.annotation.processing.Processor'
    }

    dexOptions {
        javaMaxHeapSize "2048m"
        dexInProcess true
    }

    lintOptions {
        abortOnError true
        xmlReport true
        htmlReport true
        disable 'MissingTranslation', 'InvalidPackage'
        disable 'GradleCompatible', 'GradleCompatible'
        disable 'NewApi', 'NewApi'
        disable 'GradleDependency'
        disable 'UnusedResources'
        disable 'IconDensities'
        disable 'TypographyDashes'
        disable 'ContentDescription'
        htmlOutput file("$project.buildDir/reports/lint/lint-result.html")
        xmlOutput file("$project.buildDir/reports/lint/lint-result.xml")
    }

    testOptions {
        unitTests.returnDefaultValues = true
    }
}

greendao {
    schemaVersion 13
    targetGenDir 'src/main/Java/'
}

ext.betaDistributionReleaseNotes = System.getenv("CHANGELOG")

def createVersionNameSuffix() {
    def buildNumber = System.env.BUILD_NUMBER
    def buildTimestamp = new Date().format('HH:mm dd/MM/yy')
    return buildNumber ? " ($buildNumber)" : " ($buildTimestamp)"
}

def getBuildVersionFromName(String buildName) {
    List data = buildName.tokenize(".")
    String resultString = "19";

    for (String s : data) {
        resultString += s;
    }

    if (System.env.BUILD_NUMBER) {
        resultString += System.env.BUILD_NUMBER
    }

    return Integer.parseInt(resultString);
}

//Verify the app before creating a Pull Request
task verifyPR
verifyPR.dependsOn('clean')
verifyPR.dependsOn('lint')
verifyPR.dependsOn('checkstyle')
verifyPR.dependsOn('pmd')
verifyPR.dependsOn('testSnapDebugUnitTest')

dependencies {
    // Android Dependencies
    compile 'com.Android.support:appcompat-v7:26.0.1'
    compile 'com.Android.support:design:26.0.1'
    compile 'com.Android.support:recyclerview-v7:26.0.1'
    compile 'com.Android.support:multidex:1.0.2'

    // Dagger Dependencies
    apt 'com.google.dagger:dagger-compiler:2.11'
    compile 'org.glassfish:javax.annotation:10.0-b28'
    compile 'com.google.dagger:dagger:2.11'

    // Rx Dependencies
    compile 'io.reactivex:rxandroid:1.2.1'
    compile 'io.reactivex:rxjava:1.3.0'
    compile 'com.jakewharton.rxbinding:rxbinding-appcompat-v7:0.4.0'
    compile 'com.jakewharton.rxbinding:rxbinding-support-v4:0.4.0'
    compile 'com.squareup.whorlwind:whorlwind:1.0.1'
    compile 'com.tbruyelle.rxpermissions:rxpermissions:[email protected]'
    compile 'com.jenzz:RxAppState:2.0.0'

    // Tools
    compile 'com.crashlytics.sdk.Android:crashlytics:2.6.5'

    // ButterKnife
    compile 'com.jakewharton:butterknife:8.4.0'

    // Google Maps
    compile 'com.google.Android.gms:play-services-maps:11.0.4'
    compile "com.google.Android.gms:play-services-analytics:11.0.4"
    compile 'com.google.Android.gms:play-services-location:11.0.4'
    compile 'com.google.Android.gms:play-services-places:11.0.4'
    compile 'com.google.Android.gms:play-services-gcm:11.0.4'

    // Geofence
    compile('pl.charmas.Android:android-reactive-location:[email protected]') {
        transitive = true
    }

    // Retrofit
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.3.0'

    // OKHTTP
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.7.5'

    // Libphonenumber
    compile 'com.googlecode.libphonenumber:libphonenumber:7.3.2'

    // UI
    compile 'com.tubb.smrv:swipemenu-recyclerview:5.0.2'

    // EventBus
    compile 'org.greenrobot:eventbus:3.0.0'

    // Database
    compile 'org.greenrobot:greendao:3.2.0'

    // Chuck HTTP Inspector
    debugCompile 'com.readystatesoftware.chuck:library:1.0.4'
    releaseCompile 'com.readystatesoftware.chuck:library-no-op:1.0.4'

    // ViewPager Indicator
    compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'

    // Amplitude
    compile 'com.amplitude:Android-sdk:2.13.2'

    // TESTS
    testCompile 'junit:junit:4.12'
    testCompile "org.mockito:mockito-core:1.10.19"
    testCompile "org.powermock:powermock-module-junit4:1.6.5"
    testCompile "org.powermock:powermock-module-junit4-rule:1.6.4"
    testCompile "org.powermock:powermock-api-mockito:1.6.5"
    testCompile "org.powermock:powermock-classloading-xstream:1.6.4"

    compile project(':lp_messaging_sdk')
}

Und hier ist die 3rd-Party-Bibliothek build.gradle

apply plugin: 'com.Android.library'

Android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 26
        versionCode 250
        versionName "2.5.0"
    }

    flavorDimensions "default"

    productFlavors {
        snap {
            ext.betaDistributionGroupAliases = "INTERNAL"
            ext.betaDistributionReleaseNotesFilePath = 'changelog.txt'
            ext.betaDistributionNotifications = true
            dimension "default"
        }

        uat {
            ext.betaDistributionGroupAliases = "INTERNAL"
            ext.betaDistributionNotifications = true
        }

        production {

        }
    }

    signingConfigs {
        release {

        }
    }

    buildTypeMatching 'snap', 'debug', 'release'

    buildTypes {
        debug {
            applicationIdSuffix '.debug'
            minifyEnabled true
            testCoverageEnabled false
            buildConfigField "String", "PLAY_STORE_VERSION_NAME", '"' + PLAY_STORE_VERSION_NAME + '"'
            // Workaround for : https://code.google.com/p/Android/issues/detail?id=212882
            proguardFiles fileTree(dir: 'proguard', include: ['*.pro']).asList().toArray()
            ext.enableCrashlytics = false
        }

        release {
            minifyEnabled true
            testCoverageEnabled = false
            signingConfig signingConfigs.release
            buildConfigField "String", "PLAY_STORE_VERSION_NAME", '"' + PLAY_STORE_VERSION_NAME + '"'
            // Workaround for : https://code.google.com/p/Android/issues/detail?id=212882
            proguardFiles fileTree(dir: 'proguard', include: ['*.pro']).asList().toArray()
        }
    }

    defaultConfig {
        consumerProguardFiles 'proguard.cfg'
    }

    repositories {
        flatDir {
            dirs 'aars'
        }
    }

    lintOptions {
        disable 'InvalidPackage'
    }
}

dependencies {
    compile 'com.Android.support:appcompat-v7:26.0.1'
    compile 'com.Android.support:design:26.0.1'
    compile 'com.Android.support:recyclerview-v7:26.0.1'
    compile 'com.Android.support:percent:26.0.1'
    compile 'com.Android.support.constraint:constraint-layout:1.0.2'

    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.neovisionaries:nv-websocket-client:1.31'
    compile 'com.squareup.okhttp3:okhttp:3.8.0'

    compile(name: 'infra', ext: 'aar')
    compile(name: 'messaging', ext: 'aar')
    compile(name: 'messaging_ui', ext: 'aar')
    compile(name: 'ui', ext: 'aar')
}

Weiß jemand, wie ich dieses Problem lösen kann? Vielen Dank

55
AndyOHart

Versuchen

implementation project(path: ':lp_messaging_sdk', configuration: 'default')

Hinweis:

Sie können diesen Fehler vermeiden, indem Sie gradle auf 4.3 Aktualisieren. Aktivieren Sie dieses Kontrollkästchen .

Erklärung :

Die Verwendung von Abhängigkeitskonfigurationen erleichtert das Definieren und Festlegen der Verwendung in Unterprojekten.

In meiner Antwort verwendeten wir Standard Konfiguration und dies wird veröffentlichen und nur die "Release" -Funktion für andere verfügbar machen Android Projekte und Module.

Angenommen, Sie müssen dieses Aroma nur mit Demo-Aroma oder mit Release-Aroma einbeziehen, würde es wie folgt aussehen :

configurations {
  // Initializes placeholder configurations that the Android plugin can use when targeting
  // the corresponding variant of the app.
  demoDebugCompile {}
  fullReleaseCompile {}
  ...
}
dependencies {
  // If the library configures multiple build variants using product flavors,
  // you must target one of the library's variants using its full configuration name.
  demoDebugCompile project(path: ':lp_messaging_sdk', configuration: 'demoDebug')
  fullReleaseCompile project(path: ':lp_messaging_sdk', configuration: 'fullRelease')
  ...
}

In Ihrem Fall können Sie also Ihre Build-Varianten verwenden, und das ist, was im Fehlerprotokoll angezeigt wird.

Cannot choose between the following configurations of project :lp_messaging_sdk

Und das bedeutet, dass Ihr lp_messaging_sdk Verschiedene Build-Konfigurationen hat:

  - debugApiElements
  - debugRuntimeElements
  - releaseApiElements
  - releaseRuntimeElements

Und Android-Studio sagt Ihnen: "Ich kann aus diesen verschiedenen Konfigurationen keine auswählen. Würden Sie eine für mich definieren?"

Mehr über erfahren Sie hier .

89
user6490462

Fehler: Ich kann nicht zwischen den folgenden Projektkonfigurationen wählen .......

Möglicherweise gibt es Probleme beim graduellen Schreiben. Wenn ich die folgende Formulierung ändere, liegt kein solcher Fehler vor

// Projekt kompilieren (': MPChartLib')

implementation project(':MPChartLib')

Vielleicht, wenn die Referenz von anderen Modulen abhängt, sollte in dieser Implementierung geschrieben werden

13
MyDesire

Wenn Sie das Android-apt-Plugin für die Anmerkungsverarbeitung verwenden, entfernen Sie dieses Plugin und ersetzen Sie alle apt some_dependency-Referenzen durch annotationProcessor some_dependency, wie in dem Migrationshandbuch für das Android Gradle Plugin 3.0.0 vorgeschlagen.

11
Matt

Wenn ich mein Projekt von Stufe 23 auf Stufe 27 auf 27 aktualisiere und auf 3.1 steige, kommt dieser Fehler 

"Kann nicht zwischen verschiedenen Konfigurationen wählen".

So lösen Sie dieses Problem.

ersetzen Sie das Compile-Projekt (': Ihr Projektname')

mit Implementierungsprojekt (': Projektname')  

in gradle das lösen das problem.

2
justchill

In meinem ähnlichen Fall lautete die Lösung:

build.gradle:

Android {
    defaultConfig {
        // because I have two project flavors in that library
        missingDimensionStrategy 'project', 'myProjectName' 
        // because I have a "full" and a "debug" flavor in that library
        missingDimensionStrategy 'mode', 'full'
    }
    buildTypes {
        debug { ... }
        release { ... }
    }
}
dependencies {
    // because the project(path:'', configuration:'') did not work in this case
    implementation project(':myModuleName1')
    implementation project(':myModuleName2')
}

Vielleicht hilft das anderen, wenn sie hier ein ähnliches Problem haben.

0
hb0

für AndroidStudio 3.0+ hat mainMoudle buildTypes und buildTypes genauso wie libModule buildTypes und buildTypes.

mainModule:

buildTypes {
    release {
        buildConfigField "boolean", "LOG_DEBUG", "false"
        zipAlignEnabled true
        shrinkResources true
        minifyEnabled true
        proguardFiles 'proguard-rules.pro'
    }

    debug {
        buildConfigField "boolean", "LOG_DEBUG", "true"
        zipAlignEnabled true
        shrinkResources false
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
    }

    debug2{

    }
}

libModule:

buildTypes {
    release {

    }

    debug {

    }

    debug2{

    }
}

oder Sie können passendeFallbacks verwenden, um diese zu lösen klicken Sie

0
Jack Deng

Mein Problem war die Tatsache, dass ich den Namen der Ausgabedatei (und den Pfad) umbenannte.

Nachdem ich den Gradle-Code entfernt hatte, der den Namen des Aars geändert hatte, war der Weg zu meiner Lösung einfacher.

0
TacB0sS