Что такое файлы ODEX в Android? - PullRequest
69 голосов
/ 07 марта 2012

После установки некоторых android приложений я обнаружил, что в смартфоне он изменится на odex файл (не apk).Как это происходит?Кто может научить меня, я очень заинтересован в этом.

Ответы [ 3 ]

71 голосов
/ 26 апреля 2012

Статья в блоге в основном правильная, но не полная. Чтобы иметь полное представление о том, что делает файл odex, вы должны немного понять, как работают файлы приложения (APK).

Приложения в основном прославленные ZIP-архивы. Код Java хранится в файле с именем classes.dex, и этот файл анализируется JVM Dalvik, а кэш обработанного файла classes.dex хранится в кэш-памяти Dalvik телефона.

odex - это в основном предварительно обработанная версия файла classes.dex, которая готова для выполнения для Dalvik. Когда приложение odexed, файл classes.dex удаляется из архива APK и ничего не записывает в кеш Dalvik. Приложение, которое не является odexed, заканчивается двумя копиями файла classes.dex - упакованного в APK и обработанного в кэше Dalvik. При первом запуске также требуется немного больше времени, поскольку Dalvik должен извлечь и обработать файл classes.dex.

Если вы создаете собственное ПЗУ, то неплохо было бы использовать odex как для JAR-файлов фреймворка, так и для стандартных приложений, чтобы максимально увеличить объем внутреннего хранилища для установленных пользователем приложений. Если вы хотите тему, то просто deodex -> применить вашу тему -> reodex -> release.

Чтобы деодексировать, используйте small и baksmali:

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

17 голосов
/ 07 марта 2012

В этой статье блога объясняются внутренние файлы ODEX:

ЧТО ТАКОЕ ФАЙЛ ODEX?

В файловой системе Android, приложения приходят в пакетах с расширением .apk.Эти пакеты приложений или APK содержат определенные файлы .odex, предполагаемая функция которых - экономия места.Эти файлы «odex» на самом деле представляют собой наборы частей приложения, которые оптимизируются перед загрузкой.Это ускоряет процесс загрузки, так как он предварительно загружает часть приложения.С другой стороны, это также затрудняет взлом этих приложений, поскольку часть кода уже была извлечена в другое место перед выполнением.

0 голосов

ART

В ART .odex файлы содержат:

содержит скомпилированный код AOT для методов в APK.

в соответствии с документами: http://web.archive.org/web/20170909233829/https://source.android.com/devices/tech/dalvik/configure

Кроме того, они кажутся обычными общими библиотеками, так как, если вы получаете какое-либо приложение, проверьте:

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

это говорит:

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

и aarch64-linux-gnu-objdump -d base.odex, кажется, работают и дают некоторую значимую разборку (но также некоторые мусорные разделы).

...