Caused by : java.io.IOException: Cleartext HTTP traffic to 《“url”》 not permitted

1、问题缘由:android

根本缘由是从Android9.0开始,出于彻底因素考虑,默认再也不支持http网络请求,须要使用 https。网络

2、解决方案:app

解决的基本思路是:对指定的网址进行过滤,强制容许指定网址继续使用http请求dom

参考地址1:https://stackoverflow.com/questions/45940861/android-8-cleartext-http-traffic-not-permittedide

参考地址2:https://developer.android.com/training/articles/security-config#CleartextTrafficPermittedui

参考地址3: https://koz.io/android-m-and-the-war-on-cleartext-traffic/this

下列解决步骤基于参考地址1整理:spa

方案 1: rest

A:建立 res/xml/network_security_config.xmlcode

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
    </domain-config>
</network-security-config>

注意:上述代码的意思是解除对指定网址的限制。

B:修改 AndroidManifest.xml

配置 android:networkSecurityConfig

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
        ...
    </application>
</manifest>

方案 2:

A:修改AndroidManifest.xml

启用 android:usesCleartextTraffic

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>

 

方案 3:

在 @david.s'的回答中指出 也可能会致使该问题 -

在 Manifest Docs https://developer.android.com/guide/topics/manifest/manifest-element#targetSandboxVersion中对于 有以下描述

android:targetSandboxVersion

The target sandbox for this app to use. The higher the sandbox version number, the higher the level of security. Its default value is 1; you can also set it to 2. Setting this attribute to 2 switches the app to a different SELinux sandbox. The following restrictions apply to a level 2 sandbox:

The default value of usesCleartextTraffic in the Network Security Config is false.Uid sharing is not permitted.

因此,若是你在 AndroidManifest.xml 的节点中配置了 ,须要将它的值置为1.

A:修改AndroidManifest.xml

下降 android:targetSandboxVersion 的版本

<?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>
相关文章
相关标签/搜索