HarmonyOS鸿蒙Next中模拟器网络权限
HarmonyOS鸿蒙Next中模拟器网络权限 各位老师好,我目前正在进行一个简单的网络的联通的测试。目前是previewer可以正常连接后端,但是模拟器无法连接后端。配置了权限也没用。
项目的架构参照的是三层架构product,feature,common。(应用架构设计基础——三层架构-HarmonyOS应用开发快速入门-Codelabs-华为开发者联盟)
已经在product中default的module.json5中添加了网络权限
但是仍出问题,下图是在模拟器中的画面
下图是预览其中的画面
由此可见不是后端的问题
各位老师,解决了已经,参见下方deepseek回答
在鸿蒙(HarmonyOS)开发中,当你在模拟器中访问本地计算机上运行的Spring Boot后端服务时,使用10.0.2.2
作为IP地址是Android/鸿蒙模拟器的特殊设计,原因如下:
1. 模拟器的网络隔离性
模拟器本身运行在一个虚拟的独立网络中,与你的开发机(本地计算机)不在同一个物理网络。为了安全性和避免冲突,模拟器不能直接使用localhost
或127.0.0.1
访问开发机的服务(因为这两个地址指向模拟器自身)。
2. 模拟器的特殊IP映射
Android/鸿蒙模拟器预定义了一些别名IP,用于访问主机(开发机)的不同服务:
-
10.0.2.2
→ 指向开发机的本地环回地址(127.0.0.1
)这是你访问开发机上运行的Spring Boot后端的关键地址。
-
10.0.2.1
→ 指向开发机的网关/路由器 -
10.0.2.3
→ 模拟器的第一个DNS服务器
3. 为什么不能直接用localhost
或127.0.0.1
?
-
在模拟器中,
localhost
或127.0.0.1
指向的是模拟器自身的虚拟系统,而不是你的开发机。 -
如果你在代码中写
[http://localhost:9090/api/test](http://localhost:9090/api/test)
,鸿蒙应用会尝试访问模拟器内部的9090端口(而不是你电脑上运行的Spring Boot服务),导致连接失败。
4. 真机测试时的区别
当你在真实鸿蒙设备上测试时:
- 必须将
10.0.2.2
改为开发机的实际局域网IP(如192.168.x.x
)。 - 确保手机和开发机在同一个局域网内,且防火墙允许9090端口的入站连接。
5. 完整示例代码调整
// 根据运行环境动态设置IP
let baseUrl: string;
if (/* 判断是否为模拟器 */) {
baseUrl = '[http://10.0.2.2:9090/api/test](http://10.0.2.2:9090/api/test)'; // 模拟器
} else {
baseUrl = '[http://192.168.1.100:9090/api/test](http://192.168.1.100:9090/api/test)'; // 真机,替换为你的电脑IP
}
6. 验证步骤
-
确保Spring Boot后端运行:
在开发机终端执行
netstat -ano | findstr 9090
(Windows)或lsof -i :9090
(Mac/Linux),确认端口监听正常。 -
在模拟器中测试:
直接使用
10.0.2.2
访问,如果返回数据成功,说明配置正确。 -
真机测试:
- 在开发机命令行执行
ipconfig
(Windows)或ifconfig
(Mac/Linux)获取本地IP。 - 将代码中的IP改为该地址,并确保手机和电脑在同一Wi-Fi下。
- 在开发机命令行执行
7. 常见问题排查
- 连接失败:检查开发机防火墙是否放行了9090端口。
- 跨域问题:虽然你的Spring Boot已配置
@CrossOrigin
,但如果仍有问题,可尝试在后端显式设置allowedMethods
和allowedHeaders
。 - HTTPS:如果后端是HTTPS,鸿蒙应用需配置网络安全策略(
networkSecurityConfig
)。
通过这种设计,模拟器可以安全、方便地访问开发机上的本地服务,而无需复杂的网络配置。
更多关于HarmonyOS鸿蒙Next中模拟器网络权限的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,模拟器的网络权限管理主要通过配置文件进行设置。开发者需要在config.json
文件中明确声明应用所需的网络权限,例如访问互联网或特定网络接口。具体权限包括ohos.permission.INTERNET
等。配置完成后,模拟器会根据这些权限限制或允许应用的网络访问行为,确保应用在开发阶段的网络功能测试符合实际运行环境的要求。