关于okhttp 3.14.0 版本在Android 4.4 版本上报ExceptionInInitializerError错误

今天我们发布了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的支持。

现在是时候放弃TLSv1TLSv1.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以允许TLSv1TLSv1.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配置更改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值