Я хочу использовать новую библиотеку поддержки Multidex, чтобы преодолеть ограничение на количество методов для одного из моих приложений.
В Android Lollipop Google представила библиотеку поддержки multidex, которая упрощает multidex.
Какие шаги необходимы для использования этой библиотеки и создания моего приложения с поддержкой multidex?
Ответы:
Редактировать:
Android 5.0 (уровень API 21) и выше использует ART, который поддерживает мультиплексирование. Поэтому, если вам
minSdkVersion
21 или больше, библиотека поддержки multidex не нужна.Измените свой
build.gradle
:android { compileSdkVersion 22 buildToolsVersion "23.0.0" defaultConfig { minSdkVersion 14 //lower than 14 doesn't support multidex targetSdkVersion 22 // Enabling multidex support. multiDexEnabled true } } dependencies { implementation 'com.android.support:multidex:1.0.3' }
Если вы запускаете модульные тесты, вы захотите включить это в свой
Application
класс:public class YouApplication extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
Или просто
application
расширьте свой классMultiDexApplication
public class Application extends MultiDexApplication { }
Для получения дополнительной информации это хорошее руководство.
источник
gradle-wrapper.properties
) Ключевые моменты: 1 ваша buildToolsVersion должна быть 21.1.1 или выше. 2 добавьтеmultiDexEnabled true
к вашему defaultConfig вашего build.gradle (обратите внимание, что его нет=
) 3 добавьте'com.android.support:multidex:1.0.0'
android:name="android.support.multidex.MultiDexApplication"
вapplication
тегAndroidManifest.xml
?..if your minSdkVersion is set to 20 or lower you must use...
'compile 'com.android.support:multidex:1.0.1'
.Чтобы запустить мультидексинг, необходимо выполнить следующие шаги:
Добавьте в проект android-support-multidex.jar. Банку можно найти в папке Android SDK / sdk / extras / android / support / multidex / library / libs.
Теперь вы либо позволяете классу приложений вашего приложения расширять MultiDexApplication.
public class MyApplication extends MultiDexApplication
или вы переопределите attachBaseContext следующим образом:
protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
Я использовал подход переопределения, потому что он не влияет на иерархию классов вашего класса приложения.
Теперь ваше приложение готово к использованию multi dex. Следующий шаг - убедить Gradle создать мультидексированный apk. Команда инструментов сборки работает над тем, чтобы упростить это, но на данный момент вам нужно добавить следующее в часть Android ваших приложений build.gradle
dexOptions { preDexLibraries = false }
И следующее к общей части ваших приложений build.gradle
afterEvaluate { tasks.matching { it.name.startsWith('dex') }.each { dx -> if (dx.additionalParameters == null) { dx.additionalParameters = ['--multi-dex'] } else { dx.additionalParameters += '--multi-dex' } } }
Более подробную информацию можно найти в блоге Алекса Липова .
источник
ПРОСТО, чтобы включить мультидекс нужно ...
android { compileSdkVersion 21 buildToolsVersion "21.1.0" defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Enabling multidex support. multiDexEnabled true } ... } dependencies { implementation 'com.android.support:multidex:1.0.0' }
также вы должны изменить свой файл манифеста. В своем манифесте добавьте класс 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>
источник
android:name="android.support.multidex.MultiDexApplication
Пожалуйста,В вашем build.gradle добавьте эту зависимость:
compile 'com.android.support:multidex:1.0.1'
снова в вашем файле build.gradle добавьте эту строку в блок defaultConfig :
multiDexEnabled true
Вместо того, чтобы расширять класс вашего приложения из Application, расширьте его из MultiDexApplication ; подобно :
public class AppConfig extends MultiDexApplication {
теперь тебе хорошо идти! И если вам это нужно, все
MultiDexApplication
этоpublic class MultiDexApplication extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
источник
build.gradle
multiDexEnabled true implementation 'androidx.multidex:multidex:2.0.1'
AndroidManifest.xml
<application android:name="androidx.multidex.MultiDexApplication"
источник
Вот актуальный подход по состоянию на октябрь 2020 года для Android X. Это взято из документации Android « Включить multidex для приложений с более чем 64 КБ методов ».
Для
minSdk
> = 21Вам не нужно ничего делать. Все эти устройства используют виртуальную машину Android RunTime (ART), которая изначально поддерживает multidex.
Для
minSdk
<21На уровне модуля
build.gradle
убедитесь, что заполнены следующие конфигурации:android { defaultConfig { multiDexEnabled true } } dependencies { implementation 'androidx.multidex:multidex:2.0.1' }
Вам необходимо установить явную поддержку multidex. В документации есть три способа сделать это , и вы должны выбрать один .
Например, в вашем
src/main/AndroidManifest.xml
вы можете объявитьMultiDexApplication
какapplication:name
:<manifest package="com.your.package" xmlns:android="http://schemas.android.com/apk/res/android"> <application android:name="androidx.multidex.MultiDexApplication" /> </manifest>
источник
Шаг 1. Измените build.grade
defaultConfig { ... // Enabling multidex support. multiDexEnabled true } dependencies { ... compile 'com.android.support:multidex:1.0.0' }
Шаг 2: настройка класса приложения
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); MultiDex.install(this); } }
Шаг 3. Измените grade.properties
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
Это будет работать!. Спасибо.
источник
Добавьте в AndroidManifest.xml:
android:name="android.support.multidex.MultiDexApplication"
ИЛИ
MultiDex.install(this);
в методе attachBaseContext вашего пользовательского приложения
или ваше собственное приложение расширит MultiDexApplication
добавьте multiDexEnabled = true в свой build.gradle
defaultConfig { multiDexEnabled true } dependencies { compile 'com.android.support:multidex:1.0.0' } }
источник
Сначала вы должны попробовать с Proguard (это очищает весь неиспользуемый код)
android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { minSdkVersion 16 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }
источник
С androidx классические библиотеки поддержки больше не работают.
Простое решение - использовать следующий код
В вашем
build.gradle
файлеandroid{ ... ... defaultConfig { ... ... multiDexEnabled true } ... } dependencies { ... ... implementation 'androidx.multidex:multidex:2.0.1' }
И в вашем манифесте просто добавьте атрибут имени в тег приложения
<manifest ...> <application android:name="androidx.multidex.MultiDexApplication" ... ...> ... ... </application> </manifest>
Если ваше приложение ориентировано на API 21 или выше, multidex включен по умолчанию.
Теперь, если вы хотите избавиться от многих проблем, с которыми вы сталкиваетесь при поддержке multidex, сначала попробуйте использовать сжатие кода путем установки
minifyEnabled true
.источник
Если вы хотите включить multi-dex в свой проект, просто перейдите в gradle.builder
и добавьте это в свою зависимость
dependencies { compile 'com.android.support:multidex:1.0.0'}
тогда вам нужно добавить
defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Enabling multidex support. multiDexEnabled true}
Затем откройте класс и расширьте его до Application. Если ваше приложение использует расширяет класс Application, вы можете переопределить метод oncrete () и вызвать
MultiDex.install(this)
для включения 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>
источник
gradle.builder
?Все ответы выше потрясающие
Также добавьте это, иначе ваше приложение вылетит, как мое, без какой-либо причины
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
источник
просто добавление этого фрагмента в build.gradle также отлично работает
android { compileSdkVersion 22 buildToolsVersion "23.0.0" defaultConfig { minSdkVersion 14 //lower than 14 doesn't support multidex targetSdkVersion 22 **// Enabling multidex support. **multiDexEnabled true**** } }
источник
Multi_Dex.java
public class Multi_Dex extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } }
источник