web-dev-qa-db-fra.com

Comment activer le multidexing avec la nouvelle bibliothèque de support Android Multidex

Je souhaite utiliser la nouvelle bibliothèque de support Multidex pour dépasser la limite de méthodes de l'une de mes applications. 

Avec Android Lollipop, Google a introduit une bibliothèque de support multidex facilitant l'utilisation de ce logiciel. 

Quelles étapes sont nécessaires pour utiliser cette bibliothèque et créer mon application avec le support multidex?

118
Janusz

Modifier:

Android 5.0 (API de niveau 21) et supérieur utilise ART qui prend en charge de manière native le multidexing. Par conséquent, si votre minSdkVersion est égal à 21 ou plus, la bibliothèque de support multidex n'est pas nécessaire.


Modifiez votre 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 {
    compile 'com.Android.support:multidex:1.0.3'
}

Si vous exécutez des tests unitaires, vous voudrez l'inclure dans votre classe Application:

public class YouApplication extends Application {

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

}

Ou bien faites simplement que votre classe application soit étendue MultiDexApplication

public class Application extends MultiDexApplication {

}

Pour plus d'informations, ceci est un bon guide.

247
Chad Bingham

Les étapes suivantes sont nécessaires pour démarrer le multi-indexage: 

Ajoutez Android-support-multidex.jar à votre projet. Le fichier jar se trouve dans votre dossier SDK Android/sdk/extras/Android/support/multidex/library/libs

Vous pouvez maintenant laisser votre classe d'applications apps étendre MultiDexApplication

public class MyApplication extends MultiDexApplication

ou vous substituez attachBaseContext comme ceci:

protected void attachBaseContext(Context base) {
 super.attachBaseContext(base);
 MultiDex.install(this);
}

J'ai utilisé l'approche de substitution car cela ne gêne pas la hiérarchie de classe de votre classe d'application.

Votre application est maintenant prête à utiliser le multi-dex. La prochaine étape consiste à convaincre Gradle de construire un apk multi dexé. L’équipe des outils de construction s’efforce de simplifier cela, mais pour le moment, vous devez ajouter les éléments suivants à la partie Android de votre application

   dexOptions {
      preDexLibraries = false
   }

Et ce qui suit à la partie générale de vos applications build.gradle

afterEvaluate {
   tasks.matching {
      it.name.startsWith('dex')
   }.each { dx ->
      if (dx.additionalParameters == null) {
         dx.additionalParameters = ['--multi-dex']
      } else {
         dx.additionalParameters += '--multi-dex'
      }
   }
}

Plus d'informations peuvent être trouvées sur Alex Lipovs blog .

43
Janusz

SIMPLEMENT, pour activer multidex, vous devez ...

Android {
compileSdkVersion 21
buildToolsVersion "21.1.0"

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

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

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

de plus, vous devez modifier votre fichier manifeste. Dans votre manifeste, ajoutez la classe MultiDexApplication de la bibliothèque de support multidex à l'élément d'application, comme ceci 

<?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>
17
smoothumut

Dans votre build.gradle ajoutez cette dépendance: 

compile 'com.Android.support:multidex:1.0.1'

à nouveau dans votre build.gradle file, ajoutez cette ligne à defaultConfig block:

multiDexEnabled true

Au lieu d'étendre votre classe d'applications depuis Application , étendez-la depuis MultiDexApplication ; comme :

public class AppConfig extends MultiDexApplication {

maintenant vous êtes prêt à partir! Et si vous en avez besoin, tout ce que MultiDexApplication fait est

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

Etape 1: Change build.grade

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

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

Étape 2: Réglage sur la classe d'application

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

Etape 3: Changer grade.properties

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

Ça va marcher!. Merci.

3
sonnv1368

D'abord, vous devriez essayer avec Proguard (Cela nettoie tout le code non utilisé)

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'
        }
    }
}
1
Moises Apaza Q

Si vous voulez activer le multi-dex dans votre projet, allez simplement à gradle.builder 

et ajoutez ceci dans votre dépendance 

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

alors vous devez ajouter 

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

// Enabling multidex support.
multiDexEnabled true}

Ouvrez ensuite une classe et étendez-la en Application Si votre application utilise la classe Application, vous pouvez remplacer la méthode oncrete () et appeler

   MultiDex.install(this) 

activer multidex.

et enfin ajouter dans votre manifeste

 <?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> 
0
pavel

Ajouter à AndroidManifest.xml:

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

OR

MultiDex.install(this);

dans la méthode attachBaseContext de votre application personnalisée

ou votre application personnalisée étendre MultiDexApplication

ajoutez multiDexEnabled = true dans votre build.gradle

defaultConfig {
    multiDexEnabled true
}

dependencies {
    compile 'com.Android.support:multidex:1.0.0'
    }
}
0
Malik Abu Qaoud

build.gradle

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

AndroidManifest.xml

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