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

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

3 ответа

Статья в блоге в основном правильная, но не полная. Чтобы иметь полное представление о том, что делает файл 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

Эта статья блога объясняет внутренности ODEX-файлов:

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

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

ИЗОБРАЗИТЕЛЬНОЕ ИСКУССТВО

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

Другие вопросы по тегам