После того, как некоторые приложения android
установлены, я обнаружил, что он изменится на odex
файл (не apk
) в смартфоне.
Как это происходит? Кто может научить меня, мне это очень интересно.
Что такое файлы ODEX в Android?
Ответ 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:
Ответ 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
, похоже, работают и дают некоторую значительную разборку (но также некоторые разделы мусора).