这是在使用支持库版本28.0.0-rc01的Android P上。
根据一些SO帖子,我已按照此问题的说明/解决方案进行操作:
Android 8: Cleartext HTTP traffic not permitted
以及其他几个。
问题是,即使network-security-config base-config将此值设置为true,当我检查NetworkSecurityPolicy.isCleartextTrafficPermitted时,它也会返回false。在WebView中导航到非https页面时,这会导致ERR_CLEARTEXT_NOT_PERMITTED错误。
这是AndroidManifest的代码段
<application
...
android:supportsRtl="true"
android:networkSecurityConfig="@xml/network_security_config"
android:usesCleartextTraffic="true">
我已经尝试过结合使用“ usesCleartextTraffic”,“ networkSecurityConfig”和两者的组合。
这是相关的network-security-config
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" >
<trust-anchors>
<certificates src="system"/>
</trust-anchors>
</base-config>
</network-security-config>
请注意,我尝试过使用和不使用“信任锚”。我确实有一个AndroidManifest产品和network-security-config产品,以及一个调试版本。但是,两者的设置相同(除系统外,调试还允许用户证书)。
我还通过检查logcat验证了正在读取安全策略。此时,我似乎茫然无措,因为似乎无法兑现设置。
任何帮助将不胜感激。
答案 0 :(得分:5)
由于某些原因,即使设置几乎相同,调试AndroidManifest和network-security-config仍会引起问题-唯一的区别是调试版本还允许用户生成证书。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:networkSecurityConfig="@xml/network_security_config"
tools:targetApi="n" />
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<base-config cleartextTrafficPermitted="true" >
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="user" />
<certificates src="system" />
</trust-anchors>
</base-config>
</debug-overrides>
</network-security-config>
删除调试AndroidManifest.xml和network_security_config.xml文件可以解决此问题。我仍然不确定为什么会起作用,但是无论如何我们都不再需要调试清单了,所以现在就继续吧。
答案 1 :(得分:2)
我只有:
android:usesCleartextTraffic="true"
清单中的并删除了network_security_config.xml
。似乎可行!