Android 中 报 如下错误 : java.net.UnknownServiceException: CLEARTEXT communication to 47.92.134.214 not permitted by network security policy
时间: 2025-06-07 19:06:21 浏览: 31
<think>好的,我现在需要解决用户在Android开发中遇到的java.net.UnknownServiceException问题,具体错误信息是“CLEARTEXT communication to 47.92.134.214 not permitted by network security policy”。让我一步步分析这个问题。
首先,这个错误通常发生在Android应用尝试使用明文HTTP协议进行网络通信,而根据Android 9(API级别28)及更高版本的安全策略,默认禁止非加密的HTTP流量。用户提到的IP地址47.92.134.214可能是他们尝试连接的服务器,但因为没有使用HTTPS,所以被系统阻止了。
接下来,我需要确认Android的网络安全性配置。从Android 9开始,应用默认只能使用HTTPS,如果要用HTTP,必须在网络安全配置中明确允许。用户可能没有正确配置这个部分。
解决方案可能有几种。首先,检查应用的targetSdkVersion,如果高于27,那么默认会启用网络安全策略。用户需要创建一个网络安全配置文件,比如res/xml/network_security_config.xml,并在其中允许明文通信。然后,在AndroidManifest.xml中引用这个文件。
另外,如果用户暂时无法切换到HTTPS,可以考虑降低targetSdkVersion到27或以下,但这只是临时解决方案,不建议长期使用。更好的做法是让服务器支持HTTPS,或者如果服务器在用户控制下,配置SSL证书。
还需要注意,Android允许针对特定域名或IP地址允许明文传输,但需要正确配置。比如,用户可能需要将IP地址47.92.134.214添加到允许列表中,或者在配置中使用domain属性。但要注意,IP地址可能需要使用另一种配置方式,可能涉及usesCleartextTraffic属性。
同时,检查AndroidManifest.xml中的application标签是否设置了android:usesCleartextTraffic="true",这在某些情况下可能允许明文通信,但同样需要注意安全风险。
最后,需要确保所有配置更改后清理并重新构建项目,有时缓存可能导致配置未生效。如果用户仍然遇到问题,可能需要检查服务器是否正确响应,或者是否存在其他网络问题。</think>在Android开发中遇到`java.net.UnknownServiceException: CLEARTEXT communication to [IP] not permitted by network security policy`错误,表明你的应用尝试通过**明文HTTP协议**(而非加密的HTTPS)与服务器通信,但被Android系统的网络安全策略阻止。以下是逐步解决方案:
---
### 1. **原因分析**
- **Android 9+ (API 28+) 默认禁用明文HTTP**:从Android 9开始,应用默认禁止非加密的HTTP流量,强制要求使用HTTPS。
- **目标服务器未使用HTTPS**:你尝试连接的IP地址`47.92.134.214`可能未配置SSL证书,或应用未正确处理HTTPS请求。
---
### 2. **解决方案**
#### 方案一:允许明文通信(临时方案,仅限测试)
在`AndroidManifest.xml`的`<application>`标签中添加以下属性:
```xml
android:usesCleartextTraffic="true" <!-- 允许明文HTTP -->
```
**注意**:此方法会降低安全性,仅建议在开发阶段使用。
---
#### 方案二:配置网络安全策略(推荐)
1. **创建网络安全配置文件**
在`res/xml`目录下新建`network_security_config.xml`:
```xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<!-- 允许特定域名或IP使用明文 -->
<domain includeSubdomains="true">47.92.134.214</domain>
</domain-config>
</network-security-config>
```
2. **在Manifest中引用配置**
修改`AndroidManifest.xml`的`<application>`标签:
```xml
android:networkSecurityConfig="@xml/network_security_config"
```
---
#### 方案三:降低targetSdkVersion(不推荐)
在`build.gradle`中临时降低`targetSdkVersion`至27或更低:
```groovy
android {
compileSdkVersion 33
defaultConfig {
targetSdkVersion 27 // 仅作临时测试用
}
}
```
**警告**:此方法可能导致应用无法上架Google Play,且存在安全风险。
---
#### 方案四:强制服务器使用HTTPS(终极方案)
联系服务器管理员,为`47.92.134.214`配置SSL证书并启用HTTPS,确保应用通过加密协议通信。
---
### 3. **验证配置**
- 清理项目并重新构建(`Build > Clean Project`)。
- 确保设备/模拟器的系统时间正确,否则HTTPS证书可能失效。
- 使用抓包工具(如Charles)检查请求是否成功。
---
### 4. **额外建议**
- **调试工具**:通过`StrictMode`检测潜在的网络问题:
```java
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.build());
```
- **日志排查**:检查`Logcat`中是否有其他相关错误(如证书错误或DNS解析失败)。
通过以上步骤,你可以解决明文HTTP通信被阻止的问题。最终建议优先使用HTTPS以确保数据安全。
阅读全文
相关推荐


















