Co to są pliki .dex w systemie Android?


193

Mam pytania dotyczące plików dex

  • Co to jest dexplik w systemie Android?
  • Jak działa dex dla Androida?
  • Jak są używane w debugowaniu aplikacji na Androida?
  • Czy są podobne do plików klasy Java?

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



Odpowiedzi:


226

Informacje o pliku .dex:

Jedną z najbardziej niezwykłych cech Dalvik Virtual Machine(konia roboczego w systemie Android) jest to, że nie używa kodu bajtowego Java. Zamiast tego wprowadzono własny format nazwany DEX i nawet instrukcje kodu bajtowego nie są takie same jak instrukcje kodu bajtowego Java.

Compiled Android application code file.

Programy na Androida są kompilowane w .dexpliki (Dalvik Executable), które z kolei są spakowane do jednego .apkpliku na urządzeniu. .dexpliki można tworzyć, automatycznie tłumacząc skompilowane aplikacje napisane w języku programowania Java.

Format pliku 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 ma dokumentację dotyczącą Dalvik Executable Format( plików .dex ). Możesz dowiedzieć się więcej na oficjalnych dokumentach: Format pliku Dex

.dex pliki są podobne do plików klasy Java, ale zostały uruchomione pod Dalkvik Virtual Machine (DVM) na starszych wersjach Androida i skompilowane w czasie instalacji na urządzeniu do natywnego kodu z ART na nowszych wersjach Androida.

Możesz decompile.dex za pomocą dexdumpnarzędzia dostarczonego w systemie Android-SDK.

Istnieje również kilka technik inżynierii odwrotnej do utworzenia pliku jar filelub java class filez .dexpliku.


Mój plik jar zawiera pewien plik xml w folderze zasobów. Chcę, aby było to częścią .dex. Masz pomysł, jak to zaimplementować?
AndroidGuy

@AndroidGuy - plik Jar nie zawiera żadnego pakietu zasobów Androida (/ asset), do którego musisz użyć pakietu biblioteki Androida.
user370305 16.04.13

Jak to działa w ART, na Androidzie Lollipop? Które pliki są tam używane i w której ścieżce? Niektórzy twierdzą, że zajmie więcej miejsca. Czy to prawda? Jeśli tak, to dlaczego? Mam na myśli, że natywny kod wydaje się zawsze być znacznie mniejszy niż kod bajtowy, a pliki dex są podobne do kodu bajtowego pod względem działania.
programista Androida

Należy zauważyć, że dexdumpnie jest to dekompilator, ale deasembler
genghiskhan,

90
.dex file

Skompilowany plik kodu aplikacji na Androida.

Programy na Androida są kompilowane do plików .dex (Dalvik Executable), które z kolei są spakowane do jednego pliku .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 pewien plik xml w folderze zasobów. Chcę, aby było to częścią .dex. Masz pomysł, jak to zaimplementować?
AndroidGuy

87

dex plik to plik wykonywany na maszynie wirtualnej Dalvik.

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

Kod źródłowy Java jest kompilowany przez kompilator Java w .classpliki. Następnie narzędzie dx(dexer), część zestawu Android SDK, przetwarza .classpliki do formatu o nazwie DEXzawierającej kod bajtowy Dalvik. dxNarzędzie eliminuje wszystkie zbędne informacje, które są obecne w zajęciach. We DEXwszystkich klasach aplikacji są spakowane w jednym pliku. Poniższa tabela zawiera porównanie rozmiarów kodów dla plików jar JVM i plików przetwarzanych przez dexnarzędzie.

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

wprowadź opis zdjęcia tutaj

W standardowych środowiskach Java każda klasa kodu Java daje jeden .classplik. Oznacza to, że jeśli plik kodu źródłowego Java ma jedną klasę publiczną i dwie klasy anonimowe, powiedzmy do obsługi zdarzeń, wówczas kompilator Java utworzy łącznie trzy .classpliki.

Krok kompilacji jest taki sam na platformie Android, w wyniku czego powstaje wiele .classplików. Ale po .classwygenerowaniu plików narzędzie „dx” służy do konwersji wszystkich .classplików w pojedynczy .dexplik wykonywalny Dalvik. Jest to .dexplik wykonywany na maszynie wirtualnej Dalvik. .dexPlik został zoptymalizowany pod kątem wykorzystania pamięci i projekt jest głównie poprzez wymianę danych.


18
Dobra informacja. Tylko jedna rzecz do podkreślenia. Czasami będzie wiele plików dex z powodu limitu liczby instrukcji wywołania metody. Limit ten wynosi 65 000 metod. W takim przypadku kod nie będzie znajdować się w jednym pliku, ale w 2 lub więcej, ale wszystko inne nadal obowiązuje. Ponieważ dynamiczne ładowanie klas jest również dostępne, możesz załadować kod (ponownie w formie zręcznej) z plików, a zatem kod będzie w wielu plikach dex.
Igor Čordaš
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.