Создание приложений с использованием методов более 65 000 с Android 5.0 и выше

В официальной документации я вижу, что вы можете использовать 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, и это дает мне ошибку компиляции, «превышен предел метода»,


person NullPointerException    schedule 22.03.2016    source источник
comment
Вы читали раздел документации о поддержке Multidex для Android 5.0 и выше?   -  person OneCricketeer    schedule 22.03.2016
comment
да ты читал мой вопрос?   -  person NullPointerException    schedule 22.03.2016
comment
Да. Вы скопировали полный раздел документации из Ограничений библиотеки поддержки multidex. Если вы прочитаете раздел, на который я ссылался, то вы увидите, что Android 5.0 и выше использует среду выполнения под названием ART, которая изначально поддерживает загрузку нескольких файлов dex из файлов APK приложений. Таким образом, короткий ответ на ваш вопрос: вам не нужен multidex.   -  person OneCricketeer    schedule 22.03.2016
comment
прежде чем задать этот вопрос, я попытался сделать это без multidexEnabled true в defaultConfig, и это дает мне ошибку компиляции, превышен предел метода, используя targetdkversion 21 и minsdkversion 21. Протестируйте, пожалуйста. Легко превысить ограничение в 65 КБ, просто добавив полные сервисы Google Play, полную совместимость приложений v8, поддержку v4 и т. д. и, возможно, некоторые сторонние SDK, и вы превысите лимит.   -  person NullPointerException    schedule 22.03.2016
comment
Вы включили среду выполнения ART из параметров разработчика?   -  person OneCricketeer    schedule 22.03.2016
comment
Вы говорите, что пользователи должны включить ART вручную в настройках разработчика, чтобы запустить мое приложение?   -  person NullPointerException    schedule 22.03.2016
comment
Согласно этому дубликату, проблема 65K существует для обоих.   -  person OneCricketeer    schedule 22.03.2016
comment
Итак, я нахожусь в той же самой отправной точке моего вопроса, что произойдет, если вы используете minsdkversion и targetdkversions 21 или выше (Android 5.0 и выше) и без добавления зависимости библиотеки support:multidex? эти ограничения все еще будут существовать? нужно будет добавить multidexEnabled true в файл gradle defaultConfig? будет ли необходимо, чтобы пользователи включали искусство вручную? не будет?   -  person NullPointerException    schedule 22.03.2016
comment
кажется, что в 5.0 dalvik недоступен, мое устройство использует ART, поэтому я не понимаю документацию google... там написано, что с помощью art эта проблема была решена в официальной документации, но это не работает   -  person NullPointerException    schedule 22.03.2016
comment
Я могу проверить себя. Вы сказали просто добавить игровые сервисы и некоторые другие?   -  person OneCricketeer    schedule 22.03.2016
comment
полный gps, полный, поддержка v4, полная поддержка appcompat и т. д. должно быть легко достичь предела, добавляя полные версии библиотек Google.   -  person NullPointerException    schedule 22.03.2016
comment
Я думаю, что при компиляции с minsdk до 21 обязательно нужно установить multidexEnabled true в defaultConfig, в документации это не очень хорошо объясняется...   -  person NullPointerException    schedule 22.03.2016
comment
Если вы сделаете проект Android Studio с минимальным значением 21, поместит ли он mutlidex в gradle? Я просто использую IntelliJ, поэтому не знаю, что генерируют шаблоны в Android Studio.   -  person OneCricketeer    schedule 22.03.2016
comment
нет, ставлю вручную   -  person NullPointerException    schedule 22.03.2016