Android

Android gives error "Cannot fit requested classes in a single dex file"

Android выдает ошибку "Не удается уместить запрошенные классы в один файл dex"

Я не знаю почему, но сегодня утром невозможно запустить мое приложение на моем мобильном телефоне. Я получаю это сообщение об ошибке:


Не удается уместить запрошенные классы в один файл dex. Попробуйте предоставить список main-dex.


# методы: 68061 > 65536 Сообщение {kind = ОШИБКА, text = Не удается уместить запрошенные классы в один файл dex. Попробуйте предоставить список main-dex.


# методы: 68061 > 65536, исходники = [Неизвестный исходный файл], инструмент


Я действительно новичок в Android и не понимаю проблемы и что мне нужно делать? И почему я получаю эту проблему сейчас, а не раньше?

Переведено автоматически
Ответ 1

В корневом build.gradle файле сделайте что-то вроде:

dependencies {

// ...

implementation 'androidx.multidex:multidex:2.0.1'
}

android {
defaultConfig {

// ...

multiDexEnabled true
}
}

Подробнее здесь: Ошибка: не удается уместить запрошенные классы в один файл dex.Попробуйте предоставить список main-dex. # методы: 72477 > 65536

Ответ 2

Запускаю RN 0.62, и у меня это сработало при успешной сборке.

Обновить build.gradle
введите описание изображения здесь

classpath('com.android.support:multidex:1.0.3')

Обновить defaultConfig

введите описание изображения здесь

multiDexEnabled true

После этих 2 изменений перезапустите сборку gradle снова.

Ответ 3

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

Например, если вам просто нужно использовать библиотеку местоположений из play services, у вас есть два варианта

Первый - это реализация целых библиотек play-services, которые будут поставляться с location

implementation 'com.google.android.gms:play-services:11.8.0'

Все эти библиотеки могут содержать более 40 000+ методов (это только приблизительная оценка, я действительно не знаю общего количества), что близко к достижению 65536 предельных методов.

Вместо этого вы должны ориентироваться только на библиотеки, которые вы будете использовать, а не на весь набор библиотек

в данном случае

implementation 'com.google.android.gms:play-services-location:11.8.0'

могло бы быть всего 50-100 методов для работы, что будет лучше во время сборки, чем загружать целую кучу методов из всего пакета библиотеки, которые вы никогда не будете использовать.

это всего лишь совет, позволяющий избежать получения


Не удается уместить запрошенные классы в один файл dex.


Для minSdkVersion выше Android 5.0 API 20 +


Android 5.0 и выше использует среду выполнения под названием ART, которая изначально поддерживает загрузку нескольких файлов dex из APK-файлов приложения. ART выполняет предварительную компиляцию во время установки приложения, которая сканирует файлы classes (..N).dex и компилирует их в один файл .oat для выполнения устройством Android. Для получения дополнительной информации о среде выполнения Android 5.0 см. раздел Введение.


Если вы ориентируетесь на устройства более низкого уровня (Android 4.1 API 16) или более ранних версий Android 5 (API 20)


Версии платформы до Android 5.0 используют среду выполнения Dalvik для выполнения кода приложения. По умолчанию Dalvik ограничивает приложения одним файлом байт-кода classes.dex для APK. Чтобы обойти это ограничение, вы можете использовать библиотеку поддержки multidex, которая становится частью основного файла DEX вашего приложения и затем управляет доступом к дополнительным файлам DEX и коду, который они содержат.


В последнем случае вам нужно будет использовать multidex

Ответ 4

В файле build.gradle (app): Добавьте следующее в зависимости:

 implementation 'com.android.support:multidex:1.0.3'

И добавьте следующее в defaultConfig,

multiDexEnabled true

Надеюсь, вы найдете решение.

java android