Как я могу указать multidex сохранить файл свойств jar?

У меня проблема, которая, я уверен, связана с multidex. В основном одна из библиотек, которые я использую, имеет пакет ресурсов .properties в банке. Когда мое приложение начало расти, у меня начались проблемы с ним. Раньше я писал об этом пару сообщений, но у меня никогда не было решений (сообщение 1, сообщение 2). Сообщение 2 содержит гораздо больше подробностей об этой проблеме.

В основном этот ресурс отсутствует, если я не заставлю часть кода в этом Jar запустить метод ApplicationonCreate. По крайней мере, это было проблемой до вчерашнего дня.

Как я могу указать multidex сохранить файл свойств jar?

Вчера я обновил банку, которая не имеет к этому никакого отношения, но теперь она больше, чем была раньше (что, как я предполагаю, означает, что у нее больше методов), и теперь код снова не работает с той же проблемой java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale en_US, но теперь он не работает. всех, а не только некоторых пользователей.

Я разобрал apks с помощью apktool для одного, который работает, и того, который не работает (в основном, понижая эти несвязанные банки), и в обоих apks есть папка unknown, но тот, который работает, имеет эти LocalStrings.properties в этой папке, а тот, который не У работы их нет в этой папке. Я разархивировал эти несвязанные jar-файлы, чтобы убедиться, что в них нет этого пакета javax.servlet, и они являются jar-файлами, поэтому у них нет ничего другого, что могло бы повлиять на сборку gradle.

По сути, моя теория сейчас заключается в том, что эти банки достаточно велики, чтобы вытолкнуть материал javax.servlet из первого файла dex, но это не совсем верно, потому что файлы properties даже не входят в файл dex. Если я просто разархивирую apk, я увижу пакет javax в корневой папке и файлы ресурсов внутри нужного места, но не LocalStrings.properties, тогда как если я сделаю это для работающего apk, я увижу там LocalStrings.properties.

Прямо сейчас я тестировал multiDexKeepProguard, и у меня есть все javax.servlet, чтобы войти в основной файл dex, но я все еще не могу заставить LocalStrings.properties отображаться в apk, даже с:

-keepclassmembers class **$Properties

Я также пробовал несколько других безумных вещей, таких как размещение файлов LocalStrings.properties в моем основном пакете приложения с использованием пакета javax.servlet, и это тоже не помогло.

Так что еще я могу попробовать? Это ошибка или я что-то не так делаю?

Спасибо.

Обновлено: я хотел бы сообщить, что я снова решил эту проблему, удалив зависимость (рекламную сеть), которую я больше не использую. Я понял, что у меня все еще есть эта зависимость, когда я использовал dex2smali для просмотра первого файла dex и увидел, что он там есть. Таким образом, это определенно проблема с размером jar-файлов, которые он помещает в первый файл dex.

Обновлено: у меня есть это в моих настройках proguard:

-keep class javax.** {*;}
-keep interface javax.** {*;}
-keepclassmembers class javax.** {*;}
-keepclassmembers class **$Properties
2
0
321
2

Ответы 2

Похоже, ваш файл свойств пакета лишен ProGuard. Я не уверен, пробовали ли вы следующие конфигурации

-keep class javax.servlet.** 

или

-keep class javax.servlet.** { *; }

или

-optimizations !javax.servlet
-dontoptimize

Также дополнительные ссылки:

Спасибо. У меня они есть на proguard, только вещи, которых у меня нет, это -optimizations !javax.servlet и -dontoptimize, я думаю, я хочу его оптимизировать, поэтому я надеюсь, что это не проблема. Я протестирую их, как только смогу воспроизвести проблему. Вчера я удалил рекламную сеть и это устранило проблему, а сегодня, когда я читал ее и делал все то же самое, проблема не воспроизводилась, я даже вернулся на git и проверил старые коммиты, но все еще не воспроизводил их. Также я хотел добавить, что независимо от того, исправят ли эти вещи это или нет, в большинстве случаев это работает без этих двух вещей.

casolorz 12.10.2018 18:44

Не уверен, что это был правильный способ сделать это, но, очевидно, proguard по ошибке удалил файлы * .properties для меня.

Что исправлено, это сборка с

minifyEnabled false

а затем возвращаясь к

minifyEnabled true

После этого файлы * .properties снова стали доступны в финальной сборке.

Другие вопросы по теме