Firebase crashlytics 崩溃并出现异常 IllegalStateException:预期 Android API 级别 21+ 但为 19

Firebase crashlytics crashes with exception IllegalStateException: Expected Android API level 21+ but was 19

Firebase crashlytics 在我的 android 应用程序中报告了以下崩溃。

Caused by java.lang.IllegalStateException: Expected Android API level 21+ but was 19
       at okhttp3.internal.platform.AndroidPlatform.<clinit>(AndroidPlatform.kt:205)
       at okhttp3.internal.platform.Android10Platform.<clinit>(Android10Platform.kt:65)
       at okhttp3.internal.platform.Platform$Companion.findPlatform(Platform.kt:201)
       at okhttp3.internal.platform.Platform$Companion.access$findPlatform(Platform.kt:169)
       at okhttp3.internal.platform.Platform.<clinit>(Platform.kt:170)
       at okhttp3.OkHttpClient.<init>(OkHttpClient.kt:220)
       at okhttp3.OkHttpClient.<init>(OkHttpClient.kt:212)
       at com.google.firebase.crashlytics.internal.network.HttpRequest.<clinit>(HttpRequest.java:43)
       at com.google.firebase.crashlytics.internal.network.HttpRequestFactory.buildHttpRequest(HttpRequestFactory.java:43)
       at com.google.firebase.crashlytics.internal.common.AbstractSpiCall.getHttpRequest(AbstractSpiCall.java:113)
       at com.google.firebase.crashlytics.internal.settings.network.DefaultSettingsSpiCall.invoke(DefaultSettingsSpiCall.java:80)
       at com.google.firebase.crashlytics.internal.settings.SettingsController.then(SettingsController.java:200)
       at com.google.firebase.crashlytics.internal.settings.SettingsController.then(SettingsController.java:193)
       at com.google.android.gms.tasks.zzp.run(:2)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
       at com.google.firebase.crashlytics.internal.common.ExecutorUtils.onRun(ExecutorUtils.java:64)
       at com.google.firebase.crashlytics.internal.common.BackgroundPriorityRunnable.run(BackgroundPriorityRunnable.java:27)
       at java.lang.Thread.run(Thread.java:841)

可以看出crashlytics自身发生了crash。我的应用程序的最小 android SDK 版本是 19,看起来 crashlytics 期望最小 sdk 级别是 21。

我使用 SDK 19 在 AVD 上测试了应用程序,但应用程序没有崩溃。另外,我在 crashlytics 文档中也找不到最低 SDK 版本限制。

这个问题的原因是什么?有什么办法可以解决吗?

OkHttp 3.13 或更高版本 raised the minSdkVersion to 21 因此,如果您或 任何 依赖项依赖于 Android 的任何较新版本,您必须提高 minSdkVersion 到 21 或更高或删除任何引入更新版本的 OkHttp 的依赖项。

根据博客 post:

Why Android 5+ and Why Now?

TLS is the mechanism that makes HTTPS calls secure, private, and authenticated. OkHttp is aware of five versions: SSLv3 (1996), TLSv1 (1999), TLSv1.1 (2006), TLSv1.2 (2008), and TLSv1.3 (2018). We dropped support for SSLv3 in 2014 in response to the POODLE attack.

Now it’s time to drop both TLSv1 and TLSv1.1 and to make TLSv1.2 the Internet’s new minimum standard. On October 15 [2018] our colleagues at Google, Mozilla, Microsoft, and Apple announced that their browsers will require TLSv1.2 or better starting in early 2020.

Google added support for TLSv1.2 in Android 5.0. Oracle added it in Java 8. In OkHttp 3.13 we require that the host platform has built-in support for TLSv1.2.

所以升级到最新版本的 OkHttp 并将您的 minSdkVersion 提高到 21 是出于非常强大的安全原因。