Cosa sono i file .dex in Android?


193

Ho alcune domande sui file dex

  • Che cos'è un dexfile in Android?
  • Come funziona dex per Android?
  • Come vengono utilizzati nel debug di un'app Android?
  • Sono simili ai file di classe Java?

Ho bisogno di informazioni specifiche, per favore aiutatemi su questo e qualsiasi vero esempio è il benvenuto!



Risposte:


226

Informazioni sul file .dex:

Una delle caratteristiche più notevoli del Dalvik Virtual Machine(cavallo di battaglia sotto il sistema Android) è che non utilizza il bytecode Java. Invece, è stato introdotto un formato locale chiamato DEX e nemmeno le istruzioni bytecode sono le stesse delle istruzioni Java bytecode.

Compiled Android application code file.

I programmi Android vengono compilati in file .dex(Dalvik Executable), che a loro volta vengono compressi in un singolo .apkfile sul dispositivo. .dexi file possono essere creati traducendo automaticamente le applicazioni compilate scritte nel linguaggio di programmazione Java.

Formato file 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 ha documentazione sui Dalvik Executable Format( file .dex ). Puoi scoprire di più sui documenti ufficiali: Dex File Format

.dex i file sono simili ai file di classe Java, ma sono stati eseguiti con la Dalkvik Virtual Machine (DVM) su versioni precedenti di Android e compilati al momento dell'installazione sul dispositivo in codice nativo con ART su versioni più recenti di Android.

Puoi decompile.dex usando lo dexdumpstrumento fornito in android-sdk.

Esistono anche alcune tecniche di ingegneria inversa per creare un jar fileo java class fileda un .dexfile.


Il mio file jar contiene alcuni file XML nella cartella delle risorse. Voglio che questo faccia parte di .dex Qualche idea su come implementarlo?
Android Acquista il

@AndroidGuy - Il file Jar non contiene alcun pacchetto di risorse Android (/ asset) per cui devi utilizzare Android Library Package.
user370305

Come funziona su ART, su Android Lollipop? Quali file vengono utilizzati lì e in quale percorso? Alcuni hanno detto che ci vorrà più spazio. È vero? Se è così, come mai? Voglio dire, il codice nativo sembra essere sempre molto più piccolo del codice byte e i file dex sono simili al codice byte in termini di funzionamento.
sviluppatore Android

Una cosa importante da notare è che dexdumpnon è un decompilatore ma un disassemblatore
genghiskhan,

90
.dex file

File di codice dell'applicazione Android compilato.

I programmi Android vengono compilati in file .dex (Dalvik Executable), che a loro volta vengono compressi in un singolo file .apk sul dispositivo. I file .dex possono essere creati automaticamente da Android, traducendo le applicazioni compilate scritte nel linguaggio di programmazione Java.


2
Il mio file jar contiene alcuni file XML nella cartella delle risorse. Voglio che questo faccia parte di .dex Qualche idea su come implementarlo?
Android Acquista il

87

dex file è un file che viene eseguito sulla VM Dalvik.

La VM Dalvik include diverse funzionalità per l'ottimizzazione, la verifica e il monitoraggio delle prestazioni, una delle quali è Dalvik Executable (DEX) .

Il codice sorgente Java viene compilato dal compilatore Java in .classfile. Quindi lo dxstrumento (dexer), parte dell'SDK di Android, elabora i .classfile in un formato di file chiamato DEXche contiene il codice byte Dalvik. Lo dxstrumento elimina tutte le informazioni ridondanti presenti nelle classi. In DEXtutte le classi dell'applicazione sono contenute in un unico file. La tabella seguente fornisce un confronto tra le dimensioni del codice per i file jar JVM e i file elaborati dallo dexstrumento.

La tabella confronta le dimensioni del codice per le librerie di sistema, le applicazioni del browser Web e un'applicazione per scopi generici (app per la sveglia). In tutti i casi lo strumento dex ha ridotto le dimensioni del codice di oltre il 50%.

inserisci qui la descrizione dell'immagine

In ambienti Java standard ogni classe nel codice Java genera un .classfile. Ciò significa che se il file del codice sorgente Java ha una classe pubblica e due classi anonime, diciamo per la gestione degli eventi, il compilatore java creerà un totale di tre .classfile.

Il passo della compilazione è lo stesso sulla piattaforma Android, risultando in più .classfile. Ma dopo che i .classfile sono stati generati, lo strumento "dx" viene utilizzato per convertire tutti i .classfile in un singolo file .dexo eseguibile Dalvik. È il .dexfile che viene eseguito sulla VM Dalvik. Il .dexfile è stato ottimizzato per l'utilizzo della memoria e il design è principalmente guidato dalla condivisione dei dati.


18
Buone informazioni Solo una cosa da sottolineare. A volte ci saranno più file dex a causa del limite del numero di istruzioni di invocazione del metodo. Questo limite è 65k metodi. In tal caso il tuo codice non sarà all'interno di un singolo file ma in 2 o più, ma tutto il resto si applica comunque. Inoltre, poiché è disponibile anche il caricamento dinamico della classe, è possibile caricare il codice (sempre in formato dex) dai file e quindi il codice sarà all'interno di più file dex.
Igor Čordaš,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.