Android 9 请求网络报异常:Cleartext HTTP traffic not permitted
因为从Android9.0(API 28)开始,NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted(), 将return false。这表示Android默认将禁止明文访问网络,只允许使用https url访问
为了避免强制启用https,可以有以下几种做法(任选其一即可):
-
AndroidManifest文件的application节点添加
android:usesCleartextTraffic="true"
:<?xml version="1.0" encoding="utf-8"?> <manifest ...> <uses-permission android:name="android.permission.INTERNET" /> <application ... android:usesCleartextTraffic="true" ...> ... </application> </manifest>
-
AndroidManifest文件的application节点添加
android:networkSecurityConfig="@xml/network_security_config"
:<?xml version="1.0" encoding="utf-8"?> <manifest ...> <uses-permission android:name="android.permission.INTERNET" /> <application ... android:networkSecurityConfig="@xml/network_security_config" ...> ... </application> </manifest>
还需要新建
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>
- 在AndroidManifest文件的manifest节点添加
android:targetSandboxVersion="1"
:<?xml version="1.0" encoding="utf-8"?> <manifest android:targetSandboxVersion="1"> <uses-permission android:name="android.permission.INTERNET" /> ... </manifest>
以上三种做法均可以让我们的应用继续使用明文访问网络,不过既然Android强制要求启用https,还是尽快迁移到https为妙。