Что такое файлы 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:
Эта статья блога объясняет внутренности 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
кажется, работает и дает некоторые значимые разборки (но также некоторые мусорные разделы).