今天我们发布了OkHttp 3.13。有了这个更新,我们正在提出项目的要求:
- Android 2.3+ / API 9+(2010年12月发布)
- Java 7+(2011年7月发布)
对此:
- Android 5.0+ / API 21+(2014年11月发布)
- Java 8+(2014年3月发布)
切断旧设备是一个严重的变化,我们不会轻易做到!我想解释为什么我们这样做,我们正在做什么来尽量减少干扰,以及如何升级。
为什么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成为互联网新的最低标准。10月15日,我们谷歌,Mozilla,微软和苹果公司的同事宣布他们的浏览器将在2020年初开始需要TLSv1.2或更高版本。
谷歌在Android 5.0中添加了对TLSv1.2的支持。Oracle在Java 8中添加了它。在OkHttp 3.13中,我们要求主机平台内置对TLSv1.2的支持。
Android 4.x怎么样?
Google的分发仪表板显示,2018年10月访问Play商店的设备中约有11%运行的是Android 4.x. 我们创建了一个分支OkHttp 3.12.x来支持这些设备。如果我们遇到任何严重的错误或安全问题,我们将向后移植修复程序并释放。我们计划在2020年12月31日前维持这个分支机构。
如果你真的需要Android 4.x上的TLSv1.2,这是可能的!Ankush Gupta撰写了一份详尽的指南,解释了如何让Google Play服务这样做。即使你遵循这个过程,你仍然应该使用OkHttp 3.12.x和Android 4.x设备。
我该如何升级?
确认您的项目minSdkVersion
至少为21,并且您的Android Gradle插件版本至少为3.2。然后在您的build.gradle
:中使用我们新的Maven坐标:
<span style="color:rgba(0, 0, 0, 0.84)">dependencies {
implementation“com.squareup.okhttp3:okhttp:3.13.1”
...
}</span>
您还需要将Java版本设置为1.8或更高版本。我们现在在源代码中使用Java 8功能(yay lambdas!),这使Android的编译器能够处理它:
<span style="color:rgba(0, 0, 0, 0.84)">android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
...
}</span>
此更新默认情况下还需要具有TLSv1.2功能的 Web服务器。如果您的Web服务器已过期,则对它们的HTTPS调用将失败SSLException
。如有必要,您可以配置OkHttp 3.13以允许TLSv1和TLSv1.1连接:
<span style="color:rgba(0, 0, 0, 0.84)">OkHttpClient client = new OkHttpClient.Builder()
。connectctionSpecs(Arrays.asList(ConnectionSpec.COMPATIBLE_TLS))。build
();</span>
如果您发现自己这样做,请注意:在2020年初,Web浏览器将停止连接到您的Web服务器!我们建议尽可能提高服务器的能力,降低客户的需求。
我们在项目维基上记录了TLS配置更改。