2020年7月19日
android9.0 webView网页无法打开
因为从Android9.0(API 28)开始,NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted(), 将return false。这表示Android默认将禁止明文访问网络,只允许使用https url访问
为了避免强制启用https,可以有以下几种做法(任选其一即可):
0. AndroidManifest文件的application节点添加android:usesCleartextTraffic="true"
:
1 2 3 4 5 6 7 8 9 10 |
<?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"
:1234567891011<span class="token prolog"><?xml version="1.0" encoding="utf-8"?></span><span class="token tag"><span class="token punctuation"><</span>manifest <span class="token attr-name">...</span><span class="token punctuation">></span></span><span class="token tag"><span class="token punctuation"><</span>uses-permission <span class="token attr-name"><span class="token namespace">android:</span>name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>android.permission.INTERNET<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span><span class="token tag"><span class="token punctuation"><</span>application<span class="token attr-name">...</span><span class="token attr-name"><span class="token namespace">android:</span>networkSecurityConfig</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>@xml/network_security_config<span class="token punctuation">"</span></span><span class="token attr-name">...</span><span class="token punctuation">></span></span>...<span class="token tag"><span class="token punctuation"></</span>application<span class="token punctuation">></span></span><span class="token tag"><span class="token punctuation"></</span>manifest<span class="token punctuation">></span></span>还需要新建
res/xml/network_security_config.xml
文件:1234567<span class="token prolog"><?xml version="1.0" encoding="utf-8"?></span><span class="token tag"><span class="token punctuation"><</span>network-security-config<span class="token punctuation">></span></span><span class="token tag"><span class="token punctuation"><</span>domain-config <span class="token attr-name">cleartextTrafficPermitted</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token punctuation"><</span>domain <span class="token attr-name">includeSubdomains</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>true<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Your URL(ex: 127.0.0.1)<span class="token tag"><span class="token punctuation"></</span>domain<span class="token punctuation">></span></span><span class="token tag"><span class="token punctuation"></</span>domain-config<span class="token punctuation">></span></span><span class="token tag"><span class="token punctuation"></</span>network-security-config<span class="token punctuation">></span></span> - 在AndroidManifest文件的manifest节点添加
android:targetSandboxVersion="1"
:123456<span class="token prolog"><?xml version="1.0" encoding="utf-8"?></span><span class="token tag"><span class="token punctuation"><</span>manifest <span class="token attr-name"><span class="token namespace">android:</span>targetSandboxVersion</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>1<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token punctuation"><</span>uses-permission <span class="token attr-name"><span class="token namespace">android:</span>name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>android.permission.INTERNET<span class="token punctuation">"</span></span> <span class="token punctuation">/></span></span>...<span class="token tag"><span class="token punctuation"></</span>manifest<span class="token punctuation">></span></span>
以上三种做法均可以让我们的应用继续使用明文访问网络,不过既然Android强制要求启用https,还是尽快迁移到https为妙。