Android 9.0 Http 的一些问题
Android 一路走来已经10年光景了,一路革故鼎新,推出了许多优秀的功能,当然这些都离不开我们伟大的,用代码改变世界的coder们,哈哈
今天我们就来聊聊Android 9.0 对于我们开发者来说最直接的一件事情,那就是,Android 9.0 对http动手了!
image.png
Android 9.0 带来了自适应电池、黑暗模式(国内也叫夜间模式)、更轻松的文本选择、新的手势导航、通过Wi-FiRTT进行室内导航、多相机支持、动画增强、加强安全等等新特性,感兴趣的朋友们可以具体看看,有些东西可能咱们国产的MIUI EMUI flyme 上早都有了,但是不得不说,每次Android版本更新都是为了更安全,更好使用。
别的不说,今天来看Http 网络请求。
我接手的项目是个陈年酱香型的,一路迭代了三四年,项目目前是适配到25,适配到了7.1,以前是没问题,但是现在,vivo oppo 和小米商店对于应用版本的兼容适配都做了严格的要求:
也就是说,以后想要偷懒不去适配最新api是不可能的了,哈哈,好好学习吧
那么,作为一个严谨的开发者,肯定是要跟上时代的步伐的,今天上班,二话不说就是修改TargetSdkVersion 版本,由25提升到了28,重新编译后,你才能体会到什么叫做牵一发而动全身
由于androidx 和support的迁移,以及SDK的升级,项目里很多旧的api都不能使用了,一路修改,终于还是改好了,这里贴出来一部分,意思意思
辛苦改完之后,运行项目,却发现,请求不到数据了!
image.png
debug一看,后台报错了?
image.png
但是ios 明明就是可以的嘛,这这-----就尴尬了呀
说来也是神奇,脑子灵光一现,想到了Android 9.0 的http改变,Android 9.0 为了数据传输更加安全高效,故
将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,这也就是意味着http 要被https替代了,其实这是可以理解的,毕竟http是有设计缺陷的,容易被窃取和劫持数据,https是更安全的,也解决了这点问题。
那么,知道了问题所在,就可以解决了
- 将TargetSdkVersion 设置为27,低于28 就可以正常使用http,但是这种方法无异于自欺欺人
- 在资源文件新建xml目录,新建文件
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
并且在清单文件里配置下
<application
android:networkSecurityConfig="@xml/network_security_config">
<!--9.0加的,哦哦-->
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
</application>
- 如果感觉上面步骤麻烦,你甚至可以直接一句话,自己配置文件里加上
android:usesCleartextTraffic="true"
总而言之就是这几种方法了, 我选择的是方法三,这里还是建议小伙伴们使用https协议请求