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

如何修复Mqtt v5中的java.util.MissingResourceException异常

Paho MQTT v5 Android 混淆崩溃问题解决办法

问题背景

在Kotlin Android项目中使用Paho MQTT v5客户端库,依赖配置如下:

implementation 'org.eclipse.paho:org.eclipse.paho.mqttv5.client:1.2.5'

原本套用了针对MQTT v3的ProGuard规则:

-keep class org.eclipse.paho.client.mqttv3.** {*;}
-keep class org.eclipse.paho.client.mqttv3.*$* { *; }
-keep class org.eclipse.paho.client.mqttv3.logging.JSR47Logger { *; }

但该规则对v5库完全无效,应用运行时直接崩溃,抛出错误:

Process: com.sckooly.net, 
PID: 7438 java.util.MissingResourceException: 
Error locating the logging class at wb.b.a(SourceFile:27) 
at vb.b.<init>(Unknown Source:5) at com.sckooly.net.chat.MosquittoManager.startSubscriber(Unknown Source:27) 
at com.sckooly.net.activities.HomeActivity$onCreate$1$1.invokeSuspend(SourceFile:62) 
at oa.a.resumeWith(Unknown Source:8) at bb.g0.run(Unknown Source:104)

问题原因

原规则全部针对org.eclipse.paho.client.mqttv3包,但MQTT v5的包结构为org.eclipse.paho.mqttv5.client,两者完全不同,导致v5库的核心类和日志类被混淆,进而找不到日志相关资源,触发MissingResourceException。

解决办法

替换为适配MQTT v5的ProGuard规则:

# 保护MQTT v5所有核心类及内部类不被混淆
-keep class org.eclipse.paho.mqttv5.** { *; }
-keep class org.eclipse.paho.mqttv5.*$* { *; }

# 保护日志类及相关资源文件,避免资源找不到
-keep class org.eclipse.paho.mqttv5.logging.JSR47Logger { *; }
-keepresourcefiles META-INF/services/org.eclipse.paho.mqttv5.logging.LoggerFactory
-keepresourcefiles META-INF/mqttv5_logging.properties

规则说明

  1. 将包名从mqttv3替换为mqttv5,覆盖v5库的所有类
  2. 保留内部类(*$*),防止库内部嵌套类结构被破坏
  3. 额外保留日志相关的配置文件和服务注册文件,彻底解决日志资源找不到的问题

内容的提问来源于stack exchange,提问作者Sckoolboy Inc.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:37:42