ANDROID: java.util.MissingResourceException: не удается найти ресурс для пакета 'org.eclipse.paho.client.mqttv3.internal.nls.logcat_en_US', ключ '' - PullRequest
0 голосов
/ 29 апреля 2019

Кажется, есть бесчисленные сообщения об этой ошибке в переполнении стека. Ни одно из предложений не сработало. В моем случае он практически идентичен этому отчету о переполнении стека ВЕСНА

за исключением этого случая в Android, который встроен в Android Studio. Это происходит только в режиме релиза с Proguard. Proguard это как-то портит. И да, я сделал следующее в Proguard:

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

Я также проанализировал банки, загруженные gradle. Я не могу обновить до 1.2.1, потому что это работает только с последними версиями Android ... в соответствии с комментариями разработчиков. Если бы я мог получить исходный код для 1.1.0, возможно, я мог бы остановить его от вызова ресурса, который не существует.

Кто-нибудь решает эту проблему или это ошибка в proguard / paho?

1 Ответ

0 голосов
/ 30 апреля 2019

Просмотр apks, сгенерированных сборками выпусков (использует proguard) и отладочными сборками (без proguard), показывает, что proguard принимает org.eclipse .... имя пакета свойств и изменяет ' org 'к некоторой букве как' c '. Paho-клиент mqtt ищет файл свойств, используя полное имя пакета, и поэтому не может его найти, независимо от того, что вы включаете или исключаете в Proguard. Я посмотрел на apk, сделанный несколько месяцев назад (я ничего не делал с клиентом paho или той частью кода, использующего клиент paho ... он работал нормально, и мне не нужно было его менять). Я вижу в том старом выпуске apk, что 'org' там, как и должно быть.

Так что проблема в proguard. Все, что я мог сделать, чтобы продвинуться вперед, это взять исходные файлы для 1.1.0, создать новый модуль проекта Java и утомительно закомментировать каждый 'log' и getLogger в исходном коде. Это временное и неприятное исправление, но оно работает. Когда Proguard (R8) исправит это, я смогу вернуться к тому, что у меня было.

Так что, я думаю, единственное реальное исправление - это сообщение об ошибке в R8. Это я не сделал.

...