Gradle: más de una variante de proyecto: myLib coincide con los atributos del consumidor

81

Una biblioteca que escribí myLibusos RemoteMessagede Firebase, la propia aplicación también utiliza Firebase.

Usando gradle 4.7. También enfrentando esto en 4.4.1.

¿Como arreglarlo?

project.gradle

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'

myLib.gradle

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

Salida de error de testApp\myLib> gradle clean assembleDebugytestApp\app> gradle clean assembleDebug

Más de una variante del proyecto: myLib coincide con los atributos del consumidor:

  • Configuración ': myLib: debugApiElements' variante android-aidl:
    • Se encontró artifactType 'android-aidl' pero no era necesario.
    • Se requiere com.android.build.api.attributes.BuildTypeAttr 'debug' y se encontró un valor compatible 'debug'.
    • Se encontró com.android.build.api.attributes.VariantAttr 'debug' pero no era necesario.
    • Se requiere com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' y se encontró el valor compatible 'Aar'.
    • Se requiere org.gradle.usage 'java-api' y se encontró un valor compatible 'java-api'.
  • Configuración ': myLib: debugApiElements' variantes de android-classes:
    • Se encontró artifactType 'android-classes' pero no era necesario.
    • Se requiere com.android.build.api.attributes.BuildTypeAttr 'debug' y se encontró un valor compatible 'debug'.
    • Se encontró com.android.build.api.attributes.VariantAttr 'debug' pero no era necesario.
    • Se requiere com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' y se encontró el valor compatible 'Aar'.
    • Se requiere org.gradle.usage 'java-api' y se encontró un valor compatible 'java-api'.
  • Configuración ': myLib: debugApiElements' variante android-manifest:
    • Se encontró artifactType 'android-manifest' pero no era necesario.
    • Se requiere com.android.build.api.attributes.BuildTypeAttr 'debug' y se encontró un valor compatible 'debug'.
    • Se encontró com.android.build.api.attributes.VariantAttr 'debug' pero no era necesario.
    • Se requiere com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' y se encontró el valor compatible 'Aar'.
    • Se requiere org.gradle.usage 'java-api' y se encontró un valor compatible 'java-api'.
  • Configuración ': myLib: debugApiElements' variante android-renderscript:
    • Se encontró artifactType 'android-renderscript' pero no era necesario.
    • Se requiere com.android.build.api.attributes.BuildTypeAttr 'debug' y se encontró un valor compatible 'debug'.
    • Se encontró com.android.build.api.attributes.VariantAttr 'debug' pero no era necesario.
    • Se requiere com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' y se encontró el valor compatible 'Aar'.
    • Se requiere org.gradle.usage 'java-api' y se encontró un valor compatible 'java-api'.
  • Configuración ': myLib: debugApiElements' variante jar:
    • Se encontró artifactType 'jar' pero no era necesario.
    • Se requiere com.android.build.api.attributes.BuildTypeAttr 'debug' y se encontró un valor compatible 'debug'.
    • Se encontró com.android.build.api.attributes.VariantAttr 'debug' pero no era necesario.
    • Se requiere com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' y se encontró el valor compatible 'Aar'.
    • Se requiere org.gradle.usage 'java-api' y se encontró un valor compatible 'java-api'.
El anónimo
fuente
12
El uso de Google Services 3.2.1 corrige esto.
Paul Woitaschek
1
me salvaste la vida @PaulWoitaschek
NullPointer
2
yeh, esto parece ser un error con com.google.gms: google-services: 3.3.0. Cambiar a 3.2.1 se resolvió para mí
Zayin Krige
1
El servicio de Google se actualizó a 4.0.0 ahora. Ver developers.google.com/android/guides/…
Peter Zhao

Respuestas:

86

El google-servicescomplemento de gradle está diseñado para funcionar con Google Play Services y Firebase 15+, pero lo está usando con la versión 12.0.1.

La solución es:

EDITAR 1 : Hay un problema conocido sobre el uso google-services 3.3en aplicaciones de varios módulos . Eso significa que la degradación a google-servicesa 3.2.1puede ser su única opción hasta que se publique una nueva versión que corrija el error.

EDITAR 2 : ¡El error mencionado anteriormente se ha corregido en la versión 4.0.1del google-servicescomplemento de gradle! (y la versión 4.0.2también corrige una NPE que ocurrió en algunos casos)

Por cierto, deberías cambiarte a FCM. GCM dejará de funcionar en un futuro no muy lejano.

Louis CAD
fuente
¿Cómo me he integrado en Ionic 3? ¡Gracias!
wilfredonoyola
1
@wilfredonoyola Esto funciona con gradle. Si usa gradle con su proyecto Ionic, entonces, funciona exactamente igual. De lo contrario, simplemente no está relacionado en absoluto.
Louis CAD
Sí, ionic 3 está relacionado con gradle. Actualmente, tengo muchos errores cuando hago una nueva compilación en Android.
wilfredonoyola
@wilfredonoyola Entonces, publique su propia pregunta si mi respuesta y sus búsquedas no son suficientes para resolver sus problemas de compilación
Louis CAD
28

Recibí este error cuando uso los servicios de Google: 3.3.0.

Cambie a classpath 'com.google.gms:google-services:3.2.1'en su proyecto .gradle.

Debería resolver el problema.

Actualización: probablemente no debería ocurrir en las versiones actuales.

Henrique Monte
fuente
2
También encontré esto después de actualizar a 3.3.0, pero no podemos degradarlo porque es necesario para las nuevas versiones de play-services / firebase> = 15. Ver android-developers.googleblog.com/2018/05/…
hardysim
1
@hardysim, debería poder usar la versión de base de fuego> = 15 con 3.2.1
Sree
7

Se enfrentó a un problema similar al actualizar a 3.3.1

Se corrigió degradando a 3.2.1

Podemos usar la versión de base de fuego> = 15 con 3.2.1

dddd2011
fuente
1

Los siguientes pasos funcionaron para mí ---

  1. Vaya al archivo android / build.gradle.
  2. Busque el jcentre()método.
  3. Mueva todos los jcenter()métodos al final dentro de su bloque.
Akhilesh Sinha
fuente
Me funcionó a mi también. Increíble 😯
David Leuliette
0

Enfrenté un problema similar en los últimos días con.

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

La solución era bajar de categoría a

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

o considere dejar los servicios de Google Cloud y actualizarse a FCM por completo

Tenga en cuenta que tienen diferentes números de versión, puede buscarlo aquí

Poorya
fuente