【问题标题】:Firebase crashlytics crashes with exception IllegalStateException: Expected Android API level 21+ but was 19Firebase crashlytics 崩溃并出现异常 IllegalStateException: Expected Android API level 21+ but was 19
【发布时间】:2020-12-02 04:17:02
【问题描述】:

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$1.then(SettingsController.java:200)
       at com.google.firebase.crashlytics.internal.settings.SettingsController$1.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$1$1.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 版本限制。

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

【问题讨论】:

  • 如果您有 Firebase 产品的错误报告,您应该通过Firebase supportGitHub 提交。
  • 您使用的是什么版本的 OkHttp? OkHttp 3.13 raised the minSdkVersion to 21.
  • @ianhanniballake 我没有在我的代码中使用 OkHttp。可能是 crashlytics 对它有依赖。
  • 你的gradle dependencies的输出是什么?
  • @ianhanniballake 谢谢。我可以找到 OkHttp 的两个依赖项,一个通过firebase-crashlytics 链接到okhttp:3.12.1,另一个通过nitrite 链接到okhttp:4.3.1。我认为 OkHttp 的 min SDK 升级是在 3.13 版本中完成的,所以 niterite 所依赖的较新版本应该是问题所在。知道如何防止通过nitrite 依赖获取这个新版本吗?

标签: android firebase crashlytics


【解决方案1】:

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

根据博文:

为什么是 Android 5+ 以及为什么是现在?

TLS 是使 HTTPS 调用安全、私密和经过身份验证的机制。 OkHttp 知道五个版本:SSLv3 (1996)、TLSv1 (1999)、TLSv1.1 (2006)、TLSv1.2 (2008) 和 TLSv1.3 (2018)。为了应对 POODLE 攻击,我们在 2014 年放弃了对 SSLv3 的支持。

现在是时候放弃 TLSv1 和 TLSv1.1,让 TLSv1.2 成为互联网的新最低标准了。 [2018 年 10 月 15 日] 我们在 Google、Mozilla、Microsoft 和 Apple 的同事宣布,从 2020 年初开始,他们的浏览器将需要 TLSv1.2 或更高版本。

Google 在 Android 5.0 中添加了对 TLSv1.2 的支持。 Oracle 在 Java 8 中添加了它。在 OkHttp 3.13 中,我们要求主机平台具有对 TLSv1.2 的内置支持。

因此升级到最新版本的 OkHttp 并将您的 minSdkVersion 提高到 21 是非常充分的安全理由。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多