【问题标题】:Problem with Firebase migration to androidXFirebase 迁移到 androidX 的问题
【发布时间】:2019-10-25 07:04:18
【问题描述】:
  • Android Studio 版本:3.4.1
  • Firebase 组件:firebase-messaging:
  • 组件版本:17.3.2

大家好, 我在将使用 firebase 消息传递到 androidx 的应用程序迁移时遇到问题。 我按照说明https://developer.android.com/jetpack/androidx/migrate

不幸的是,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

有什么解决方法吗? 我认为通过添加以下内容可以神奇地解决它:

android.useAndroidX=true
android.enableJetifier=true

无论如何.. 我不知道(因为 FirebaseApp 仍然持有对 v4 支持库的旧依赖项)。 我错过了什么吗? 感谢您的帮助。

build.gradle

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

【问题讨论】:

  • 显示你的 build.gradle,顺便说一句更好地使用重构,IDE 会自动将你的项目迁移到 AndroidX
  • @user1209216 我已经用 build.gradle 内容更新了最初的问题。
  • 我不确定是什么导致了您的问题。我建议恢复您的更改并尝试自动迁移 - Refactor->Migrate

标签: android firebase firebase-cloud-messaging androidx


【解决方案1】:

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

classpath 'com.android.tools.build:gradle:3.2.0'

但是从实现的角度来看,它很奇怪......而且人们很容易混淆......

如果插件版本

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

【讨论】:

    【解决方案2】:

    我认为您缺少现在托管该文件的 AndroidX Collections 库:

    https://developer.android.com/reference/androidx/collection/ArrayMap.html

    implementation 'androidx.collection:collection:1.0.0'
    

    【讨论】:

    • 我也尝试从 androidx 添加集合依赖,但没有成功。 FirebaseApp (github.com/firebase/firebase-android-sdk/blob/master/…) 与 android.support.v4.util 包中的 ArrayMap 绑定。
    • 库通常在内部处理。这些呢:configurations.all { exclude group: 'com.android.support', module: 'support-v4'} 你试过删除那些吗?
    • 是的,这实际上帮助我摆脱了对 support-v4 库的所有依赖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 2020-01-27
    相关资源
    最近更新 更多