205 votes

Que sont les fichiers .dex dans Android ?

J'ai quelques questions concernant fichiers dex

  • Qu'est-ce qu'un dex dans Android ?
  • Comment fonctionne le dex pour Android ?
  • Comment sont-ils utilisés dans le débogage d'une application Android ?
  • Sont-ils similaires aux fichiers de classe java ?

J'ai besoin d'informations spécifiques. Veuillez m'aider sur ce point et tout exemple réel est le bienvenu !

0 votes

0 votes

Comment les exécuter sur le dispositif : stackoverflow.com/questions/10199863/

245voto

user370305 Points 46287

À propos du fichier .dex :

L'une des caractéristiques les plus remarquables de la Dalvik Virtual Machine (le cheval de bataille du système Android) est qu'il n'utilise pas le bytecode Java. Au lieu de cela, un format maison appelé DEX a été introduit et même les instructions du bytecode ne sont pas les mêmes que celles du bytecode Java.

Compiled Android application code file.

Les programmes Android sont compilés en .dex (Dalvik Executable), qui sont à leur tour compressés en un seul fichier .apk sur l'appareil. .dex peuvent être créés en traduisant automatiquement les applications compilées écrites dans le langage de programmation Java.

Format de fichier Dex :

 1. File Header
 2. String Table
 3. Class List
 4. Field Table
 5. Method Table
 6. Class Definition Table
 7. Field List
 8. Method List
 9. Code Header
10. Local Variable List

Android dispose d'une documentation sur le Dalvik Executable Format ( .dex ). Vous pouvez en savoir plus en consultant la documentation officielle : Format de fichier Dex

.dex sont similaires aux fichiers de classe java, mais ils ont été exécutés sous la machine virtuelle Dalkvik (DVM) sur les anciennes versions d'Android, et compilés au moment de l'installation sur l'appareil en code natif avec ART sur les versions plus récentes d'Android.

Vous pouvez decompile .dex en utilisant le dexdump qui est fourni dans Android-sdk.

Il y a aussi des Techniques d'ingénierie inverse pour faire un jar file o java class file d'un .dex fichier.

0 votes

Mon fichier jar contient des fichiers xml dans le dossier assets. Je veux qu'il fasse partie du fichier .dex. Une idée sur la façon de mettre cela en œuvre ?

0 votes

@AndroidGuy - Le fichier Jar ne contient pas de paquet de ressources Android (/asset), vous devez utiliser Android Library Package pour cela.

0 votes

Comment cela fonctionne-t-il sur ART, sur Android Lollipop ? Quels fichiers y sont utilisés, et dans quel chemin ? Certains ont dit que cela prendrait plus d'espace. Est-ce vrai ? Si oui, comment cela se fait-il ? Je veux dire, le code natif semble toujours être beaucoup plus petit que le byte-code, et les fichiers dex sont similaires au byte-code en termes de fonctionnement.

92voto

Sufiyan Ghori Points 497

dex est un fichier qui est exécuté sur la VM Dalvik.

Dalvik VM comprend plusieurs fonctions d'optimisation, de vérification et de contrôle des performances, dont l'une est la suivante Exécutable Dalvik (DEX) .

Le code source Java est compilé par le compilateur Java en .class fichiers. Ensuite, le dx (dexer), qui fait partie du SDK Android, traite l'outil .class dans un format de fichier appelé DEX qui contient le code d'octet Dalvik. Le site dx élimine toutes les informations redondantes présentes dans les classes. Dans DEX toutes les classes de l'application sont regroupées dans un seul fichier. Le tableau suivant fournit une comparaison entre les tailles de code pour les fichiers jar de la JVM et les fichiers traités par le programme dex outil.

Le tableau compare la taille du code des bibliothèques système, des applications de navigateur Web et d'une application à usage général (application réveil). Dans tous les cas, l'outil dex a réduit la taille du code de plus de 50 %.

enter image description here

Dans les environnements Java standard, chaque classe du code Java donne lieu à une .class fichier. En d'autres termes, si le fichier de code source Java contient une classe publique et deux classes anonymes, par exemple pour la gestion des événements, le compilateur Java créera trois classes au total. .class des fichiers.

L'étape de compilation est la même sur la plate-forme Android, ce qui donne lieu à de multiples .class fichiers. Mais après .class sont générés, l'outil " dx " est utilisé pour convertir tous les fichiers .class en un seul fichier .dex ou fichier exécutable Dalvik. Il s'agit du .dex qui est exécuté sur la VM Dalvik. Le site .dex a été optimisé pour l'utilisation de la mémoire et sa conception est principalement axée sur le partage des données.

18 votes

Bonne information. Juste une chose à signaler. Parfois, il y aura plusieurs fichiers dex en raison de la limite du nombre d'instructions d'invocation de méthodes. Cette limite est de 65k méthodes. Dans ce cas, votre code ne sera pas dans un seul fichier mais dans 2 ou plus, mais tout le reste s'applique encore. De plus, comme le chargement dynamique des classes est également disponible, vous pouvez charger du code (encore une fois sous forme dexée) à partir de fichiers et ainsi le code se trouvera dans plusieurs fichiers dex.

91voto

Vineet Shukla Points 12926
.dex file

Fichier de code de l'application Android compilé.

Les programmes Android sont compilés en fichiers .dex (Dalvik Executable), qui sont à leur tour comprimés en un seul fichier .apk sur l'appareil. Les fichiers .dex peuvent être créés automatiquement par Android, en traduisant les applications compilées écrites dans le langage de programmation Java.

2 votes

Mon fichier jar contient des fichiers xml dans le dossier assets. Je veux qu'il fasse partie du fichier .dex. Une idée sur la façon de mettre cela en œuvre ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X