Qu'est-ce qu'Android MultiDex?

111

Il existe de nombreux articles sur MultiDex. J'ai rencontré, parfois, des erreurs résolues notamment multiDexEnabled truedans la defaultConfigsection de mon build.gradle.

Mais, quelle est exactement cette fonctionnalité? Quels sont les scénarios d'utilisation?

Roberto Tellez Ibarra
la source

Réponses:

166

Citant la documentation :

Les fichiers d'application Android (APK) contiennent des fichiers de bytecode exécutables sous la forme de fichiers Dalvik Executable (DEX), qui contiennent le code compilé utilisé pour exécuter votre application. La spécification Dalvik Executable limite le nombre total de méthodes pouvant être référencées dans un seul fichier DEX à 65 536, y compris les méthodes du framework Android, les méthodes de bibliothèque et les méthodes dans votre propre code. Pour dépasser cette limite, vous devez configurer le processus de création de votre application pour générer plusieurs fichiers DEX, appelés configuration multidex.

Donc, la fonctionnalité est la suivante: elle permet à votre application complexe de se compiler. Les scénarios d'utilisation sont lorsque votre application ne parvient pas à se compiler en raison de l'atteinte de la limite de référence de la méthode DEX 64K. Cela apparaît comme une erreur de construction, telle que:

Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
CommonsWare
la source
2
Une idée de la taille d'une base de code (LOC ou nombre approximatif d'écrans)? Allez-vous atteindre cette limite sur une simple application de 5 à 6 écrans ou est-ce vraiment beaucoup plus loin (par exemple: 10 à 20 écrans) que vous l'atteindriez probablement
Marchy
20
@Marchy: Habituellement, cela vient de l'ajout d'un trop grand nombre de bibliothèques. Il est difficile pour un projet sans bibliothèque d'atteindre cette limite.
CommonsWare
3
J'ai une petite application qui utilise environ 5 bibliothèques de support Google ainsi que Fabric.io et 2 ou 3 autres bibliothèques tierces et je dois utiliser multi-dex.
c.dunlap
1
y a-t-il des inconvénients à activer le multidex? pourquoi ne pas le laisser vrai par défaut?
Rafael Lima
1
@RafaelLima: Il y a des problèmes de sécurité avec le quasi-backport du multidex pour les appareils pré-Android 5.0. IIRC, cela peut également causer des problèmes avec votre application, si vous essayez d'utiliser des classes qui se trouvent dans un fichier DEX pas encore chargé.
CommonsWare
43

C'est aussi simple que ça

Un seul fichier .dex peut avoir 65 536 méthodes (références), donc si le nombre de références dépasse 65 536, vous optez pour le multidex.

Plus d'explications!

Un programme d'application Android est compilé dans un fichier .dex qui à son tour est compressé en un seul fichier .apk.
DVM (Dalvik Virtual Machine) utilise des fichiers / fichiers .dex pour exécuter des bytecodes.

Qu'est-ce qui fait que le nombre de références dépasse 65 536 limites?
Méthodes écrites par vous + méthodes Android Framework + méthodes de bibliothèque tierce (par exemple Volley, Retrofit, Facebook SDK, etc.).
J'ai lu "quelque part"
App Compat 24.2.1 contient 16.5k méthodes
Services Google Play GCM 9.6.1 contient 16.7k méthodes
Donc si vous avez créé une simple application Hello world qui a App Compat 24.2.1, vous êtes déjà 1/4 moyen de franchir la limite des méthodes de dex unique

Rohit Singh
la source
7

Qu'est-ce que MultiDex dans Android?

Dex signifie Dalvik Executable, qui est ce que le processeur de machine virtuelle de Google (Dalvik) utilise pour gérer les applications Android. Android a été conçu avec des applications petites et simples à l'esprit et les contraintes d'un seul exécutable Dalvik ont ​​épinglé le toit des références de code à 65 536 méthodes. En raison de ce problème et de la façon dont la machine Dalvik gère l'exécution du code, il y avait des problèmes de compilation et d'invocation, jusqu'à l' intégration de Monkey Patch ou MultiDex . L'intégration MultiDex dans Android Studio permet aux développeurs Android de compiler et d'exécuter une base de code avec plus de 65 536 méthodes!

Farhana
la source
1

Accréditation du site officiel du développeur Android.

If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.
Masum
la source
1
Merci d'avoir répondu. C'est une question de l'année 2015, tant de choses ont changé depuis.
Roberto Tellez Ibarra le
-2

Cela permet également à Google (et à d'autres) d'appliquer la DRM, par exemple .. widevine, dans des morceaux de code où cela pose des problèmes pour la plupart des non-développeurs.

anony
la source