Включить мультидекс для приложений с более чем 64К-методами Вот ссылка самой Google .
Когда ваше приложение и библиотеки его ссылки превышают 65 536 методов, вы столкнулись с ошибкой сборки, которая указывает на то, что ваше приложение достигло предела Android архитектуры сборки:
trouble writing output:
Too many field references: 131000; max is 65536.
You may try using --multi-dex option.
Более старые версии системы сборки сообщают о другой ошибке, что является признаком одной и той же проблемы:
Conversion to Dalvik format failed:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
Оба эти условия ошибки отображают общее число: 65536. Это число представляет общее число ссылок, которые могут быть вызваны кодом в одном файле байт-кода Dalvik Executable (DEX) , На этой странице объясняется, как обойти это ограничение, включив конфигурацию приложения, известную как multidex, которая позволяет вашему приложению создавать и читать несколько файлов DEX.
Об ограничении ссылки в 64 КБ
Android Файлы приложения (APK) содержат исполняемые файлы байт-кода в виде файлов Dalvik Executable (DEX), которые содержат скомпилированный код, используемый для запуска вашего приложения. Спецификация исполняемого файла Dalvik ограничивает общее количество методов, на которые можно ссылаться в одном DEX-файле, до 65 536, включая Android каркасных методов, библиотечных методов и методов в вашем собственном коде. В контексте информатики термин Кило К обозначает 1024 (или 2 ^ 10). Поскольку 65 536 равно 64 X 1024, этот предел называется «опорным пределом 64 КБ».
Поддержка мультидекса до Android 5.0
Версии платформа до Android 5.0 (уровень API 21) использует среду выполнения Dalvik для выполнения кода приложения. По умолчанию Dalvik ограничивает приложения одним файлом байт-кода classes.dex для каждого APK. Чтобы обойти это ограничение, вы можете добавить в ваш проект поддержку мультидекс-библиотеки:
dependencies {
def multidex_version = "2.0.1"
implementation 'androidx.multidex:multidex:$multidex_version'
}
Если вы не используете AndroidX, вместо этого добавьте следующую зависимость библиотеки поддержки:
implementation 'com.android.support:multidex:1.0.3'
- Измените файл уровня модуля build.gradle , чтобы включить multidex и добавить библиотеку multidex в качестве зависимости, как показано здесь:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 28
multiDexEnabled true
}
...
}
dependencies {
implementation 'com.android.support:multidex:1.0.3'
}
В зависимости от того, переопределяете ли вы класс Application, выполните одно из следующих действий:
Если вы не переопределите класс Application, отредактируйте файл манифеста, указав android: name в пометить следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
</manifest>
Если вы переопределите класс Application, измените его на расширение MultiDexApplication (если возможно) следующим образом:
public class MyApplication extends MultiDexApplication { ... }
Или, если вы переопределяете класс Application, но не можете изменить базовый класс, вы можете вместо этого переопределить метод attachBaseContext () и вызвать MultiDex.install (this), чтобы включить multidex
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}