Que sont les fichiers .dex sous Android?


196

J'ai des questions concernant les fichiers dex

  • Qu'est-ce qu'un dexfichier sous Android?
  • Comment fonctionne dex pour Android?
  • Comment sont-ils utilisés pour déboguer une application Android?
  • Sont-ils similaires aux fichiers de classe Java?

J'ai besoin d'informations spécifiques, veuillez m'aider à ce sujet et tous les exemples réels sont les bienvenus!



Réponses:


233

À propos du fichier .dex:

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

Compiled Android application code file.

Les programmes Android sont compilés dans des .dexfichiers (Dalvik Executable), qui sont à leur tour compressés en un seul .apkfichier sur l'appareil. .dexLes fichiers 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 a une documentation sur les Dalvik Executable Format( fichiers .dex ). Vous pouvez en savoir plus sur la documentation officielle: Format de fichier Dex

.dex Les fichiers 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 l' dexdumpoutil fourni dans android-sdk.

Il existe également des techniques d'ingénierie inverse pour créer un fichier jar fileou à java class filepartir d'un .dexfichier.


Mon fichier jar contient du xml dans le dossier des actifs. Je veux que cela fasse partie de .dex Une idée de la façon de l'implémenter?
AndroidGuy

@AndroidGuy - Le fichier Jar ne contient aucun package de ressources Android (/ asset) que vous devez utiliser pour cela.
user370305

Comment ça marche sur ART, sur Android Lollipop? Quels fichiers y sont utilisés et dans quel chemin? Certains ont dit que cela prendrait plus de place. 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.
développeur android

Une chose importante à noter est que ce dexdumpn'est pas un décompilateur mais un désassembleur
genghiskhan

91
.dex file

Fichier de code d'application Android compilé.

Les programmes Android sont compilés en fichiers .dex (Dalvik Executable), qui sont à leur tour compressé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
Mon fichier jar contient du xml dans le dossier des actifs. Je veux que cela fasse partie de .dex Une idée de la façon de l'implémenter?
AndroidGuy

89

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

Dalvik VM comprend plusieurs fonctionnalités d'optimisation, de vérification et de surveillance des performances, dont Dalvik Executable (DEX) .

Le code source Java est compilé par le compilateur Java dans des .classfichiers. Ensuite, l' dxoutil (dexer), qui fait partie du SDK Android, traite les .classfichiers dans un format de fichier appelé DEXqui contient du code d'octet Dalvik. L' dxoutil élimine toutes les informations redondantes présentes dans les classes. Dans DEXtoutes 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 JVM et les fichiers traités par l' dexoutil.

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

entrez la description de l'image ici

Dans les environnements Java standard, chaque classe du code Java se traduit par un .classfichier. Cela signifie que si le fichier de code source Java a une classe publique et deux classes anonymes, disons pour la gestion des événements, alors le compilateur Java créera au total trois .classfichiers.

L'étape de compilation est la même sur la plate-forme Android, entraînant ainsi plusieurs .classfichiers. Mais une fois les .classfichiers générés, l'outil «dx» est utilisé pour convertir tous les .classfichiers en un seul .dexfichier, ou exécutable Dalvik. C'est le .dexfichier qui est exécuté sur la VM Dalvik. Le .dexfichier a été optimisé pour l'utilisation de la mémoire et la conception repose principalement sur le partage de données.


18
Bonne info. Juste une chose à souligner. Parfois, il y aura plusieurs fichiers dex en raison de la limite du nombre d'instructions d'invocation de méthode. Cette limite est de 65 000 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 toujours. De plus, comme le chargement dynamique de classe est également disponible, vous pouvez charger du code (encore une fois sous forme dexed) à partir de fichiers et donc le code sera dans plusieurs fichiers dex.
Igor Čordaš
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.