Ответ 1
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
Файлы приложения Android (APK) содержат исполняемые файлы байт-кода в форма файлов Dalvik Executable (DEX), которые содержат скомпилированные код, используемый для запуска вашего приложения. Пределы спецификации Дейвика Дейвика общее количество методов, на которые можно ссылаться в одном DEX файл до 65 536, включая методы Android, методы библиотеки, и методы в вашем собственном коде. Чтобы преодолеть этот предел, вы настраиваете процесс создания приложений для создания более одного DEX файл, известный как многоэлементная конфигурация.
Плагин Android для Gradle, доступный в Android SDK Build Tools 21.1 и выше, поддерживает multidex как часть вашей конфигурации сборки. Перед настройкой приложения для мультидекса убедитесь, что вы обновили инструменты Android SDK Build Tools и репозиторий поддержки Android до последней версии с помощью диспетчера SDK.
Настройка проекта разработки приложений для использования конфигурации с несколькими приложениями требует внесения нескольких изменений в проект разработки приложений. В частности, вам необходимо выполнить следующие шаги:
- Измените конфигурацию сборки Gradle, чтобы включить multidex
- Изменить манифест для ссылки на класс MultiDexApplication
Измените конфигурацию файла приложения Gradle, чтобы включить библиотеку поддержки и включить вывод multidex.
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 25
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
В манифесте добавьте класс MultiDexApplication
из библиотеки поддержки multidex в элемент приложения.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
android:name="android.support.multidex.MultiDexApplication">
</application>
</manifest>
Прочитать официальный документ о MultiDex
Если ваш класс Application расширяет какой-либо другой класс, и вы не хотите его изменить или не можете его изменить, override attachBaseContext()
, как показано ниже:
public class MyApplication extends MultiDexApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Тогда
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
android:name=".MyApplication">
</application>
</manifest>
Заключение
В то время как библиотека исправляет проблему DEX 64K в большинстве случаев, она должна рассматриваться как последнее средство. Прежде чем пытаться использовать его, вы должны аудит вашего проекта на нежелательные зависимости и удаление как можно большего количества неиспользуемых кода, используя ProGuard.