草庐IT

Android Studio 3.0 编译问题(无法在配置之间进行选择)

coder 2023-05-08 原文

最新 3.0 版本(Beta 2)的问题 我的项目有 1 个第三方的子模块,所以我只能访问他们的 build.gradle。

我的项目有 3 种风格,snap、uat、production。每个都有 2 种构建类型,调试和发布。当我尝试构建时,我得到了这个。

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.

我读到子模块和构建类型存在问题,但后来读到它已修复。 您必须向子模块 build.gradle 添加相同的构建类型或其他内容,然后添加

buildTypeMatching  'debug', 'release'

然而,当我这样做时,我得到了这个错误,

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:0.9.4@aar'
    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:0.10@aar') {
        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')
}

这里是第 3 方库 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')
}

有人知道我该如何解决这个问题吗? 谢谢

最佳答案

试试

实现项目(路径:':lp_messaging_sdk',配置:'default')

注意:

您可以通过将 gradle 更新到 4.3 check this 来避免此错误.

解释:

使用 Dependency Configurations可以轻松定义和指定在子项目中使用的内容。

在我的回答中,我们使用了 default 配置,这将仅向其他 Android 项目和模块发布和公开“发布”风格。

假设您只需要在演示 flavor 或发布 flavor 中包含此 flavor ,it would be like :

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

因此,在您的情况下,您可以使用您的构建风格,这就是错误日志中出现的内容。

Cannot choose between the following configurations of project :lp_messaging_sdk

这意味着,您的 lp_messaging_sdk 具有各种构建配置:-

  - debugApiElements
  - debugRuntimeElements
  - releaseApiElements
  - releaseRuntimeElements

而 android-studio 告诉你,“我不能从这些不同的配置中选择一种,你能为我定义一个吗?”

您可以通过 here 了解更多信息.

关于Android Studio 3.0 编译问题(无法在配置之间进行选择),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45679847/

有关Android Studio 3.0 编译问题(无法在配置之间进行选择)的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

  4. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  5. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  6. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  7. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  8. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  9. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  10. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

随机推荐