zoukankan      html  css  js  c++  java
  • Caused by : java.io.IOException: Cleartext HTTP traffic to 《“url”》 not permitted

    一、问题原因:

    根本原因是从Android9.0开始,出于完全因素考虑,默认不再支持http网络请求,需要使用 https。

    二、解决方案:

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

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

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

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

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

    方案 1:

    A:创建 res/xml/network_security_config.xml

    <?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>
  • 相关阅读:
    Flask把变量注册到模板中
    $.each与$(data).each区别
    【Python备忘】python判断文件和文件夹是否存在
    ISP图像质量自动化测试方法
    使用微软的(how-old.net)构建智能门店管理系统
    在virtualenv中安装libxml2和libxslt
    Python 装饰器学习以及实际使用场景实践
    tensorflow零起点快速入门(4) --入门常用API
    tensorflow零起点快速入门(3)
    树莓派和STM32通过USB和串口通信记录
  • 原文地址:https://www.cnblogs.com/aimqqroad-13/p/10075118.html
Copyright © 2011-2022 走看看