【问题标题】:Firebase Performance crashing in API 19 with Google Play Services 10.2.98使用 Google Play 服务 10.2.98 的 API 19 中的 Firebase 性能崩溃
【发布时间】:2017-10-25 11:43:00
【问题描述】:

本周我开始在我的新应用中测试新的 Firebase 性能。一旦我将 Firebase 用于 Auth 和 DB 等其他功能,我已经将所有软件包更新到最新的 10.2.6 Firebase 版本并遵循所有 pre req 说明。

minAPI 为 19。

我的问题是,在运行 Android 4.4.1 的真实 Galaxy Duos 设备中,应用程序仅在 API 19 中使用 Google Play 服务 10.2.98 崩溃。当应用程序启动时,它在设备中找不到 firebase-perf。

仅在此软件包中发生,在其他设备和更高版本中一切正常,我可以在 Firebase 性能仪表板中看到数据。

提示?

下面的堆栈跟踪

问候,

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) 

【问题讨论】:

  • 在继续之前提示用户更新 Google Play 服务?从 Google Play 管理中心将设备列入黑名单以阻止下载?
  • 它仍在开发中。我可以满足您的两个建议,但奇怪的是 Firebase 文档需要最低版本 10.2.6 而设备版本更高 10.2.98。
  • 哦,如果您是开发人员,您不能确定问题出在设备或您的实现上(在某些情况下可能需要进行自定义调整)。或者您使用过一些在线服务在数百台设备上进行了测试?
  • 非常similar looking stack traces(尽管对于不同的缺失类)已通过启用Multidex 得到纠正。从您之前的评论(“10 个 Firebase 包”)来看,您的应用可能非常大。尝试使用APK Analyzer 看看是否需要 Multidex。
  • 谢谢@BobSnyder。我解决了这个问题,但我承认我不明白解决方案:-)。我正在使用“@AddTrace”指令来检测我的代码。在 APK Analyzer 中,我看到使用了 AddTrace,但没有使用其他名为 AppTraceStart。我更改了我的代码并删除了“@AddTrace”指令并开始使用带有 .start() 等的 Trace 类。由于某种原因,它也在 API 19 和其他版本中工作。以后我会做更多的测试。

标签: android firebase firebase-performance


【解决方案1】:

先检查一下

defaultConfig {
 multiDexEnabled true
}
dependencies {
 implementation 'androidx.multidex:multidex:2.0.1'
}

然后在 Application 类中添加这个解决了这个问题

 @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

【讨论】:

    【解决方案2】:

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

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

    即使我通过提供启用了 MultiDex

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

    我不得不对清单文件进行更改,并将我的应用程序的完全限定类名替换为“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>
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-05
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多