You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Paho客户端连接Mosquitto Broker:虚拟机正常真机失败

问题排查与解决方案

1. 检查Android网络权限与明文流量限制

  • 确保AndroidManifest.xml中已添加必要权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  • Android 9及以上版本默认禁止明文网络请求,若使用ws://协议(非wss://),需在application标签中添加:
    android:usesCleartextTraffic="true"
    
    或者创建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"
    

2. 排查ProGuard混淆导致的类丢失

Release版默认开启ProGuard混淆,可能破坏MQTT库的核心类,需在android/app/proguard-rules.pro中添加混淆豁免规则:

  • 若使用Paho MQTT库:
    -keep class org.eclipse.paho.** { *; }
    -keep class com.tencent.mqtt.** { *; } // 若用的是Paho的RN封装库,根据实际包名调整
    
  • 若使用mqtt.js:
    -keep class mqtt.** { *; }
    -keep class org.bouncycastle.** { *; }
    

3. 确认Mosquitto Broker的WebSocket配置正确性

  • 检查Mosquitto配置文件(Linux通常为/etc/mosquitto/mosquitto.conf,Windows为安装目录下的mosquitto.conf),确保WebSocket监听配置正确:
    listener 9001
    protocol websockets
    bind_address 0.0.0.0  # 关键:绑定所有网卡,允许局域网设备访问
    
  • 重启Mosquitto服务后,通过netstat -tulpn | grep 9001(Linux)或netstat -ano | findstr :9001(Windows)确认端口是否监听在0.0.0.0:9001,而非仅localhost:9001。
  • 查看Mosquitto日志(Linux下/var/log/mosquitto/mosquitto.log),确认无端口占用或配置错误提示。

4. 验证Release版的MQTT连接地址配置

确保Release打包时使用的是树莓派的局域网IP(如ws://192.168.x.x:9001),而非虚拟机的localhost或仅在Debug环境中生效的变量。检查代码中是否存在环境变量区分,比如:

const MQTT_BROKER = __DEV__ ? 'ws://10.0.2.2:9001' : 'ws://192.168.1.100:9001';

避免Release版错误使用了仅虚拟机可用的地址。

5. 排查真机网络环境问题

  • 确认真机与树莓派处于同一局域网,且未连接VPN、代理服务器(部分代理会拦截WebSocket请求)。
  • 尝试切换真机的WiFi频段(2.4G/5G),部分路由器的双频段隔离会导致跨网段无法访问。
  • 用真机浏览器访问ws://树莓派IP:9001,若提示"Failed to connect",说明网络层面存在阻塞;若能建立连接,则问题出在应用代码配置。

内容的提问来源于stack exchange,提问作者tapo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:10:22