java.util.MissingResourceException - 定位日志记录类时出错(MQTT 库)

Sal*_*isi 2 java android mqtt

我正在编写一个使用 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 库,发现了生成此错误的源代码:

https://github.com/eclipse/paho.mqtt.java/blob/master/org.eclipse.paho.client.mqttv3/src/main/java/org/eclipse/paho/client/mqttv3/logging/LoggerFactory。爪哇

第 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 中添加发布块,我不会收到错误并且应用程序工作正常。但我不想要可调试的版本。

你能帮助我吗?

Gha*_*ghi 6

您可以将以下行添加到 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)