Gradle: Nhiều biến thể của dự án: myLib phù hợp với các thuộc tính của người tiêu dùng


81

Một thư viện mà tôi đã viết myLibsử dụng RemoteMessagetừ đó Firebase, chính ứng dụng cũng sử dụng Firebase.

Sử dụng gradle 4.7. Cũng phải đối mặt với điều này trong 4.4.1.

Làm thế nào để sửa chữa nó?

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

Lỗi đầu ra từ testApp\myLib> gradle clean assembleDebugtestApp\app> gradle clean assembleDebug

Nhiều biến thể của dự án: myLib phù hợp với các thuộc tính của người tiêu dùng:

  • Cấu hình ': myLib: debugApiElements' biến thể android-aidl:
    • Đã tìm thấy loại tạo tác 'android-aidl' nhưng không bắt buộc.
    • Bắt buộc com.android.build.api.attributes.BuildTypeAttr 'gỡ lỗi' và tìm thấy giá trị tương thích 'gỡ lỗi'.
    • Đã tìm thấy com.android.build.api.attributes.VariantAttr 'gỡ lỗi' nhưng không bắt buộc.
    • Bắt buộc phải có com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' và tìm thấy giá trị tương thích 'Aar'.
    • Yêu cầu org.gradle.usage 'java-api' và tìm thấy giá trị tương thích 'java-api'.
  • Cấu hình ': myLib: debugApiElements' biến thể android-class:
    • Đã tìm thấy tạo tác "android-class" nhưng không bắt buộc.
    • Bắt buộc com.android.build.api.attributes.BuildTypeAttr 'gỡ lỗi' và tìm thấy giá trị tương thích 'gỡ lỗi'.
    • Đã tìm thấy com.android.build.api.attributes.VariantAttr 'gỡ lỗi' nhưng không bắt buộc.
    • Bắt buộc phải có com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' và tìm thấy giá trị tương thích 'Aar'.
    • Yêu cầu org.gradle.usage 'java-api' và tìm thấy giá trị tương thích 'java-api'.
  • Cấu hình ': myLib: debugApiElements' biến thể android-kê khai:
    • Đã tìm thấy loại "android-kê khai" nhưng không bắt buộc.
    • Bắt buộc com.android.build.api.attributes.BuildTypeAttr 'gỡ lỗi' và tìm thấy giá trị tương thích 'gỡ lỗi'.
    • Đã tìm thấy com.android.build.api.attributes.VariantAttr 'gỡ lỗi' nhưng không bắt buộc.
    • Bắt buộc phải có com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' và tìm thấy giá trị tương thích 'Aar'.
    • Yêu cầu org.gradle.usage 'java-api' và tìm thấy giá trị tương thích 'java-api'.
  • Cấu hình ': myLib: debugApiElements' biến thể android-renderscript:
    • Đã tìm thấy loại "android-renderscript" nhưng không bắt buộc.
    • Bắt buộc com.android.build.api.attributes.BuildTypeAttr 'gỡ lỗi' và tìm thấy giá trị tương thích 'gỡ lỗi'.
    • Đã tìm thấy com.android.build.api.attributes.VariantAttr 'gỡ lỗi' nhưng không bắt buộc.
    • Bắt buộc phải có com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' và tìm thấy giá trị tương thích 'Aar'.
    • Yêu cầu org.gradle.usage 'java-api' và tìm thấy giá trị tương thích 'java-api'.
  • Jar biến thể của Configuration ': myLib: debugApiElements':
    • Đã tìm thấy tạo tác "jar" nhưng không bắt buộc.
    • Bắt buộc com.android.build.api.attributes.BuildTypeAttr 'gỡ lỗi' và tìm thấy giá trị tương thích 'gỡ lỗi'.
    • Đã tìm thấy com.android.build.api.attributes.VariantAttr 'gỡ lỗi' nhưng không bắt buộc.
    • Bắt buộc phải có com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' và tìm thấy giá trị tương thích 'Aar'.
    • Yêu cầu org.gradle.usage 'java-api' và tìm thấy giá trị tương thích 'java-api'.

12
Sử dụng Dịch vụ của Google 3.2.1 khắc phục sự cố này.
Paul Woitaschek

1
bạn đã cứu mạng tôi @PaulWoitaschek
NullPointer

2
yeh - đây có vẻ là lỗi với com.google.gms: google-services: 3.3.0. Hạ cấp xuống 3.2.1 đã được giải quyết cho tôi
Zayin Krige

1
Dịch vụ của Google hiện đã được nâng cấp lên 4.0.0. Xem developer.google.com/android/guides/…
Peter Zhao

Câu trả lời:


86

Các google-servicesPlugin gradle được thực hiện để làm việc với dịch vụ Google Play và căn cứ hỏa lực 15+, nhưng bạn đang sử dụng nó với phiên bản 12.0.1.

Giải pháp là:

  • Nâng cấp các dịch vụ Play và phụ thuộc Firebase của bạn lên phiên bản 15+ (lưu ý rằng chúng hiện có các phiên bản khác nhau)
  • Hủy google-servicesnâng cấp của bạn lên cho 3.3.0đến khi bạn nâng cấp lên 15+, tức là hạ cấp plugin gradle xuống phiên bản 3.2.1.

CHỈNH SỬA 1 : Có một vấn đề đã biết về việc sử dụng google-services 3.3trong các ứng dụng đa mô-đun . Đó là phương tiện hạ tới google-servicesđể 3.2.1có thể lựa chọn duy nhất của bạn cho đến khi một phiên bản mới sửa lỗi được phát hành.

CHỈNH SỬA 2 : Lỗi được đề cập ở trên đã được sửa trong phiên bản 4.0.1của google-servicesplugin gradle! (và phiên bản 4.0.2cũng sửa lỗi NPE xảy ra trong một số trường hợp)

BTW, bạn nên chuyển sang FCM. GCM sẽ ngừng hoạt động trong một tương lai không xa.


Làm cách nào để tích hợp trên Ionic 3? Cảm ơn!
wilfredonoyola,

1
@wilfredonoyola Điều này hoạt động với gradle. Nếu bạn sử dụng gradle với dự án Ionic của mình, thì nó hoạt động hoàn toàn giống nhau. Nếu không, nó không liên quan gì cả.
Louis CAD

Có, ion 3 có liên quan với gradle. Hiện tại, tôi đang gặp nhiều lỗi khi tạo bản dựng mới trên Android.
wilfredonoyola

@wilfredonoyola Sau đó, chỉ cần gửi câu hỏi của riêng bạn nếu câu trả lời của tôi và tìm kiếm của bạn không đủ để giải quyết các vấn đề xây dựng của bạn
Louis CAD

28

Tôi gặp lỗi này khi sử dụng google-services: 3.3.0.

Hạ cấp xuống classpath 'com.google.gms:google-services:3.2.1'trong dự án của bạn .gradle.

Nó sẽ giải quyết vấn đề.

Cập nhật: Nó có thể không xảy ra trong các phiên bản hiện tại.


2
Tôi chạy vào này là tốt sau khi cập nhật lên 3.3.0 nhưng chúng tôi không thể hạ cấp vì đây là cần thiết cho mới play-dịch vụ / phiên bản căn cứ hỏa lực> = 15. Xem android-developers.googleblog.com/2018/05/...
hardysim

1
@hardysim, bạn sẽ có thể sử dụng phiên bản firebase> = 15 với 3.2.1
Sree

7

Đối mặt với sự cố tương tự khi nâng cấp lên 3.3.1

Đã sửa nó bằng cách hạ cấp xuống 3.2.1

Chúng tôi có thể sử dụng phiên bản firebase> = 15 với 3.2.1


1

Các bước dưới đây phù hợp với tôi ---

  1. Truy cập tệp android / build.gradle.
  2. Tìm kiếm jcentre()phương pháp.
  3. Chuyển tất cả các jcenter()phương thức xuống dưới cùng bên trong khối của nó.

Làm việc cho tôi là tốt. Unbelievable 😯
David Leuliette

0

Tôi đã đối mặt với một vấn đề tương tự trong vài ngày qua với.

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

giải pháp là hạ cấp xuống

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

hoặc xem xét việc rời khỏi Dịch vụ đám mây của Google và nâng cấp hoàn toàn lên FCM

Lưu ý rằng chúng có các số phiên bản khác nhau, bạn có thể tra cứu tại đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.