У меня есть проблема, которая, я уверен, связана с multidex
.В основном одна из используемых мной библиотек имеет пакет ресурсов .properties
в банке.Когда мое приложение начало расти, у меня начались проблемы с ним.В прошлом я делал несколько сообщений об этом, но никогда не имел решений ( post 1 , post 2 ).Пост 2 на самом деле содержит гораздо больше подробностей о проблеме.
По сути, этот ресурс отсутствует, если я не заставлю часть кода на этом Jar запускать метод Application
onCreate
.По крайней мере, так было до вчерашнего дня.
Вчера я обновил банку, которая не имеет к этому никакого отношения, но теперь она больше, чем была раньше (что я предполагаю, означает, что этоимеет больше методов), и теперь код снова вызывает ошибку по той же самой проблеме 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