Co je soubor .dex v systému Android? Úplné vysvětlení a příklady

  • Soubor .dex je nativní spustitelný formát pro aplikace pro Android, optimalizovaný pro mobilní zařízení.
  • Jeho struktura umožňuje rychlé a efektivní spouštění aplikací, integruje třídy, metody, pole a metadata.
  • Formát .dex může být také cílem malwaru, proto je nezbytné chránit svá data a aktualizovat aplikace.

Soubor .dex v systému Android

Přemýšleli jste někdy nad tím, co přesně je soubor .dex ve světě Androidu ? Pokud jste uživatelem Androidu, jistě jste slyšeli o aplikacích, APK a souborech, které ve vašem telefonu dělají zázraky, ale vesmír Androidu skrývá spoustu fascinujících technických detailů. Mezi nimi jsou i slavné soubory .dex.

V tomto článku se skutečně podíváme na to, co je soubor .dex v systému Android , k čemu se používá, jak funguje v zákulisí, jaký je jeho význam v ekosystému aplikací, zajímavá fakta, bezpečnostní aspekty a dokonce i několik nástrojů pro prozkoumávání kódu vašich oblíbených aplikací. Čtěte dál a staňte se dokonalým expertem na tyto soubory!

Co je soubor .dex v systému Android?

dex

Přípona .dex pochází z Dalvik Executable , což je nativní spustitelný formát pro aplikace pro Android . Když si stáhnete aplikaci a nainstalujete její soubor APK , uvnitř se nachází jeden nebo více souborů .dex obsahujících veškerý kód aplikace, připravený ke spuštění virtuálním strojem Dalvik (ve starších verzích Androidu) nebo ART (v novějších verzích).

Soubor .dex obsahuje kompletní sadu definic tříd, metod, polí a doplňkových dat, které aplikace potřebuje k fungování. Nejedná se o zdrojový kód jako ten, který píší programátoři, ale spíše o transformovanou a optimalizovanou verzi navrženou pro efektivní běh na mobilních zařízeních Android, kde jsou zdroje omezené a spuštění musí být rychlé a bezpečné.

Takže když spustíte aplikaci v systému Android, systém ve skutečnosti čte a interpretuje tento soubor .dex, který překládá všechny instrukce do hardwaru vašeho telefonu.

Jak vygenerujete soubor .dex?

Proces začíná tím, že vývojáři píší svůj kód v Javě nebo Kotlinu . Tento kód je po kompilaci nejprve převeden do souborů .class (stejně jako jakýkoli tradiční program v Javě). Ale tady se věci liší: namísto zachování formátu .class používá systém sestavení Androidu nástroj s názvem dx k transformaci těchto souborů .class do jednoho souboru .dex nebo několika, pokud je aplikace velmi rozsáhlá.

A proč tento další krok? Protože formát .dex je navržen tak, aby byl kompaktnější a efektivnější . Je speciálně optimalizován pro mobilní zařízení, která jsou obvykle méně výkonná než počítače a vyžadují efektivní využití paměti a výpočetního výkonu.

Co obsahuje soubor .dex?

dex

Soubor .dex je v podstatě kontejner pro třídy, metody, instrukce a metadata . Obsahuje:

  • Definice tříd (celá struktura a vztahy tříd programu)
  • Pole a metody každé třídy
  • Bajtkód specifické pro prostředí Dalvik/ART
  • Řetězce, typy, prototypy a další referenční tabulky
  • Informace o ladění a anotace
  • Un záhlaví speciální s metadaty souborů

To vše je organizováno a zabaleno způsobem, který usnadňuje efektivní provádění a interpretaci systémem Android . Formát .dex umožňuje paralelní běh mnoha aplikací, sdílení zdrojů v případě potřeby a plné využití možností telefonů a tabletů.

Hlavní části souboru .dex

Podrobněji se formát .dex skládá z několika hlavních částí:

  • Záhlaví: Je to záhlaví souboru se základními informacemi o formátu, kontrolním součtu, verzi atd.
  • ID řetězců: Identifikátory pro všechny textové řetězce použité v kódu.
  • ID typů: Identifikátory typů (třídy, pole, primitivní typy atd.)
  • ID prototypů: Prototypy metod (definice návratových typů a argumentů).
  • ID polí: Identifikátory polí (proměnné spojené s třídami).
  • ID metod: Identifikátory metod (funkce spojené s třídami).
  • Definice tříd: Hlavní struktura, která definuje každou třídu.
  • Datová sekce: Zde se ukládají řetězce, pole, anotace, kód atd.

Každá z těchto komponent má klíčovou funkci při provádění aplikace , což umožňuje systému Android rychlý přístup k informacím, které potřebuje, kdykoli.

Technické podrobnosti o formátu .dex

Pro zvědavější nebo ty s programátorským vzděláním uvádíme několik technických podrobností o tom, jak je soubor .dex vlastně strukturován . Nebojte se, pokud nejste programátor: tuto část můžete přeskočit, ale pokud je vaše zvědavost vzrušená, jistě vás zaujme.

Soubor má speciální hlavičku identifikovatelnou konstantou DEX_FILE_MAGIC , která začíná bajty představujícími „dex\n039\0“ (toto slouží k ověření, zda se skutečně jedná o soubor .dex). Obsahuje také kontrolní součet, aby se zabránilo poškození, podpis SHA-1 obsahu a celkovou velikost souboru.

Formát je little-endian , což znamená, že bajty se ukládají v určitém pořadí (nejméně významné před nejvýznamnějším), stejně jako mnoho moderních systémů.

Informace pro každou třídu, pole a metodu jsou reprezentovány indexy a křížovými odkazy, což umožňuje velmi rychlý přístup k jakýmkoli datům a kompaktní a efektivní využití paměti.

Proč je soubor .dex tak důležitý?

Důvod, proč je soubor .dex pro Android klíčový , je ten, že umožňuje systému spustit jakoukoli aplikaci bez ohledu na to, kde byla zkompilována, vylepšena nebo upravena. Jinými slovy, soubor .dex vygenerovaný v počítači se systémem Windows, Linux nebo Mac bude fungovat stejně na jakémkoli zařízení se systémem Android, což vývojářům výrazně usnadní život a zajistí kompatibilitu napříč zařízeními.

Navíc díky návrhu formátu .dex může systém aplikovat další optimalizace, sdílet kód mezi aplikacemi a zlepšit zabezpečení, protože dokáže prozkoumat obsah souborů před jejich spuštěním.

Co se stane se soubory .dex v novějších verzích Androidu?

Od verze Android 5.0 (Lollipop) se systém vyvinul. Dříve byl Dalvik virtuálním strojem zodpovědným za spouštění souborů .dex. Nyní drtivá většina zařízení používá ART (Android Runtime), který stále pracuje se soubory .dex, ale aplikuje více optimalizací a část kódu kompiluje až při instalaci (před instalací, AOT).

To znamená, že ačkoli základní formát zůstává .dex, kód aplikace je dále transformován za účelem zlepšení výkonu, spouštění a uživatelského prostředí. V některých případech systém generuje soubory .odex nebo jiné odvozené formáty, ale vždy ze slavných souborů .dex zabalených v APK.

Proces provádění: od .dexu po spouštěný kód

Když spustíte aplikaci v systému Android, systém provede následující:

  • Rozbalte soubor .dex z nainstalovaného APK
  • Kontroluje podpis a integritu souboru
  • V moderních verzích můžete část .dex souboru zkompilovat do nativního kódu (optimalizace AOT/JIT).
  • Provede instrukce reprezentované v souboru .dex pomocí Dalviku nebo ART.

To vše se děje pro uživatele téměř transparentně, ale v zákulisí systém čte a spouští soubor .dex v reálném čase , efektivně spravuje paměť, zrychluje procesy a umožňuje skvělou kompatibilitu mezi aplikacemi z různých zdrojů.

Může mít APK více souborů .dex?

Ano, v minulosti byly soubory APK omezeny na jeden soubor .dex , a tedy na maximální počet tříd a metod (známý „limit 65 tisíc metod“). Postupem času se ale mnoho aplikací natolik rozrostlo (vzpomeňte si na aplikace jako Facebook nebo WhatsApp), že musely tuto bariéru překonat. Proto je nyní velmi běžné najít soubory APK s více soubory .dex ( multidex ), z nichž každý má stejný formát a v rámci aplikace funguje koordinovaně.

Tato funkce umožňuje vytvářet aplikace tak velké a komplexní, jak je potřeba, bez ztráty výkonu nebo kompatibility.

Analýza vnitřní struktury souboru .dex

Pojďme se trochu hlouběji ponořit do interní organizace souboru .dex . Představte si, že je to jako velký návod k použití, kde každá část má svou vlastní sekci a pravidla:

  • Záhlaví – Zde jsou základní informace o souboru, jako je jeho magický „podpis“, velikost, verze a kontrolní součty.
  • ID řetězců – Je to uspořádaný seznam všech řetězců v souboru .dex (názvy tříd, metody, textové literály atd.).
  • ID typů – Definuje všechny datové typy a třídy, na které se odkazuje.
  • Proto ID – Zde definujeme „prototypy“ metod, tedy jak se volají, co vracejí a jaké parametry přijímají.
  • ID polí a ID metod – Toto jsou seznamy všech dostupných polí a metod s křížovými odkazy pro rychlý přístup.
  • Ochrana třídy – Podrobné informace o každé třídě: její metody, pole, nadtřídy, implementovaná rozhraní, anotace, ladicí data atd.
  • Datová sekce – Tato oblast obsahuje hodnoty, řetězce, pole, anotace a kód metody (v bajtkódu Dalvik).

To vše je uspořádáno tak, aby byl zajištěn efektivní a rychlý přístup , minimalizována spotřeba paměti a zrychleno načítání a výkon aplikací.

Jak otevřít a prozkoumat soubor .dex

Možná vás to zajímá a chcete vidět, co se nachází uvnitř souboru .dex. Existuje několik nástrojů k jejich kontrole:

  • DexplorerAplikace pro Android, která umožňuje procházet soubory .dex nainstalovaných aplikací. Můžete si prohlížet definice tříd, metod a polí, procházet interní zdroje APK, prohlížet náhled souborů XML a obrázků, poslouchat zvuk a dokonce i prohlížet manifesty.
  • Dekompilátory a disassemblery pro PCExistují počítačové programy jako jadx, dex2jar a další, které převádějí soubory .dex zpět do čitelného kódu Java nebo jiných meziformátů.
  • vývojové prostředí Android StudiaPro vývojáře umožňuje samotné Android Studio prohlížet obsah souborů .dex generovaných během kompilace.

Varování: Prohlížení souborů .dex jiných osob může být právně problematické , zejména pokud máte v úmyslu upravovat aplikace, které nejsou vaše. Dělejte to pouze pro vzdělávací účely a nikdy ne pro obcházení bezpečnosti, autorských práv nebo ochrany soukromí.

Úprava a manipulace se soubory .dex

Úprava souboru .dex není snadná a obecně se nedoporučuje, pokud nejste odborník a neděláte to ve vlastních aplikacích. Existují nástroje pro dekompilaci, úpravu a rekompilaci souborů .dex, ale jakékoli změny mohou vést k chybám, pádům nebo dokonce bezpečnostním zranitelnostem.

Pokud vyvíjíte aplikace a potřebujete upravovat soubory .dex, vždy používejte oficiální nástroje a dodržujte bezpečnostní pokyny systému Android. Pro ostatní uživatele je nejlepší se těchto souborů vyvarovat, pokud to není nezbytně nutné.

Reálný příklad: Dexplorer

Dexplorer
Dexplorer
Vývojář: Detektor doplňků
Cena: Zdarma

Jak jsme již zmínili, existuje aplikace s názvem Dexplorer, která je speciálně navržena pro prozkoumávání souborů .dex a APK.

Platí pro aplikaci:

  • Procházení balíčků a souborů aplikací Java
  • Zobrazení definic tříd, polí a signatur metod
  • Procházení zdrojů, jako jsou datové zdroje, knihovny a soubory zdrojů
  • Náhled souborů XML, obrázků, zvuku a písem v souboru APK
  • Otevírání souborů APK z Průzkumníka souborů
  • Použijte nástroj jako podporu při kontrole obfuskace kódu (například s Proguardem)

Poznámka: Tato aplikace je pouze nástrojem pro vývojáře a zvědavé uživatele ; není určena pro nelegální aktivity ani pirátství.

Dexplorer
Dexplorer
Vývojář: Detektor doplňků
Cena: Zdarma

Přidat jako preferovaný zdroj v Googlu