Разъяснение о том, что происходит после установки MultiDex - PullRequest
0 голосов
/ 24 октября 2018

После того, как я установил MultiDex, я заметил, что первый в истории запуск приложения занимает дополнительные 4-5 секунд.Однако после нескольких исследований я заметил, что размер приложения в настройках телефона (диспетчер приложений) изменился с 7 МБ до 19 МБ, и, если я удаляю данные, приложение возвращается к 7 МБ.Но каждый раз, когда я запускаю приложение в первый раз, размер приложения увеличивается более чем вдвое.

Теперь мой вопрос: что происходит, что так сильно увеличивает размер приложения?

ИтакДо сих пор я нашел несколько тем на тему slackoverflow о MultiDex, но ни в одной из них не говорится о том, что на самом деле происходит с кодом, и какие данные MultiDex сохраняет / кэширует.

Ответы [ 2 ]

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

Multi-Dexing включен в вашем Gradle и расширен в вашем классе приложений.

Используется, когда вы используете более 64 000 методов.

https://developer.android.com/studio/build/multidex

Iсказал бы, вероятно, 90% времени, если вы удовлетворяете потребности мульти-декс, вы, вероятно, не должным образом управляли вашими зависимостями.Я НЕ говорю каждый раз.Однако обычно проблема заключается в том, что люди вводят целые зависимости от Google, а не только те, которые вам нужны.Например, Сервисы Google Play.Если вы включите это, это мгновенно заставит вас начать мультидексинг.Тем не менее, это идет с ударом производительности.Теперь у вас есть несколько файлов dex для загрузки.Конечно, существует некоторая предварительная привязка к тем вещам, которые не изменятся, например, к сторонним зависимостям, чтобы немного ускорить сборку и развертывание.Однако наличие нескольких таблиц поиска приводит к последствиям для скорости.Например, если вы включили.

com.google.android.gms

содержит около 44 000 только методов, вы должны указать, какой из них вы хотите, например,

com.google.android.gms:play-services-location:16.0.0

.Поэтому, прежде чем идти по пути использования Multi-Dex, убедитесь, что вы правильно очистили неиспользуемые зависимости и правильно управляете своим транзитивным деревом зависимостей.Также не забудьте использовать ProGuard или новый процесс минимизации D8, поскольку это также может помочь вам, хотя может потребовать, чтобы вы также работали в Debug, если у вас слишком много зависимостей.

Если вы сделали всеэто и вам все еще нужно использовать Multi-Dex (и я сталкивался с этим в более крупных компаниях, которые навязывают вам кучу раздуваемых библиотек), тогда вы идете на это.

Теперь, что касается происходящего, хорошо, Дексрасшифровывается как Dalvik Executable.Это процесс упаковки кода в байты Dalvik для исполнения.Это ограничено 65 536 методами.В документации говорится 64k, но везде, где я читал, показывает 65k +Многие из библиотек Google уже содержат 17 тыс. Методов, что дает вам 1/4 пути прямо к воротам.

Я полагаю, что проблема связана с выделением заголовка 2 байта на сигнатуру метода и таблицы поиска.они ограничены числом уникальных идентификаторов, которые они могут создать.Поэтому требуется, чтобы вы создали несколько файлов dex с несколькими таблицами поиска для сигнатур методов.Таким образом, короткий ответ заключается в том, что он создает несколько исполняемых файлов Dalvik, чтобы обеспечить правильное обнаружение и выполнение сигнатур уникальных методов на виртуальной машине Dalvic.

Следует также отметить, что до Android API 21 виртуальная машинаМашина поддерживает только 1 файл dex.Поэтому вам нужно выполнить установку multi-dex в вашем приложении onCreate, чтобы все остальное было правильно введено.Однако, если вы используете proguard, ваши дополнительные dex-файлы могли быть удалены, поэтому вам может потребоваться также обратиться к файлу MultDexProguard.

Теперь важно понимать, что Android полностью переделал свою виртуальную машину и больше неполагается на Dex для своих современных виртуальных машин ОС.Итак, следующий вопрос: «Вы все еще используете это?»

Ну, если вам все еще нужна поддержка перед леденцом на палочке, то вам лучше оставить свой мультидекс на месте.В противном случае, если вы Lollipop и выше.Android использует ART (Android Runtime) и не имеет этого ограничения.Честно говоря, население, у которого есть пре-Леденец, настолько мало, что, по моему личному мнению, его не стоит поддерживать, но это зависит от вашего продукта и ваших потребностей.

Надежда, которая поможет пролить свет на некоторые вещи здесь.

Счастливое кодирование

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

Один файл .dex может иметь 65 536 методов (ссылок), поэтому, если количество ссылок превышает 65 536, вы используете мультидекс.

Возможно, поскольку ваше приложение хранит более одного файла .dex, которое оно выделяетбольше места для новых файлов .dex.

Разбейте ваш APK с помощью APK Analyzer, чтобы увидеть, что приводит к увеличению размера приложения

. Воспользуйтесь следующей ссылкой:

https://developer.android.com/studio/build/apk-analyzer

если вы хотите уменьшить размер приложения, эта статья полезна

https://medium.com/exploring-code/how-you-can-decrease-application-size-by-60-in-only-5-minutes-47eff3e7874e

...