我的代码在Android KitKat上运行正常,但在Pie上运行时出现了io异常。
不允许向server.com发送明文http流量
我正在使用Volley进行服务器调用。
我的代码在Android KitKat上运行正常,但在Pie上运行时出现了io异常。
不允许向server.com发送明文http流量
我正在使用Volley进行服务器调用。
第一步是理解为什么Google要强制使用HTTPS。您可以在开发人员页面上阅读更多相关信息。
至于如何解决,有两个选项:
1)使用HTTPS!
2)在您的XML文件夹中创建一个名为security_config.xml
的新文件,并添加以下内容:
<?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>
然后在您的清单文件中添加此内容
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/security_config">
</application>
</manifest>
由于显而易见的原因,不建议采用第二个观点!
简单解决方案:
在您的清单中添加以下行:
android:usesCleartextTraffic="true"
因为我在使用php页面的json api时遇到了同样的问题。
应该是这样的:
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
</manifest>
希望它能够运作。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">192.168.1.100</domain>
<domain includeSubdomains="true">http://example1.com</domain>
<domain includeSubdomains="true">example1.com</domain>
</domain-config>
</network-security-config>
<application
部分添加以下行,以便将其加入:android:networkSecurityConfig="@xml/testing_security"
其他答案中提出了一些替代方案 - 我认为允许所有明文流量是不明智的,因为第三方库可能会危害您。最好明确定义主机目标,以最小化此不安全通信的影响。
解决方案
编辑你的 ► ’ network security_config.xml ’
添加一行 ► Domain.com 或者你的IP(12.34.456.78)
修改后会变成这样
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">Domain.com OR your IP(12.34.456.78)</domain>
<domain includeSubdomains="true">localhost</domain>
</domain-config>
</network-security-config>
// Because I only want this in development
#if DEBUG
[assembly: Application(UsesCleartextTraffic = true)]
#endif