Как включить многозадачность с новой библиотекой поддержки Android Multidex

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

С Android Lollipop Google представила библиотеку поддержки multidex, которая упрощает работу с multidex.

Какие шаги необходимы для использования этой библиотеки и для создания моего приложения с поддержкой multidex?

Ответ 1

Редактировать:

Android 5.0 (уровень API 21) и выше использует ART, который изначально поддерживает мультидексинг. Поэтому, если ваш minSdkVersion 21 или выше, библиотека поддержки мультидекса не нужна.


Измените ваш 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 {

}

Для получения дополнительной информации, это хорошее руководство.

Ответ 2

Следующие шаги необходимы для запуска мультидексинга:

Добавьте 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 построить apx с несколькими дексами. Команда инструментов сборки работает над тем, чтобы сделать это проще, но на данный момент вам нужно добавить следующее в часть 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'
      }
   }
}

Больше информации можно найти в блоге Алекса Липова.

Ответ 3

ПРОСТО, чтобы включить мультидекс, нужно...

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>

Ответ 4

В 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);
    }
}

Ответ 5

Шаг 1: Изменить build.grade

defaultConfig {
    ...
    // Enabling multidex support.
    multiDexEnabled true
}

dependencies {
    ...
    compile 'com.android.support:multidex:1.0.0'
}

Шаг 2: Настройка класса Application

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        MultiDex.install(this);
    }
}

Шаг 3: Изменить класс .properties

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Это сработает!. Спасибо.

Ответ 6

Сначала вы должны попробовать с 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'
        }
    }
}

Ответ 7

Если вы хотите включить multi-dex в свой проект, просто перейдите к gradle.builder

и добавьте это в свою зависимость

 dependencies {
   compile 'com.android.support:multidex:1.0.0'}

то вам нужно добавить

 defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...

// Enabling multidex support.
multiDexEnabled true}

Затем откройте класс и продолжите его в приложении Если ваше приложение использует расширение класса 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> 

Ответ 8

Добавить в AndroidManifest.xml:

android:name="android.support.multidex.MultiDexApplication" 

ИЛИ

MultiDex.install(this);

в вашем настраиваемом методе applicationBaseContext Application

или ваше пользовательское приложение расширяет MultiDexApplication

добавить multiDexEnabled = true в файл build.gradle

defaultConfig {
    multiDexEnabled true
}

dependencies {
    compile 'com.android.support:multidex:1.0.0'
    }
}

Ответ 9

поддержка сторонней библиотеки multidex для вашего приложения

Ответ 10

build.gradle

multiDexEnabled true
implementation 'androidx.multidex:multidex:2.0.1'

AndroidManifest.xml

<application
    android:name="androidx.multidex.MultiDexApplication"

Ответ 11

Добавьте это в свое приложение gradle и не забудьте включить multidex

dexOptions {
    incremental true
    javaMaxHeapSize "2g"
}  

Ответ 12

просто добавив это, отрезанное в 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****
     }
}

Ответ 13

Multi_Dex.java

public class Multi_Dex extends Application {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}