Gradle: więcej niż jeden wariant projektu: myLib pasuje do atrybutów konsumenta

81

Biblioteka, z której napisałem, myLibkorzysta RemoteMessagez Firebasesamej aplikacjiFirebase .

Korzystanie z gradle 4.7. Wobec tego również w 4.4.1.

Jak to naprawić?

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

Wyjście błędu z testApp\myLib> gradle clean assembleDebugitestApp\app> gradle clean assembleDebug

Więcej niż jeden wariant projektu: myLib pasuje do atrybutów konsumenta:

  • Konfiguracja ': myLib: debugApiElements' wariant android-aidl:
    • Znaleziono artifactType „android-aidl”, ale nie był wymagany.
    • Wymagane com.android.build.api.attributes.BuildTypeAttr „debug” i znaleziona zgodna wartość „debug”.
    • Znaleziono com.android.build.api.attributes.VariantAttr „debug”, ale nie było to wymagane.
    • Wymagane com.android.build.gradle.internal.dependency.AndroidTypeAttr „Aar” i znaleziona zgodna wartość „Aar”.
    • Wymagane org.gradle.usage „java-api” i odnaleziona zgodna wartość „java-api”.
  • Konfiguracja ': myLib: debugApiElements' warianty klas Androida:
    • Znaleziono artifactType „android-classes”, ale nie było to wymagane.
    • Wymagane com.android.build.api.attributes.BuildTypeAttr „debug” i znaleziona zgodna wartość „debug”.
    • Znaleziono com.android.build.api.attributes.VariantAttr „debug”, ale nie było to wymagane.
    • Wymagane com.android.build.gradle.internal.dependency.AndroidTypeAttr „Aar” i znaleziona zgodna wartość „Aar”.
    • Wymagane org.gradle.usage „java-api” i odnaleziona zgodna wartość „java-api”.
  • Konfiguracja ': myLib: debugApiElements' wariant manifestu systemu Android:
    • Znaleziono artifactType „android-manifest”, ale nie było to wymagane.
    • Wymagane com.android.build.api.attributes.BuildTypeAttr „debug” i znaleziona zgodna wartość „debug”.
    • Znaleziono com.android.build.api.attributes.VariantAttr „debug”, ale nie było to wymagane.
    • Wymagane com.android.build.gradle.internal.dependency.AndroidTypeAttr „Aar” i znaleziona zgodna wartość „Aar”.
    • Wymagane org.gradle.usage „java-api” i odnaleziona zgodna wartość „java-api”.
  • Konfiguracja ': myLib: debugApiElements' wariant android-renderscript:
    • Znaleziono artifactType „android-renderscript”, ale nie było to wymagane.
    • Wymagane com.android.build.api.attributes.BuildTypeAttr „debug” i znaleziona zgodna wartość „debug”.
    • Znaleziono com.android.build.api.attributes.VariantAttr „debug”, ale nie było to wymagane.
    • Wymagane com.android.build.gradle.internal.dependency.AndroidTypeAttr „Aar” i znaleziona zgodna wartość „Aar”.
    • Wymagane org.gradle.usage „java-api” i odnaleziona zgodna wartość „java-api”.
  • Konfiguracja ': myLib: debugApiElements' wariant jar:
    • Znaleziono artifactType „jar”, ​​ale nie był wymagany.
    • Wymagane com.android.build.api.attributes.BuildTypeAttr „debug” i znaleziona zgodna wartość „debug”.
    • Znaleziono com.android.build.api.attributes.VariantAttr „debug”, ale nie było to wymagane.
    • Wymagane com.android.build.gradle.internal.dependency.AndroidTypeAttr „Aar” i znaleziona zgodna wartość „Aar”.
    • Wymagane org.gradle.usage „java-api” i odnaleziona zgodna wartość „java-api”.
anonimowy
źródło
12
Korzystanie z usług Google 3.2.1 rozwiązuje ten problem.
Paul Woitaschek
1
uratowałeś mi życie @PaulWoitaschek
NullPointer
2
tak - wydaje się, że to błąd w com.google.gms: google-services: 3.3.0. Obniżenie do wersji 3.2.1 rozwiązało dla mnie rozwiązanie
Zayin Krige
1
Usługa Google jest teraz uaktualniana do 4.0.0. Zobacz developers.google.com/android/guides/…
Peter Zhao

Odpowiedzi:

86

google-servicesWtyczki Gradle jest do współpracy z usługami Google Play i Firebase 15+, ale używasz go z wersji 12.0.1.

Rozwiązaniem jest:

  • Uaktualnij swoje zależności usług Play i Firebase do wersji 15+ (pamiętaj, że mają teraz różne wersje)
  • Anuluj google-servicesaktualizację do, 3.3.0dopóki nie zaktualizujesz do 15+, czyli obniżysz wersję wtyczki gradle do wersji 3.2.1.

EDYCJA 1 : Istnieje znany problem dotyczący używania google-services 3.3w aplikacjach wielomodułowych . Oznacza to, że przejście na wersję google-servicesdo 3.2.1może być jedyną opcją, dopóki nie zostanie wydana nowa wersja, która naprawi błąd.

EDIT 2 : Błąd wspomniano powyżej został naprawiony w wersji 4.0.1z google-serviceswtyczką Gradle! (a wersja 4.0.2naprawia również NPE, który wystąpił w niektórych przypadkach)

BTW, powinieneś przejść do FCM. GCM przestanie działać w niezbyt odległej przyszłości.

Louis CAD
źródło
Jak przeprowadzić integrację w Ionic 3? Dzięki!
wilfredonoyola
1
@wilfredonoyola Działa z gradle. Jeśli używasz gradle w swoim projekcie Ionic, to działa dokładnie tak samo. W przeciwnym razie po prostu nie jest to w ogóle powiązane.
Louis CAD,
Tak, ionic 3 jest powiązany z Gradle. Obecnie mam wiele błędów podczas tworzenia nowej wersji na Androida.
wilfredonoyola
@wilfredonoyola Następnie po prostu opublikuj własne pytanie, jeśli moja odpowiedź i Twoje wyszukiwania nie wystarczą, aby rozwiązać problemy z kompilacją
Louis CAD,
28

Otrzymałem ten błąd, kiedy korzystam z usług Google: 3.3.0.

Zmień na classpath 'com.google.gms:google-services:3.2.1'w swoim projekcie .gradle.

To powinno rozwiązać problem.

Aktualizacja: prawdopodobnie nie powinno to występować w aktualnych wersjach.

Henrique Monte
źródło
2
Natknąłem się na to również po aktualizacji do 3.3.0, ale nie możemy obniżyć wersji, ponieważ jest to potrzebne dla nowych wersji Play-Services / Firebase> = 15. Zobacz android-developers.googleblog.com/2018/05/…
hardysim
1
@hardysim powinieneś móc używać wersji Firebase> = 15 z 3.2.1
Sree
7

W obliczu podobnego problemu podczas aktualizacji do wersji 3.3.1

Naprawiono to, obniżając do wersji 3.2.1

Możemy użyć wersji Firebase> = 15 z 3.2.1

dddd2011
źródło
1

Poniższe kroki zadziałały dla mnie ---

  1. Przejdź do pliku android / build.gradle.
  2. Szukaj jcentre() metodę.
  3. Przesuń wszystkie jcenter()metody na dół wewnątrz jego bloku.
Akhilesh Sinha
źródło
U mnie też zadziałało. Niewiarygodne 😯
David Leuliette
0

W ciągu ostatnich kilku dni miałem podobny problem z.

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

rozwiązaniem była zmiana na

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

lub rozważ opuszczenie Google Cloud Services i całkowite przejście na FCM

Zauważ, że mają różne numery wersji, możesz to sprawdzić tutaj

Poorya
źródło