Android高版本http请求错误

在 Android 10(API 29) 上 Volley 请求 http 失败,但在 Android 7(API 24)上正常

request_http_failed_in_high_version

查询到 Android Pie 行为变更中提到:

传输层安全协议 (TLS) 实现变更

系统的传输层安全协议 (TLS) 实现在 Android 9 中经历了若干次变更:

如需了解有关在 Android 应用中进行安全网络请求的更多信息,请参阅 一个 HTTPS 示例

解决方法

  1. 改用 https 请求 (推荐)
  2. targetSdkVersion 改为 27 以下
  3. AnroidManifest.xml 中的 <application> 标签中添加 android:usesCleartextTraffic=“true”
  4. res/xml 目录下创建 network_security_config.xml 文件
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
     <!--默认配置,明文通信,使用系统证书-->
     <base-config cleartextTrafficPermitted="true">
         <trust-anchors>
             <certificates src="system" />
         </trust-anchors>
     </base-config>
    </network-security-config>
    

然后在 AndroidManifest.xml 中的 <application> 标签中添加android:networkSecurityConfig="@xml/network_security_config"


按照第三条修改后:

after