Что такое файлы ODEX в Android?

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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, похоже, работают и дают некоторую значительную разборку (но также некоторые разделы мусора).