【问题标题】:Fatal Exception: java.lang.NoSuchMethodError in com.google.android.gms.common.api.internal.BackgroundDetector.readCurrentStateIfPossible致命异常:com.google.android.gms.common.api.internal.BackgroundDetector.readCurrentStateIfPossible 中的 java.lang.NoSuchMethodError
【发布时间】:2019-03-03 21:47:03
【问题描述】:

我在 Android 4.0.4 上得到了很多这样的东西,其中 android.app.ActivityManager.getMyMemoryState 缺少方法。

完整的堆栈跟踪是:

Fatal Exception: java.lang.NoSuchMethodError: android.app.ActivityManager.getMyMemoryState
       at com.google.android.gms.common.api.internal.BackgroundDetector.readCurrentStateIfPossible(Unknown Source:17)
       at com.google.android.gms.common.api.internal.GoogleApiManager.handleMessage(Unknown Source:169)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at com.google.android.gms.internal.base.zap.dispatchMessage(Unknown Source:8)
       at android.os.Looper.loop(Looper.java:154)
       at android.os.HandlerThread.run(HandlerThread.java:65

我的gms相关依赖是:

implementation 'com.google.android.gms:play-services-base:16.1.0'
implementation 'com.google.android.gms:play-services-auth:16.0.1'
implementation 'com.google.android.gms:play-services-games:16.0.0'

+火力基地:

implementation 'com.google.firebase:firebase-core:16.0.7'
implementation 'com.google.firebase:firebase-perf:16.2.3'
implementation 'com.google.firebase:firebase-ads:17.1.3'

似乎是最新的(在撰写本文时)

我能做些什么来防止这些崩溃吗?

【问题讨论】:

  • 您也有任何 Firebase 库吗?当我升级所有 Firebase 和 GMS 库(15.x -> 16.x)时,我注意到了这一点。很难确定是哪一个导致了问题,因为崩溃是间歇性的。我注意到在我的 Android 4 设备上它崩溃了几次,但该应用最终会在第二次或第三次启动时运行 find。
  • 是的。我还使用:firebase-core:16.0.7、firebase-perf:16.2.3 和 firebase-ads:17.1.3
  • 看起来像ViewCompat 问题最小 sdk 版本?当您不提供完整的 build.gradle 文件时,您真的会束缚我们的手。
  • @JonGoodwin,对不起,我提供了足够的信息,这里是完整的build.gradle
  • @Jsyntax,我还不确定,但可能我找到了问题:在play-services-base:16.1.0 com.google.android.gms.common.api.internal.BackgroundDetector.readCurrentStateIfPossible 在尝试调用 android.app.ActivityManager.getMyMemoryState 之前检查 API 级别至少为 Jelly Bean(在在 Jelly Bean 中引入)但在 16.1.0 PlatformVersion.isAtLeastJellyBean 中,无论实际的 android API 级别如何,都返回 true。所以我降级为play-services-base:16.0.1。到目前为止,Crashlytics 没有记录到降级 play-services-base 的崩溃。

标签: android crash google-play-services


【解决方案1】:

我找到了这个问题的根源:

play-services-base:16.1.0 假设它至少在 JellyBean(API 级别 16)操作系统上运行(我在 Android Studio java 反编译器的帮助下发现了这一点(PlatformVersion.isAtLeastJellyBean 只是无条件返回 true。)),这在我的情况下是不正确的.

所以我将play-services-base:16.1.0 降级为play-services-base:16.0.1 并停止崩溃。

【讨论】:

  • 这应该由 Google 解决吗?我不能回到旧图书馆。我尝试在他们的网站上记录一个错误,但它非常直观(谷歌组),我确定它是否被正确记录。如果有人可以将此情况报告给 Google,我们将不胜感激。
  • @Jsyntax 我希望如此。但目前我能想到的唯一解决方案是:为没有播放服务的旧设备创建单独的构建风格。
  • 我对@9​​87654325@ 的使用似乎使用play-services-base:16.1.0 - 但我需要该库来实现搜索位置功能。我被这个困住了。
  • 我不得不将 firebase-core16.0.8 降级到 16.0.7,因为 16.0.8 依赖于 play-services-basement:16.2.0,它(默默地)假定 API 级别为 16。
【解决方案2】:

直到问题没有被谷歌解决,使用并强制play-services-basement:16.0.1

implementation "com.google.android.gms:play-services-basement:16.0.1"

configurations.all {
    resolutionStrategy.force "com.google.android.gms:play-services-basement:16.0.1"
}

【讨论】:

  • 您的解决方案看起来比我的好。我会在野外尝试一下。
  • 但在我的情况下结果很糟糕,立即出现了新的崩溃:致命异常:java.lang.NoSuchMethodError: com.google.android.gms.common.internal.Preconditions.checkHandlerThread at com.google .android.gms.common.internal.GmsClientEventManager.onConnectionSuccess(Unknown Source:20) ... ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-21
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多