一、问题描述
在Android中使用WebView加载非https链接时,出现错误:
net::ERR_CLEARTEXT_NOT_PERMITTED
二、原因分析
从Android 9.0(API级别28)开始,默认情况下禁用明文支持。因此http的url均无法在webview中加载,Android9.0对未加密的流量不再信任,添加了新的限制。
三、解决办法
1.创建文件 res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">example.com(to be adjusted)</domain>
</domain-config>
</network-security-config>
其中将example.com(to be adjusted)替换为你自己的域名,根域名即可,includeSubdomains="true" 就包含了二级域名。
2.修改 AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
...>
...
</application>
</manifest>
application节加入
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
3.检查网络访问权限,修改 AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
<uses-permission android:name="android.permission.INTERNET" />
...
</manifest>
增加 <uses-permission android:name="android.permission.INTERNET" />
参考:https://stackoverflow.com/questions/45940861/android-8-cleartext-http-traffic-not-permitted