web-dev-qa-db-fra.com

Que sont les fichiers ODEX dans Android?

Après l'installation de certaines applications Android, j'ai constaté que le fichier deviendrait odex (et non apk) dans le smartphone. Comment ça se passe? Qui peut m'apprendre, cela m'intéresse beaucoup.

70
user1253435

L'article du blog est généralement correct, mais pas complet. Pour bien comprendre le fonctionnement d'un fichier odex, vous devez comprendre un peu le fonctionnement des fichiers d'application (APK).

Les applications sont essentiellement des archives Zip glorifiées. Le code Java est stocké dans un fichier appelé classes.dex. Ce fichier est analysé par la machine virtuelle Dalvik et un cache du fichier classes.dex traité est stocké dans le cache Dalvik du téléphone.

Un odex est fondamentalement une version pré-traitée du fichier classes.dex prêt à l'exécution pour Dalvik. Lorsqu'une application est odexed, le fichier classes.dex est supprimé de l'archive APK et il n'écrit rien dans le cache Dalvik. Une application qui n'est pas odexed se termine avec 2 copies du fichier classes.dex - celle qui est fournie dans l'APK et celle qui est traitée dans la mémoire cache de Dalvik. Il faut également un peu plus de temps pour le premier lancement, car Dalvik doit extraire et traiter le fichier classes.dex.

Si vous construisez une ROM personnalisée, il est très judicieux d'odexiser à la fois vos fichiers JAR d'infrastructure et les applications stock afin d'optimiser l'espace de stockage interne des applications installées par l'utilisateur. Si vous souhaitez créer un thème, désodexez simplement -> appliquez votre thème -> reodex -> release.

Pour réellement désodexer, utilisez small et baksmali:

http://code.google.com/p/smali/wiki/DeodexInstructions

72
Nathan Strong

Cet article de blog explique le fonctionnement interne des fichiers ODEX:

QUOI IS UN FICHIER ODEX?

Dans le système de fichiers Android, les applications sont fournies dans des packages portant l’extension .apk. Ces packages d’application, ou APK, contiennent certains fichiers .odex dont la fonction supposée est d’économiser de l’espace. Ces fichiers 'odex' sont en réalité des fichiers. collections de parties d'une application optimisées avant le démarrage, ce qui accélère le processus de démarrage car il précharge une partie de l'application, mais rend également difficile le piratage de ces applications, car une partie du codage a déjà été extraite à un autre endroit avant l'exécution.

18
theomega

[~ # ~] art [~ # ~]

Dans l'art, .odex Les fichiers contiennent:

contient le code AOT compilé pour les méthodes de l'APK.

selon les documents: http://web.archive.org/web/20170909233829/https://source.Android.com/devices/tech/dalvik/configure

En outre, elles semblent être des bibliothèques partagées ordinaires, car si vous avez une application, vérifiez:

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

ça dit:

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

et aarch64-linux-gnu-objdump -d base.odex semble fonctionner et donner un certain démontage significatif (mais aussi des sections de déchets).