2011-10-13 26 views
129

Mam kilka pytań dotyczących Dex plikówCo to są pliki .dex w systemie Android?

  • Co to jest plik w Androidzie dex?
  • Jak działa dex dla Androida?
  • W jaki sposób są używane podczas debugowania aplikacji na Androida?
  • Czy są one podobne do plików klas java?

Potrzebuję konkretnych informacji, proszę o pomoc w tej sprawie, a wszelkie prawdziwe przykłady są mile widziane!

+0

plz Widział ten link http://stackoverflow.com/questions/1249973/decompiling-dex-into-java-sourcecode – Gensheriff

+0

jak je uruchomić na urządzeniu: http://stackoverflow.com/questions/10199863/how- plik-wykonaj-dex-in-android-z-polecenia –

Odpowiedz

84
.dex file 

Skompilowany plik kodu aplikacji Android.

Programy dla systemu Android są kompilowane do plików .dex (Dalvik Executable), które z kolei są spakowane w pojedynczy plik .apk na urządzeniu. Pliki .dex mogą być tworzone automatycznie przez Androida, tłumacząc skompilowane aplikacje napisane w języku programowania Java.

+2

Mój plik JAR zawiera trochę folderu xml in assets. Chcę, żeby to było częścią .dex Jakiś pomysł, jak to zaimplementować? – AndroidGuy

154

O .dex Plik:

Jednym z najbardziej niezwykłych cech Dalvik Virtual Machine (głównym producentem pod systemem Android) jest to, że nie używa kodu bajtowego Java. Zamiast tego wprowadzono rodzimy format o nazwie DEX i nawet instrukcje kodu bajtowego nie są takie same, jak instrukcje kodu bajtowego Java.

Compiled Android application code file. 

Android programy są kompilowane do .dex (Dalvik) plików wykonywalnych, które są z kolei wpiąć w jednym pliku .apk w urządzeniu. .dex Pliki można tworzyć, automatycznie tłumacząc skompilowane aplikacje napisane w języku programowania Java.

Dex Format pliku:

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 ma dokumentacji na Dalvik Executable Format (.dex plików). Możesz dowiedzieć się więcej na co oficjalnych dokumentów: Dex File Format

.dex pliki są podobne do plików klas Java, ale były prowadzone pod Dalkvik Wirtualny (DVM) na starszych wersjach Androida i kompilowane w czasie instalacji na urządzeniu do natywny kod z ART w nowszych wersjach Androida.

Możesz decompile .dex za pomocą narzędzia dexdump, które jest dostarczane w Android-SDK.

Istnieją również pewne Techniki inżynierii odwrotnej dokonać jar file lub java class file z pliku .dex.

+0

Mój plik JAR zawiera trochę folderu xml in assets. Chcę, żeby to było częścią .dex Jakiś pomysł, jak to zaimplementować? – AndroidGuy

+0

@AndroidGuy - plik Jar nie zawiera żadnego zasobu zasobów Androida (/ zasób), do którego musisz użyć Pakietu biblioteki Androida. – user370305

+1

JADX: Dekompilator Dex na Java https://github.com/skylot/jadx (Licencja Apache) – foo

63

dex plik jest plikiem, który jest wykonywany w maszynie Dalvik VM.

Dalvik VM zawiera kilka funkcji optymalizacji wydajności, weryfikacji i monitorowania, z których jedną jest Dalvik Executable (DEX).

Kod źródłowy Java jest kompilowany przez kompilator Java w plikach .class. Następnie narzędzie dx (narzędzie dexer), część zestawu SDK systemu Android, przetwarza pliki .class w formacie pliku o nazwie DEX, który zawiera kod bajtu Dalvik. Narzędzie dx eliminuje wszystkie nadmiarowe informacje obecne w klasach. W DEX wszystkie klasy aplikacji są spakowane do jednego pliku. Poniższa tabela zawiera porównanie rozmiarów kodu dla plików JVM jar i plików przetworzonych przez narzędzie dex.

Tabela porównuje rozmiary kodów dla bibliotek systemowych, aplikacji przeglądarki internetowej i aplikacji ogólnego przeznaczenia (aplikacja z budzikiem). We wszystkich przypadkach narzędzie dex zmniejszyło rozmiar kodu o więcej niż 50%.

enter image description here

W standardzie Java środowiskach każdej klasy w kodzie Javy wyników w jednym .class pliku. Oznacza to, że jeśli plik kodu źródłowego Java ma jedną klasę publiczną i dwie anonimowe, powiedzmy, obsługę zdarzeń, wówczas kompilator java utworzy łącznie trzy pliki: .class.

Krok kompilacji jest taki sam na platformie Android, co skutkuje wieloma plikami .class. Ale po wygenerowaniu plików .class narzędzie "dx" służy do konwersji wszystkich plików .class do pojedynczego pliku .dex lub Dalvik Executable. Jest to plik .dex, który jest wykonywany w maszynie Dalvik VM. Plik .dex został zoptymalizowany pod kątem użycia pamięci, a jego konstrukcja opiera się głównie na udostępnianiu danych.

+2

to jest lepsza i kompletna odpowiedź niż inne. – Joe

+11

Dobre informacje. Tylko jedna uwaga. Czasami będzie wiele plików dex z powodu limitu liczby instrukcji wywołania metody. Ten limit wynosi 65 tys. Metod. W takim przypadku Twój kod nie będzie znajdować się w jednym pliku, ale w 2 lub więcej, ale wszystko inne nadal obowiązuje. Ponieważ dostępne jest także dynamiczne ładowanie klas, możesz załadować kod (ponownie w formie dexed) z plików, dzięki czemu kod znajdzie się w wielu plikach dex. – PSIXO

+1

idealna odpowiedź ... –

0

Plik klasy zawiera standardowy kod bajtowy Oracle JVM.

• Dalvik Bytecode

[JAVA CLASS PLIK]> [DEX Klasa File]

Ponieważ plik Java .class zawiera standardowe JVM bajt kodu. Ale urządzenia z Androidem nie używają tego formatu kodu bajtowego. Zamiast tego, Android ma swój własny, odrębny format kodu bajtowego o nazwie Dalvik. Kody bajtów Dalvika, takie jak kody bajtów Oracle JVM, są instrukcjami kodu maszynowego dla teoretycznego procesora.

Proces kompilacji wymaga przekonwertowania plików .class i dowolnych bibliotek .jar do jednego pliku classes.dex zawierającego kody bajtów Dalvik. Komenda dx łączy wszystkie pliki .class i .jar w jeden plik classes.dex zapisany w formacie bajtowym Dalvik.

Teraz, konwersja plików .class i .jar do plików .dex nazywa się kompilacją Dex, a pliki w ten sposób uzyskane nazywane są plikami Dex.