致命异常:com.google.android.gms.common.api.internal.BackgroundDetector.readCurrentStateIfPossible 中的 java.lang.NoSuchMethodError

Fatal Exception: java.lang.NoSuchMethodError in com.google.android.gms.common.api.internal.BackgroundDetector.readCurrentStateIfPossible

我在 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'

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

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

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

play-services-base:16.1.0 假设它至少运行在 JellyBean(API 级别 16)OS(我在 Android Studio java 反编译器的帮助下找到了这个(PlatformVersion.isAtLeastJellyBean 只是无条件 return 正确。)),这在我的情况下是不正确的。

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

直到Google没有解决问题,就使用强制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"
}