Firebase迁移到androidX时出现问题 Android Studio版本:3.4.1 Firebase组件:Firebase消息: 组件版本:17.3.2

Firebase迁移到androidX时出现问题 Android Studio版本:3.4.1 Firebase组件:Firebase消息: 组件版本:17.3.2,android,firebase,firebase-cloud-messaging,androidx,Android,Firebase,Firebase Cloud Messaging,Androidx,大家好, 我在将使用firebase消息传递的应用程序迁移到androidx时遇到问题。 我按照指示做了 不幸的是,firebase组件似乎尚未迁移 java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/util/ArrayMap; at com.google.firebase.FirebaseApp.<clinit>(com.google.firebase:firebase

大家好, 我在将使用firebase消息传递的应用程序迁移到androidx时遇到问题。 我按照指示做了

不幸的是,firebase组件似乎尚未迁移

java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/util/ArrayMap;
        at com.google.firebase.FirebaseApp.<clinit>(com.google.firebase:firebase-common@@17.1.0:101)
        at com.google.firebase.FirebaseApp.initializeApp(com.google.firebase:firebase-common@@17.1.0:244)
        at com.google.firebase.provider.FirebaseInitProvider.onCreate(com.google.firebase:firebase-common@@17.1.0:53)
        at android.content.ContentProvider.attachInfo(ContentProvider.java:1927)
        at android.content.ContentProvider.attachInfo(ContentProvider.java:1902)
        at com.google.firebase.provider.FirebaseInitProvider.attachInfo(com.google.firebase:firebase-common@@17.1.0:47)
        at android.app.ActivityThread.installProvider(ActivityThread.java:6578)
        at android.app.ActivityThread.installContentProviders(ActivityThread.java:6133)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6043)
        at android.app.ActivityThread.-wrap1(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1764)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6944)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.util.ArrayMap" on path: DexPathList
无论如何。。我没有任何线索(因为FirebaseApp仍然保留着对v4支持库的旧依赖关系)。 我错过什么了吗? 谢谢你的帮助

格雷德尔先生

compileSdkVersion 28
    buildToolsVersion "27.0.3"

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 28
        versionCode project.sdkVersionCode
        versionName project.sdkVersionName

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

configurations.all { exclude group: 'com.android.support', module: 'support-v4'}
configurations.all { exclude group: 'com.android.support', module: 'support-compat'}
configurations.all { exclude group: 'com.android.support', module: 'support-annotations'}

dependencies {

    implementation 'androidx.core:core:1.0.2'
    implementation 'androidx.annotation:annotation:1.1.0'
    implementation 'com.google.code.gson:gson:2.8.2'
    implementation 'com.squareup.okhttp3:okhttp:3.9.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.0.0'
    implementation 'io.reactivex:rxandroid:1.2.0'
    implementation 'com.google.firebase:firebase-messaging:17.3.2'
    implementation 'com.google.firebase:firebase-common:17.1.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.appcompat:appcompat:1.1.0-beta01'
    implementation 'com.madgag.spongycastle:core:1.58.0.0'
    implementation('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
        transitive = true
    }

    testImplementation 'junit:junit:4.12'
    testImplementation 'org.mockito:mockito-core:2.15.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

我认为您缺少AndroidX Collections库,该库现在承载该文件:


我发现了一个问题,解决方案是将build gradle版本至少更新到3.2.0。这也是通过android studio自动迁移所说的“将build gradle插件升级到至少3.2.0”

然而,从实现的角度来看,这是非常奇怪的。。。人们很容易被搞糊涂

如果插件版本<3.2.0,则下载v4支持中的旧ArrayMap并将其放置在FirebaseApp类的缓存中


如果>3.2.0,则采用androidx软件包中的ArrayMap

显示您的build.gradle,顺便说一句,更好地使用重构,IDE将把您的项目迁移到AndroidXautomatically@user1209216我已使用build.gradle内容更新了初始问题。我不确定是什么原因导致了您的问题。我建议恢复您的更改并尝试自动迁移-重构->迁移我也尝试从androidx添加集合依赖项,但没有成功。FirebaseApp()与android.support.v4.util包中的ArrayMap绑定。库通常在内部处理。关于这些:
configurations.all{exclude group:'com.android.support',module:'support-v4'}
您是否尝试删除它们?是的,这实际上帮助我摆脱了对support-v4库的所有依赖关系。
compileSdkVersion 28
    buildToolsVersion "27.0.3"

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 28
        versionCode project.sdkVersionCode
        versionName project.sdkVersionName

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

configurations.all { exclude group: 'com.android.support', module: 'support-v4'}
configurations.all { exclude group: 'com.android.support', module: 'support-compat'}
configurations.all { exclude group: 'com.android.support', module: 'support-annotations'}

dependencies {

    implementation 'androidx.core:core:1.0.2'
    implementation 'androidx.annotation:annotation:1.1.0'
    implementation 'com.google.code.gson:gson:2.8.2'
    implementation 'com.squareup.okhttp3:okhttp:3.9.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava:2.0.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.0.0'
    implementation 'io.reactivex:rxandroid:1.2.0'
    implementation 'com.google.firebase:firebase-messaging:17.3.2'
    implementation 'com.google.firebase:firebase-common:17.1.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.appcompat:appcompat:1.1.0-beta01'
    implementation 'com.madgag.spongycastle:core:1.58.0.0'
    implementation('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
        transitive = true
    }

    testImplementation 'junit:junit:4.12'
    testImplementation 'org.mockito:mockito-core:2.15.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
implementation 'androidx.collection:collection:1.0.0'
classpath 'com.android.tools.build:gradle:3.2.0'