Що таке файли ODEX в Android?


82

Після androidвстановлення деяких програм я виявив, що він зміниться на odexфайл (не apk) на смартфоні. Як це відбувається? Хто може мене навчити, мені це дуже цікаво.

Відповіді:


85

Стаття в блозі в основному правильна, але не повна. Щоб мати повне розуміння того, що робить файл odex, вам слід трохи зрозуміти, як працюють файли програм (APK).

Програми - це в основному прославлені архіви ZIP. Код Java зберігається у файлі, який називається classes.dex, і цей файл аналізується Dalvik JVM, а кеш обробленого файлу classes.dex зберігається в кеш-пам'яті Dalvik телефону.

Odex - це, в основному, попередньо оброблена версія класу програми. Коли додаток одексований, classes.dex видаляється з архіву APK, і він нічого не записує в кеш Dalvik. Додаток, який не одексований, закінчується двома копіями файлу classes.dex - пакетованим у файлі .apk та обробленим у кеш-пам'яті Dalvik. Також потрібно трохи більше часу, щоб запуститись вперше, оскільки Dalvik повинен витягти та обробити файл classes.dex.

Якщо ви створюєте користувальницький ПЗУ, дуже гарною ідеєю є одексувати як ваші JAR-файли, так і основні програми, щоб максимізувати внутрішній простір для встановлених користувачем програм. Якщо ви хочете створити тему, просто deodex -> застосуйте свою тему -> reodex -> випустіть.

Для фактичного деодекса використовуйте малі та baksmali:

https://github.com/JesusFreke/smali/wiki/DeodexInstructions


Чи можете ви поділитися тоною, як ми можемо перевизначити файл apk?
Basher51,

23

Ця стаття в блозі пояснює внутрішні елементи файлів ODEX:

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

У файловій системі Android програми поставляються в пакетах із розширенням .apk. Ці пакети додатків або файли .apk містять певні файли .odex, функцією яких є економія місця. Ці файли 'odex' насправді є колекціями частин програми, які оптимізовані перед завантаженням. Це прискорює процес завантаження, оскільки попередньо завантажує частину програми. З іншого боку, це також ускладнює злом цих програм, оскільки частина кодування вже була витягнута в інше місце перед виконанням.


Якщо я сподіваюся, що моя програма має ту саму функцію (програми працюють у odex, а не APK), як це зробити?
user1253435 07

Ви повинні отримати мінус! Dalvik не оптимізує час завантаження. Код він оптимізований, як у компіляторі, з мови високого рівня на нижчий рівень, тільки що в цьому випадку код для dalvik є майже перекладом на машинний код. Ось чому ви могли зробити додаток із С ++, а не лише з Java.
cox

Ви впевнені в цьому APKs contain certain .odex files?!
Амір Резазаде

3

МИСТЕЦТВО

Відповідно до документів: http://web.archive.org/web/20170909233829/https://source.android.com/devices/tech/dalvik/configure a .odexfile:

містить збірний 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здається, працює і робить суттєві розбирання (але також деякі ділянки сміття).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.