当前位置: 首页 > 知识库问答 >
问题:

Gradle:多个项目变体:myLib匹配消费者属性

闻人举
2023-03-14

我编写的myLib库使用Firebase中的RemoteMessage应用程序本身也使用Firebase

使用Gradle4.7。在第4.4.1节中也面对这一点。

怎么修?

项目格拉德尔

buildscript {
    
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
        classpath 'com.google.gms:google-services:3.3.0'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
        mavenLocal()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

app.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.test.app"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }

    dexOptions {
        preDexLibraries = false
        jumboMode = false
        javaMaxHeapSize "2048M"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    productFlavors {
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:27.1.1'

    implementation 'com.google.android.gms:play-services-gcm:12.0.1'
    implementation 'com.google.android.gms:play-services:12.0.1'
    implementation 'com.google.firebase:firebase-core:12.0.1'
    implementation 'com.google.firebase:firebase-messaging:12.0.1'
    implementation 'com.google.firebase:firebase-crash:12.0.1'

    implementation project(":myLib")
}

apply plugin: 'com.google.gms.google-services'

迈里布。格拉德尔

apply plugin: 'com.android.library'

android {
    compileSdkVersion 27



    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:27.1.1'

    implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.2'
    implementation 'com.j256.ormlite:ormlite-core:5.0'
    implementation 'com.j256.ormlite:ormlite-android:5.0'

    implementation 'com.google.firebase:firebase-messaging:12.0.1'
}

testApp\myLib输出错误

project:myLib的多个变体与消费者属性相匹配:

  • 配置“:myLib:debugapiements”变体android aidl:
    • 找到工件类型“android aidl”,但不是必需的
    • 必需的com.Android建筑应用程序编程接口。属性。BuildTypeAttr“debug”并找到兼容值“debug”
    • 找到了com.Android建筑应用程序编程接口。属性。VariantTR“调试”,但不是必需的
    • 必需的com.Android建筑格拉德尔。内部的附属国。AndroidTypeAttr'Aar'并找到兼容值'Aar'
    • 所需组织。格拉德尔。使用“java api”并找到兼容值“java api”
    • 找到artifactType'android类',但不是必需的。
    • 需要com.android.build.api.attributes.BuildTypeattr调试并找到兼容值debug。
    • 找到了com.android.build.api.attributes.Variantattr'debug',但不是必需的。
    • 需要com.android.build.gradle.internal.dependency.AndroidTypeattr'Aar',并找到兼容值'Aar'。
    • 需要org.gradle.usage'java-api'并找到兼容值'java-api'.
    • 找到artifactType“android清单”,但不是必需的
    • 必需的com.Android建筑应用程序编程接口。属性。BuildTypeAttr“debug”并找到兼容值“debug”
    • 找到了com.Android建筑应用程序编程接口。属性。VariantTR“调试”,但不是必需的
    • 必需的com.Android建筑格拉德尔。内部的附属国。AndroidTypeAttr'Aar'并找到兼容值'Aar'
    • 所需组织。格拉德尔。使用“java api”并找到兼容值“java api”
    • 找到artifactType'android-rendercript',但不是必需的。
    • 需要com.android.build.api.attributes.BuildTypeattr调试并找到兼容值debug。
    • 找到了com.android.build.api.attributes.Variantattr'debug',但不是必需的。
    • 需要com.android.build.gradle.internal.dependency.AndroidTypeattr'Aar',并找到兼容值'Aar'。
    • 需要org.gradle.usage'java-api'并找到兼容值'java-api'.
    • 找到工件类型“jar”,但不是必需的
    • 必需的com.Android建筑应用程序编程接口。属性。BuildTypeAttr“debug”并找到兼容值“debug”
    • 找到了com.Android建筑应用程序编程接口。属性。VariantTR“调试”,但不是必需的
    • 必需的com.Android建筑格拉德尔。内部的附属国。AndroidTypeAttr'Aar'并找到兼容值'Aar'
    • 所需组织。格拉德尔。使用“java api”并找到兼容值“java api”

共有3个答案

罗波鸿
2023-03-14

升级到3.3.1时面临类似问题

通过降级至3.2.1修复了该问题

我们可以使用firebase版本

庄实
2023-03-14

我在使用谷歌服务时遇到了这个错误:3.3.0。

降级到classpath'com.google.gms: google-service: 3.2.1'在你的项目中。

它应该解决这个问题。

更新:它可能不会出现在当前版本中。

石苏燕
2023-03-14

google服务gradle插件是为与google Play服务和Firebase15配合使用而设计的,但您使用的是版本12.0.1

解决办法是:

  • 将您的Play Services和Firebase依赖项升级到版本15(请注意,它们现在有不同的版本)
  • 取消您的google服务升级到3.3.0,直到您升级到15,也就是说,将gradle插件降级到版本3.2.1

编辑1:在多模块应用程序中使用google-service3.3存在已知问题。这意味着降级到google-service3.2.1可能是您唯一的选择,直到发布修复错误的新版本。

编辑2:上面提到的错误已经在googleservicesgradle插件的4.0.1版本中修复!(版本4.0.2也修复了某些情况下出现的NPE)

顺便说一句,你应该转到FCM。GCM将在不久的将来停止工作。

 类似资料:
  • 问题内容: 我有一个JMS客户端,它正在生成消息并通过JMS队列发送到其唯一的使用者。 我想要的是不止一个消费者收到这些消息。我想到的第一件事是将队列转换为主题,以便现有用户和新用户都可以订阅并将相同的消息传递给他们。 显然,这将涉及在生产者和消费者方面修改当前的客户代码。 我还要查看其他选项,例如创建第二个队列,这样就不必修改现有的使用者。我相信这种方法有很多优点,例如(如果我错了,请纠正我)在

  • 我正在创建一个系统,其中前端服务将消息推送到Kafka请求主题,并为一些下游后端消费者(实际上是一个最终推送回Kafka的复杂系统)监听另一个响应主题,以处理请求消息并最终推进到“回应”话题。 我试图找出最优雅的方法来确保消费者监听适当的分区并收到响应,并且后端推送到前端消费者正在监听的分区。我们总是需要确保响应到达产生初始消息的同一个消费者。 到目前为止,我有两种解决方案,但都不是特别令人满意的

  • TL;DR;我试图理解一个被分配了多个分区的单个使用者是如何处理reach分区的消费记录的。 例如: 在移动到下一个分区之前,会完全处理一个分区。 每次处理每个分区中的可用记录块。 从第一个可用分区处理一批N条记录 以循环旋转方式处理来自分区的N条记录 我找到了或分配程序的配置,但这只决定了使用者如何分配分区,而不是它如何从分配给它的分区中使用。 我开始深入研究KafkaConsumer源代码,#

  • 由于消息需求的排序,我们有一个主题和一个分区。我们有两个消费者运行在不同的服务器上,具有相同的配置集,即groupId、consumerId和consumerGroup。即 1主题- 当我们部署消费者时,相同的代码会部署在两台服务器上。当消息到来时,我们会注意到两个消费者都在消费消息,而不是只有一个处理。让消费者在两台独立的服务器上运行的原因是,如果一台服务器崩溃,至少其他服务器可以继续处理消息。

  • 我使用Change Feed处理器库(或者Azure Functions Cosmos DB trigger)来订阅集合更新。如何为同一个集合的提要设置多个独立的(非竞争的)消费者? 一种方法是使用多个租赁集合,例如,,等,但这有点浪费。 有没有办法只用一个租约集合就做到这一点?(例如,通过在某处指定消费者组名称,类似于事件中心处理器)

  • 我有一个使用ActiveMQ的消息队列。web请求用persistency=true将消息放入队列。现在,我有两个消费者,它们都作为单独的会话连接到这个队列。使用者1总是确认消息,但使用者2从不这样做。 JMS队列实现负载平衡器语义。一条消息将被一个使用者接收。如果在发送消息时没有可用的使用者,它将被保留,直到有可以处理消息的使用者可用为止。如果使用者接收到一条消息,但在关闭之前没有确认它,那么该