Как я могу сказать multidex сохранить файл свойств jar? - PullRequest
0 голосов
/ 11 октября 2018

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

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

enter image description here

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

Я разобрал apks, используя apktool для одного, который работает, и для другого, который не работает (в основном понижая эти несвязанные jar-файлы), и в обоих apks есть папка unknown, но у того, который работает, есть те LocalStrings.properties в этой папке, и тот, который не работает, не имеет их в этой папке.Я расстегнул молнию на этих несвязанных банках, просто чтобы убедиться, что там нет пакета javax.servlet, и они являются банками, поэтому у них нет ничего, что могло бы повлиять на сборку 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 и увидел, что он там.Таким образом, определенно возникает проблема с размером банок, которые он помещает в первый файл dex.

Редактировать: у меня это в настройках Proguard:

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

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

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

Что исправило то, что он делал сборку с

minifyEnabled false

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

minifyEnabled true

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

0 голосов
/ 12 октября 2018

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

-keep class javax.servlet.** 

или

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

или

-optimizations !javax.servlet
-dontoptimize

Кроме того, дополнительные ссылки:

...