В официальной документации я вижу, что вы можете использовать multi-dex в версиях Android до 5.0, используя это:
defaultConfig {
multiDexEnabled true
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
И это говорит о том, что у него есть некоторые проблемы и ограничения:
Ограничения библиотеки поддержки multidex
Библиотека поддержки multidex имеет некоторые известные ограничения, о которых вы должны знать и проверять при включении ее в конфигурацию сборки вашего приложения:
Установка файлов .dex во время запуска в раздел данных устройства сложна и может привести к ошибкам «Приложение не отвечает» (ANR), если вторичные файлы dex велики. В этом случае вам следует применить методы сокращения кода с помощью ProGuard, чтобы минимизировать размер файлов dex и удалить неиспользуемые части кода. Приложения, использующие multidex, могут не запускаться на устройствах с более ранними версиями платформы, чем Android 4.0 (уровень API 14), из-за ошибки Dalvik linearAlloc (ошибка 22586). Если вы ориентируетесь на уровни API ниже 14, обязательно выполните тестирование с этими версиями платформы, так как ваше приложение может иметь проблемы при запуске или при загрузке определенных групп классов. Сокращение кода может уменьшить или, возможно, устранить эти потенциальные проблемы. Приложения, использующие конфигурацию multidex, которые делают очень большие запросы на выделение памяти, могут аварийно завершать работу во время выполнения из-за ограничения Dalvik linearAlloc (ошибка 78035). Предел выделения был увеличен в Android 4.0 (уровень API 14), но приложения могут по-прежнему работать с этим ограничением в версиях Android до Android 5.0 (уровень API 21). Существуют сложные требования относительно того, какие классы необходимы в основном файле dex при выполнении в среде выполнения Dalvik. Обновления инструментов сборки Android отвечают требованиям Android, но возможно, что другие включенные библиотеки имеют дополнительные требования к зависимостям, включая использование самоанализа или вызов методов Java из собственного кода. Некоторые библиотеки нельзя будет использовать, пока инструменты сборки multidex не будут обновлены, чтобы вы могли указать классы, которые должны быть включены в основной файл dex.
Хорошо, но... что произойдет, если вы используете minsdkversion и targetdkversions 21 или выше (Android 5.0 и выше) и не добавляя зависимость библиотеки support:multidex
? будут ли эти ограничения по-прежнему существовать? нужно ли будет добавить multidexEnabled true
в файл defaultConfig
gradle?
Я попытался сделать это без multidexEnabled true в defaultConfig и с использованием targetdkversion 21 и minsdkversion 21, и это дает мне ошибку компиляции, «превышен предел метода»,