转载请注明原文地址:https://www.jianshu.com/p/c3b6ab91da1c
原文标题:OkHttp 3.13及其后续版本必须 Android 5.0+
原文发布于:2019-02-05
今天我们发布了 OkHttp 3.13。更新这个版本的工程需要从:
-
Android 2.3+ 即 API 9+ (发布于 2010 年 12 月)
-
Java 7+ (发布于 2011 年 7 月)
升级为:
-
Android 5.0+ 即 API 21+ (发布于 2014 年 12 月)
-
Java 8+ (发布于 2014 年 3 月)
砍掉老设备是一件很重要的变更,我们并非率性而为!下面我将要解释我们为什么这样做,我们如何把冲击最小化,以及如何升级。
为何此刻开始 Android 5+
TLS 是一种用于创建安全的、私有的、已认证的 HTTPS 调用的机制。OkHttp 已知有五个版本:SSLv3 (1996), TLSv1 (1999), TLSv1.1 (2006), TLSv1.2 (2008), and TLSv1.3 (2018)。在 2014 年由于 贵兵犬攻击,我们弃用了对 SSLv3 的支持。
如今到了弃用 TLSv1 和 TLSv1.1 的时候了,TLSv1.2 将成为互联网新的最低标准。在 10 月 15 我们业界的 Google, Mozilla, Microsoft, 以及 Apple 联合声明他们的浏览器将于 2020 年初开始只支持 TLSv1.2 或更高版本的协议。
Google 在 Android 5.0 才引入支持 TLSv1.2 。Oracle 在 Java 8 引入。在 OkHttp 3.1.3 版本我们需要主机平台(即:服务器)内置支持 TLSv1.2。
Android 4.x 咋办?
Google 的 版本分布面板 显示,于 2018 年 10 月,大约 11% 的设备为 Android 4.x 版本。为此我们创建了一个分支,OkHttp 3.12.x,用于支持这些设备。假如我们遇到任何严重的 Bug 或者安全问题,我们都将进行修复并发布补丁。我们计划保持这个分支,直到 2020 年 12 月 31 日。
译者注:版本分布面板 可能需要科学上网,目前显示,截止到 2019-05-07 Android 4.x 版本大约占用 9.6 %
如果你确实需要在 Android 4.x 支持 TLSv1.2 ,也是可能的!Ankush Gupta 曾写过一篇详细的指南,它阐述了如何通过 Google Play Services 实现它。即使你遵循这篇文章来处理,你也只能使用 OkHttp 3.12.x 在 Android 4.x 设备上。
译者注:国内就不要想了。。。。
如何升级?
配置工程的 minSdkVersion 至少为 21,同时 Android Gradle Plugin 版本至少到 3.2。 然后在 build.gradle 作如下配置:
dependencies {
implementation "com.squareup.okhttp3:okhttp:3.13.1"
...
}
你也需要设置 Java 版本到 1.8 或更高。我们可以开始使用 Java 8 的新特性来编码了 ( 哇 lambdas !) 同时 Android 编译器 如下处理:
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
...
}
这个更新也需要 web 服务器必须默认支持 TLSv1.2 。如果你的 web 服务器是过时的 HTTPS 调用他们,将抛出一个 SSLException 。如有必要你可以配置 OkHttp 3.13 允许 TLSv1 和 TLSv1.1 连接:
OkHttpClient client = new OkHttpClient.Builder()
.connectionSpecs(Arrays.asList(ConnectionSpec.COMPATIBLE_TLS))
.build();
如果你这样做,会发现一个警告:在 2020 年初网页浏览器将禁止连接你的 web 服务器!我们推荐升级服务器,而尽可能不是降低客户端的要求。
在我们的工程 wiki 里,我们编写了 TLS configuration changes。
网友评论