Android 7后默认禁止了非HTTPS请求,如果在请求中使用HTTP会报如下错误:

E/c: Cleartext traffic not permitted: http://223.167.104.12:8080
    java.io.IOException: Cleartext traffic not permitted: http://223.167.104.12:8080
        at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:439)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:560)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:492)
        at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:470)
        at qrom.component.wup.transport.a.c.b(SourceFile:260)
        at qrom.component.wup.transport.a.e.run(SourceFile:315)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)

我们可以在Manifest的Application节点配置networkSecurityConfig属性来自定网络安全策略,如下:

<application
        android:name=".App"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/app_theme"
        android:networkSecurityConfig="@xml/network_security_config">
        ......
 </application>

\res\xml目录下新建network_security_config.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!--  默认配置,是否开启Http流量允许-->
    <base-config cleartextTrafficPermitted="true"></base-config>
    <!--  特例配置,配置某个域名是否开启Http流量允许-->
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">android.bugly.qq.com</domain>
        <domain includeSubdomains="true">155.25.62.33</domain>
    </domain-config>
</network-security-config>

更多具体描述可以参考官方文档