我正在编写一个使用 MQTT 的 Android 应用程序。
在发布版本中,我收到一个异常:
MqttClient client = new MqttClient(host, clientId, new MemoryPersistence());
Run Code Online (Sandbox Code Playgroud)
在调试构建上,一切正常。我正在使用mqtt-client-0.4.0.jar。
执行(我在发布中得到的是):
W/System.err: java.util.MissingResourceException: Error locating the logging class
W/System.err: at d.a.a.a.a.b.b.a(:2)
W/System.err: at d.a.a.a.a.e.<init>(Unknown Source:7)
W/System.err: at c.b.a.j.a(:2)
W/System.err: at c.b.a.j.<init>(Unknown Source:14)
W/System.err: at c.b.a.d.onStarted(:1)
W/System.err: at android.location.LocationManager$GnssStatusListenerTransport$GnssHandler.handleMessage(LocationManager.java:1424)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:106)
W/System.err: at android.os.Looper.loop(Looper.java:164)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6626)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
Run Code Online (Sandbox Code Playgroud)
我查看了 mqtt 库,发现了生成此错误的源代码:
第 76 行:
public static Logger getLogger(String messageCatalogName, String loggerID) {
String loggerClassName = overrideloggerClassName;
Logger logger = null;
if (loggerClassName == null) {
loggerClassName = jsr47LoggerClassName;
}
logger = getLogger(loggerClassName,
ResourceBundle.getBundle(messageCatalogName), loggerID, null) ;
if (null == logger) {
throw new MissingResourceException("Error locating the
logging class", CLASS_NAME, loggerID);
}
return logger;
}
Run Code Online (Sandbox Code Playgroud)
如果我debuggable true在文件 build.gradle 中添加发布块,我不会收到错误并且应用程序工作正常。但我不想要可调试的版本。
你能帮助我吗?
您可以将以下行添加到 proguard-rules.pro 文件中:
-keep class org.eclipse.paho.clent.mqttv3.** {*;}
-keep class org.eclipse.paho.client.mqttv3.*$* { *; }
-keep class org.eclipse.paho.client.mqttv3.logging.JSR47Logger { *; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
739 次 |
| 最近记录: |