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

物理设备MQTT连接异常求助:曾正常连接公共代理

Android MQTT连接故障排查(物理设备无法连接公共代理)

我正在开发一款订阅MQTT主题并接收消息的Android应用。几小时前,应用在模拟器和物理手机上都能正常运行,但疑似误改了相关库文件后,物理设备无法连接公共MQTT代理(地址tcp://test.mosquitto.org:1883)。程序提示缓存未清理相关错误,但不确定是否是这个原因导致的——之前应用是能成功连接该代理的。

相关配置信息

依赖配置(build.gradle)

dependencies {
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.9.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
}

服务声明(AndroidManifest.xml)

<service
    android:name="org.eclipse.paho.android.service.MqttService" >
</service>

错误日志

Could not remove dir '/data/data/com.example.app6/code_cache/.ll/': No such file or directory 2023-06-30 14:57:18.997   499-499   audit                   auditd                               E  type=1400 audit(1688129838.990:26677): avc:  granted  { execute } for  pid=7749 comm="re-initialized>" path="/data/data/com.example.app6/code_cache/startup_agents/8dee6a62-agent.so" dev="mmcblk0p69" ino=7188 scontext=u:r:untrusted_app:s0:c0,c257,c512,c768 tcontext=u:object_r:app_data_file:s0:c0,c257,c512,c768 tclass=file SEPF_SM-T290_11_0004 audit_filtered

排查建议

  • 清理缓存并重建项目:日志里的目录不存在错误看似无关,但缓存损坏确实可能引发运行异常。先在Android Studio执行Build > Clean Project,再Build > Rebuild Project;同时在物理设备的应用设置里,清除应用的缓存和存储数据后重新安装。
  • 核对MQTT库文件改动:如果有版本控制(比如Git),对比历史版本确认org.eclipse.paho相关的依赖、配置或初始化逻辑是否被误改——比如是否删除了依赖、修改了版本号,或者调整了MqttService的调用代码。
  • 确认网络权限配置:检查AndroidManifest.xml是否添加了必要的网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
  • 简化连接逻辑测试:写一个最小化的连接测试代码,排除业务代码干扰,直接验证MQTT连接:
    MqttConnectOptions options = new MqttConnectOptions();
    options.setCleanSession(true);
    try {
        MqttAndroidClient client = new MqttAndroidClient(context, "tcp://test.mosquitto.org:1883", MqttClient.generateClientId());
        IMqttToken token = client.connect(options);
        token.setActionCallback(new IMqttActionListener() {
            @Override
            public void onSuccess(IMqttToken asyncActionToken) {
                // 连接成功回调
            }
    
            @Override
            public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                exception.printStackTrace(); // 打印详细异常定位问题
            }
        });
    } catch (MqttException e) {
        e.printStackTrace();
    }
    
  • 验证设备与代理连通性:确认物理设备能正常联网,用浏览器访问http://test.mosquitto.org测试网络;也可以用第三方MQTT客户端(比如手机端的MQTT Explorer)连接tcp://test.mosquitto.org:1883,确认代理本身可用。
  • 关注SELinux提示:日志里的avc权限提示显示已授权,但Android 11及以上设备可能存在适配问题,可尝试调试时临时关闭SELinux(仅测试用,发布版禁止),或者检查应用的targetSdkVersion是否符合系统要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:23:10