Gradle: project 的不止一种变体: myLib 匹配消费者属性

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

使用等级4.7。在4.4。

怎么补救?

项目,分级

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
}

应用,分级

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> gradle clean assembleDebugtestApp\app> gradle clean assembleDebug的错误输出

项目的多个变体: myLib 匹配 消费者特质:

  • 配置“ : myLib: debug ApiElements 的变体 android-aidl:
    • 发现工件类型“ android-aidl”,但不是必需的。
    • 必需的 com.android.build.api.properties. BuildTypeAttr‘ debug’并找到兼容值‘ debug’。
    • 找到 com.android.build.api.properties. VariantAttr‘ debug’但不是必需的。
    • 必需的 com.android.build.gradle.interal.ency.AndroidTypeAttr‘ Aar’和 找到兼容值‘ Aar’。
    • 使用‘ java-api’并找到兼容值‘ java-api’。
  • 配置’: myLib: degugApiElements 的变体 android-class:
    • 找到了 artifactType“ android 类”,但不是必需的。
    • 必需的 com.android.build.api.properties. BuildTypeAttr‘ debug’并找到兼容值‘ debug’。
    • 找到 com.android.build.api.properties. VariantAttr‘ debug’但不是必需的。
    • 必需的 com.android.build.gradle.interal.ency.AndroidTypeAttr‘ Aar’和 找到兼容值‘ Aar’。
    • 使用‘ java-api’并找到兼容值‘ java-api’。
  • 配置’: myLib: degugApiElements 的变体 android-manifest:
    • 找到了工件类型“ android 清单”,但不是必需的。
    • 必需的 com.android.build.api.properties. BuildTypeAttr‘ debug’并找到兼容值‘ debug’。
    • 找到 com.android.build.api.properties. VariantAttr‘ debug’但不是必需的。
    • 必需的 com.android.build.gradle.interal.ency.AndroidTypeAttr‘ Aar’和 找到兼容值‘ Aar’。
    • 使用‘ java-api’并找到兼容值‘ java-api’。
  • 配置“ : myLib: debug ApiElements 的变体 android-renderscript:
    • 找到 artifactType“ android-renderscript”但不是必需的。
    • 必需的 com.android.build.api.properties. BuildTypeAttr‘ debug’并找到兼容值‘ debug’。
    • 找到 com.android.build.api.properties. VariantAttr‘ debug’但不是必需的。
    • 必需的 com.android.build.gradle.interal.ency.AndroidTypeAttr‘ Aar’和 找到兼容值‘ Aar’。
    • 使用‘ java-api’并找到兼容值‘ java-api’。
  • 配置“ : myLib: degugApiElements 的变体 jar:
    • 找到工件类型“ jar”,但不是必需的。
    • 必需的 com.android.build.api.properties. BuildTypeAttr‘ debug’并找到兼容值‘ debug’。
    • 找到 com.android.build.api.properties. VariantAttr‘ debug’但不是必需的。
    • 必需的 com.android.build.gradle.interal.ency.AndroidTypeAttr‘ Aar’和 找到兼容值‘ Aar’。
    • 使用‘ java-api’并找到兼容值‘ java-api’。
12984 次浏览

当我使用 google-services: 3.3.0时,我得到了这个错误。

在您的项目中降级到 classpath 'com.google.gms:google-services:3.2.1'

应该能解决问题。

更新: 在当前版本中可能不会出现这种情况。

这个 google-services级别的插件可以与 Google Play Services 和 Firebase 15+一起工作,但是你使用的是版本 12.0.1

解决办法是:

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

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

编辑2 : 上面提到的错误已经在 google-services级别插件的 4.0.1版本中修复了!(并且版本 4.0.2还修复了某些情况下发生的 NPE)

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

我过去几天也遇到过类似的问题。

implementation 'com.google.android.gms:play-services-auth:15.0.0'
implementation 'com.google.firebase:firebase-messaging:15.0.0'

解决办法是要么降级到

implementation 'com.google.android.gms:play-services-auth:12.0.1'
implementation 'com.google.firebase:firebase-messaging:12.0.1'

或者考虑离开谷歌云服务,完全升级到 FCM

注意他们有不同的版本号,你可以查询 给你

升级到3.3.1时遇到了类似的问题

通过降级到3.2.1修正了这个问题

我们可以在3.2.1中使用 firebase version > = 15

下面的步骤对我很管用——-

  1. 转到 android/build.gradle 文件。
  2. 搜索 jcentre()方法。
  3. 将所有 jcenter()方法移动到其块内的底部。