遵循gRPC Kotlin Android快速入门仍遇Server Response: UNAVAILABLE问题求助
以下是文档未明确提及但可能导致问题的几个关键操作:
修正Android端的目标地址
绝对不能用localhost或127.0.0.1,这会指向安卓设备自身,必须替换为你电脑在局域网的实际IP(比如192.168.1.100)。检查安卓代码中ManagedChannel的初始化代码,确保地址配置正确:val channel = ManagedChannelBuilder.forAddress("192.168.1.100", 50051) .usePlaintext() .build()确保服务端绑定到局域网可访问地址
部分gRPC服务端默认仅绑定127.0.0.1(本地回环),导致局域网内设备无法连接。修改服务端代码,强制绑定到0.0.0.0(允许所有网卡访问):import java.net.InetAddress // ... ServerBuilder.forPort(50051) .addService(HelloWorldService()) .bindAddress(InetAddress.getByName("0.0.0.0")) .build() .start()重启服务端后,用命令验证端口监听状态:
# Linux/macOS ss -tulpn | grep 50051 # Windows netstat -ano | findstr :50051输出中需显示
0.0.0.0:50051而非127.0.0.1:50051。解决Android 9+的明文网络限制
Android 9及以上系统默认禁止明文网络请求(gRPC明文连接属于此类),需配置网络安全策略:- 在
res/xml目录下创建network_security_config.xml:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">你的电脑局域网IP</domain> </domain-config> </network-security-config> - 在
AndroidManifest.xml的<application>标签中添加配置引用:android:networkSecurityConfig="@xml/network_security_config"
(测试阶段可临时添加
android:usesCleartextTraffic="true"到<application>标签,但正式环境不建议)- 在
验证设备与电脑的网络连通性
通过adb shell ping电脑的局域网IP,确认网络通路正常:adb shell ping 192.168.1.100如果ping不通,检查路由器是否开启了AP隔离功能(部分路由器默认开启,会阻止局域网内设备互访)。
内容的提问来源于stack exchange,提问作者Karthik Kiran Karalgikar
相关产品推荐
相关产品推荐

