После установки некоторых android
приложений я обнаружил, что на смартфоне он изменится на odex
файл (не apk
). Как это бывает? Кто может меня научить, мне это очень интересно.
После установки некоторых android
приложений я обнаружил, что на смартфоне он изменится на odex
файл (не apk
). Как это бывает? Кто может меня научить, мне это очень интересно.
Ответы:
Статья в блоге в основном правильная, но не полная. Чтобы иметь полное представление о том, что делает файл odex, вы должны немного понять, как работают файлы приложений (APK).
Приложения в основном представляют собой прославленные ZIP-архивы. Код Java хранится в файле с именем classes.dex, и этот файл анализируется JVM Dalvik, а кэш обработанного файла classes.dex хранится в кэше Dalvik телефона.
Odex - это, по сути, предварительно обработанная версия файла classes.dex приложения, готовая к выполнению для Dalvik. Когда приложение odexed, класс classes.dex удаляется из архива APK и ничего не записывает в кеш Dalvik. Неодексированное приложение получает две копии файла classes.dex - упакованную в APK и обработанную в кэше Dalvik. Также требуется немного больше времени для запуска в первый раз, поскольку Dalvik должен извлечь и обработать файл classes.dex.
Если вы создаете собственное ПЗУ, неплохо было бы разместить как JAR-файлы фреймворка, так и стандартные приложения, чтобы максимально увеличить внутреннее пространство для хранения приложений, установленных пользователем. Если вы хотите тему, то просто deodex -> примените вашу тему -> reodex -> отпустите.
Чтобы собственно деодексировать, используйте small и baksmali:
В этой статье блога объясняется внутреннее устройство файлов ODEX:
ЧТО ТАКОЕ ФАЙЛ ODEX?
В файловой системе Android приложения поставляются в виде пакетов с расширением .apk. Эти пакеты приложений или APK-файлы содержат определенные файлы .odex, предназначенные для экономии места. Эти файлы «odex» на самом деле представляют собой наборы частей приложения, которые оптимизируются перед загрузкой. Это ускоряет процесс загрузки, так как предварительно загружает часть приложения. С другой стороны, это также затрудняет взлом этих приложений, потому что часть кода уже была извлечена в другое место перед выполнением.
APKs contain certain .odex files
?!
ИЗОБРАЗИТЕЛЬНОЕ ИСКУССТВО
Согласно документам: http://web.archive.org/web/20170909233829/https://source.android.com/devices/tech/dalvik/ настроить .odex
файл:
содержит код, скомпилированный AOT для методов в APK.
Кроме того, они кажутся обычными общими библиотеками, поскольку, если вы получите какое-либо приложение, проверьте:
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
вроде работает и дает какую-то осмысленную разборку (но и некоторые мусорные разделы).