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) и не имеет этого ограничения.Честно говоря, население, у которого есть пре-Леденец, настолько мало, что, по моему личному мнению, его не стоит поддерживать, но это зависит от вашего продукта и ваших потребностей.
Надежда, которая поможет пролить свет на некоторые вещи здесь.
Счастливое кодирование