问题描述
使用Retrofit2发起请求时报错:
java.net.UnknownServiceException: CLEARTEXT communication to 10.0.2.2 not permitted by network security policy
如下图所示:
原因分析
这个错误是由于 Android 9 (API level 28) 引入了新的网络安全策略导致的。默认情况下,Android 9 禁止使用明文(Cleartext)流量进行网络通信,只允许使用加密的 HTTPS 连接。
解决方案
要解决这个问题,你可以通过以下两种方式之一:
- 使用 HTTPS 连接:最佳实践是将你的服务器配置为使用 HTTPS 连接,这样可以确保通信的安全性。一旦你的服务器上配置了有效的 SSL 证书,你只需将 Retrofit 的 Base URL 修改为
https://
开头的地址即可。 - 临时允许明文通信(仅限调试期间):如果你的服务器无法使用 HTTPS 连接,或者你只是在开发和调试阶段需要使用明文通信,你可以在
AndroidManifest.xml
文件中添加以下代码来临时允许明文通信:
<application
...
android:usesCleartextTraffic="true"
...
>
...
</application>
注意:在正式发布应用之前,必须将 android:usesCleartextTraffic
设置为 false
,以确保安全性。