Was sind ODEX-Dateien in Android?


82

Nachdem einige androidApps installiert waren, stellte ich fest, dass sie auf dem Smartphone in eine odexDatei (nicht apk) geändert werden . Wie passiert das? Wer mich unterrichten kann, interessiert mich sehr.

Antworten:


85

Der Blog-Artikel ist größtenteils richtig, aber nicht vollständig. Um ein umfassendes Verständnis der Funktionsweise einer Odex-Datei zu erhalten, müssen Sie ein wenig über die Funktionsweise von Anwendungsdateien (APK) wissen.

Anwendungen sind im Grunde verherrlichte ZIP-Archive. Der Java-Code wird in einer Datei namens classes.dex gespeichert. Diese Datei wird von der Dalvik-JVM analysiert und ein Cache der verarbeiteten Datei classes.dex wird im Dalvik-Cache des Telefons gespeichert.

Ein Odex ist im Grunde eine vorverarbeitete Version der classes.dex einer Anwendung, die für Dalvik ausführungsbereit ist. Wenn eine Anwendung odexiert ist, wird die classes.dex aus dem APK-Archiv entfernt und es wird nichts in den Dalvik-Cache geschrieben. Eine Anwendung, die nicht odexiert ist, enthält zwei Kopien der Datei classes.dex - die im APK gepackte und die verarbeitete im Dalvik-Cache. Der Start zum ersten Mal dauert etwas länger, da Dalvik die Datei classes.dex extrahieren und verarbeiten muss.

Wenn Sie ein benutzerdefiniertes ROM erstellen, ist es eine gute Idee, sowohl Ihre Framework-JAR-Dateien als auch die Standard-Apps zu odexen, um den internen Speicherplatz für vom Benutzer installierte Apps zu maximieren. Wenn Sie ein Thema erstellen möchten, deodexieren Sie einfach -> wenden Sie Ihr Thema an -> reodex -> veröffentlichen Sie es.

Verwenden Sie zum Deodexieren kleine und Baksmali:

https://github.com/JesusFreke/smali/wiki/DeodexInstructions


Können Sie uns bitte mitteilen, wie wir eine APK-Datei neu ordnen können?
Basher51

23

Dieser Blog-Artikel erklärt die Interna von ODEX-Dateien:

WAS IST EINE ODEX-DATEI?

Im Android-Dateisystem werden Anwendungen in Paketen mit der Erweiterung .apk geliefert. Diese Anwendungspakete oder APKs enthalten bestimmte .odex-Dateien, deren angebliche Funktion darin besteht, Platz zu sparen. Diese 'Odex'-Dateien sind tatsächlich Sammlungen von Teilen einer Anwendung, die vor dem Booten optimiert wurden. Dies beschleunigt den Startvorgang, da ein Teil einer Anwendung vorgeladen wird. Andererseits erschwert es auch das Hacken dieser Anwendungen, da ein Teil der Codierung bereits vor der Ausführung an einen anderen Speicherort extrahiert wurde.


Wenn ich hoffe, dass meine App dieselbe Funktion hat (Apps werden in Odex und nicht in APK ausgeführt), wie geht das?
user1253435

Sie sollten ein Minus bekommen! Der Dalvik optimiert die Startzeit nicht. Der Code ist wie in einem Compiler von High-Level-Sprache zu Lower-Level optimiert, nur dass in diesem Fall der Code für Dalvik fast eine Übersetzung in Maschinencode ist. Aus diesem Grund können Sie eine App aus C ++ erstellen, nicht nur aus Java.
Cox

Bist du dir das sicher APKs contain certain .odex files?!
Amir Rezazadeh

3

KUNST

Gemäß den Dokumenten: http://web.archive.org/web/20170909233829/https://source.android.com/devices/tech/dalvik/configure eine .odexDatei:

enthält AOT-kompilierten Code für Methoden in der APK.

Darüber hinaus scheinen sie reguläre gemeinsam genutzte Bibliotheken zu sein, denn wenn Sie eine App erhalten, überprüfen Sie:

file /data/app/com.android.appname-*/oat/arm64/base.odex

es sagt:

base.odex: ELF shared object, 64-bit LSB arm64, stripped

und aarch64-linux-gnu-objdump -d base.odexscheint zu funktionieren und eine sinnvolle Demontage zu geben (aber auch einige Müllabschnitte).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.