使用Google Play服务10.2.98,API 19中的Firebase性能崩溃

kor*_*los 11 android firebase firebase-performance

本周我开始在我的新应用中测试新的Firebase性能.一旦我将Firebase用于Auth和DB等其他功能,我已经将所有软件包更新为10.2.6 Firebase版本并遵循所有预先请求的说明.

minAPI是19.

我的问题是App在运行Android 4.4.1的真实Galaxy Duos设备中仅在API 19中与Google Play Services 10.2.98崩溃.当App启动时,它无法在设备中找到firebase-perf.

它只发生在这个软件包和其他设备和更高版本中,一切都很好,我可以在Firebase Performance Dashboard中看到数据.

提示 ?

Stacktrace下面

问候,

Process: com.mobilecodelabs.fb.trampo, PID: 2727
java.lang.RuntimeException: Unable to get provider com.google.firebase.perf.provider.FirebasePerfProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.perf.provider.FirebasePerfProvider" on path: DexPathList[[zip file "/data/app/com.mobilecodelabs.fb.trampo-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.mobilecodelabs.fb.trampo-2, /vendor/lib, /system/lib]]
    at android.app.ActivityThread.installProvider(ActivityThread.java:4793)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4385)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4325)
    at android.app.ActivityThread.access$1500(ActivityThread.java:135)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5017)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.perf.provider.FirebasePerfProvider" on path: DexPathList[[zip file "/data/app/com.mobilecodelabs.fb.trampo-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.mobilecodelabs.fb.trampo-2, /vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
    at android.app.ActivityThread.installProvider(ActivityThread.java:4778)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4385) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4325) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5017) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
    at dalvik.system.NativeStart.main(Native Method) 
Run Code Online (Sandbox Code Playgroud)

小智 1

这是一个老问题,但为了其他人的利益而发布更新。

我自己也遇到了这个问题,具有完全相同的堆栈跟踪。我的应用程序在 API 19 及更低版本上失败,而在 21+ 上它可以正常工作。对我来说,这是一个 MultiDex 问题。

即使我通过给予启用了 MultiDex

  • API 21+ 的“defaultConfig”下的模块 gradle 文件中的 multiDexEnabled true
  • API 20 及以下应用程序的“依赖项”下的模块 gradle 文件中的“实现‘com.android.support:multidex:1.0.3’”因上述异常而失败。

我必须对清单文件进行更改,并将应用程序的完全限定类名替换为“android.support.multidex.MultiDexApplication”

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
            android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

请阅读Multidex上的此页面了解更多详细信息。这是应用程序属性的参考。我已经在 Firebase 测试实验室和物理设备中测试了我的应用程序,它适用于从 API 17 到 API 28 的所有版本。