Android 9.0强制使用https,会阻塞http请求,如果app使用的第三方sdk有http,将全部被阻塞

Android 9.0强制使用https,会阻塞http请求,如果app使用的第三方sdk有http,将全部被阻塞。
出现

UnknownServiceException: CLEARTEXT communication to localhost not permitted by network security policy

或者

IOException java.io.IOException: Cleartext HTTP traffic to * not permitted

就说明,你需要去兼容了。最简单的兼容方式是在AndroidManifest文件的application设置

android:usesCleartextTraffic="true"

这是第一种方式。
可以参考stackoverflow的回答

Android P - CLEARTEXT communication not permitted by network security policy

不允许明文通信,

第二种方式:网络安全性配置

在AndroidManifest文件的application节点配置

android:networkSecurityConfig="@xml/network_security_config"

xml中的具体配置。
可以参考我的配置

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!--默认配置,明文通信,使用系统证书-->
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <!--trust system while release only-->
            <certificates src="system" />
        </trust-anchors>
    </base-config>
       <!--自己服务器,使用https,将所有域名添加到此-->
    <domain-config cleartextTrafficPermitted="false">
        <domain includeSubdomains="true">xxx.xxx.com</domain>
        <!--<trust-anchors>-->
        <!--<certificates src="@raw/my_proxy_ssl_proxying_certificate" />-->
        <!--</trust-anchors>-->
    </domain-config>
    <!--debug模式,可以使用用户自己安装的正式,比如charles抓包安装的证书,这个配置只在 android:debuggable 为 "true" 时将应用的重写,IDE 和构建工具生成的非发布版本通常属于此情况-->
    <debug-overrides>
        <!-- Trust user added CAs while debuggable only -->
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </debug-overrides>
</network-security-config>

第二种方式才是最好的方式,具体参考官方文档security-config

还有就是如果在请求https的时候抛出SSLHandshakeException

javax.net.ssl.SSLHandshakeException:
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 

请检查手机是不是设置了代理。android7.0之后不特殊处理,是无法抓取https。
把android官方文档放这里,可以自己查阅通过https和SSL确保安全(https://developer.android.com/training/articles/security-ssl?hl=zh-cn)

    原文作者:mars_chu
    原文地址: https://www.jianshu.com/p/5f65656d0a06
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞