02 дек. 2011 г.

Что такое ODEX и DEODEX

Каждый, кто хотя бы раз перепрошивал свой телефон, сталкивался с понятиями ODEX или DEODEX ( или прошивка odexed или deodexed). Теперь кратко о том, что это такое, и о преимуществах того и другого вариантов:
Почти все APK-файлы в системном разделе в обычной (стоковой) прошивке сопровождаются файлом ODEX (например contacts.apk и contacts.odex). Часть приложения (а именно сам java-код) содержится как раз в odex-файле. Поэтому любое изменение самого apk-файла должно сопровождаться соответствующей правкой ODEX-файла.

Умельцы преобразовали файлы xxxxx.ODEX в classes.odex и вставили их внутрь файлов APK (т.е. из contacts.apk и contacts.odex сделали просто contacts.apk с включенным в него classes.odex), тем самым уменьшив размер прошивки, и самое главное - после деодексирования сами APK-файлы можно изменять как угодно, на работу системы это особо не влияет.

Чем это хорошо - в деодексированной прошивке можно запросто открыть архиватором (или тотал коммандером) APK-файл, заменить в нём ресурсы (картинки и т.п.) и вернуть изменённый файл на место в прошивку. В обычной (ODEX) это может привести к краху системы, т.к изменения, как правило, нужно производить сразу в 2-х файлах. 

С другой стороны, одексирование является оптимизацией того самого java-кода под конкретное устройство. То есть файл *.odex содержит перекомпилированый java-код программы под конкретное устройство, а файл classes.dex в корне файла *.apk (деодексированный вариант) содержит java-код, который может быть выполнен на любом устройстве
Это и есть сердце Андроида: виртуальная java-машина "Dalvik". Т.е. система каждый раз будет пытаться перекомпилировать все classes.dex находящиеся во всех .apk при их отсутствии в папке dalvik-cache. Именно поэтому для deodexed прошивок рекомендуется делать "clear dalvik-cache" перед прошивкой нового мода, и именно с этим связан очень долгий запуск deodexed-прошивки после процедуры очистки того самого dalvik-cache.

Кроме этого, одной из причиной деодексирования была необходимость изменения файла services.jar - для смены цвета текстов (к примеру, цвет часов из белого в черный и т.п.), а для того, чтобы деодексировать services.jar, необходимо деодексировать все системные .apk-файлы.

А еще, по наблюдениям, odex-прошивки в целом работают быстрее их deodex-аналогов.

В самое ближайшее время мы представим наш первый ODEX-мод - Easy Project Classic
Работа уже идет!


подготовлено по материалам xda-developers и 4pda.

3 комментария:

BURJUY комментирует...

любителям стока!думаю прийдется по душе

Mancho_J комментирует...

и не только...

Arcomage комментирует...

ODEX выглядит ка заплатка для прогарммистов, которые не хотят с одной стороны писать универсальный код, с другой строны - не хотят делать оптимальную Java машину под определенное устройство. Это трудно, но Java и был задуман, как крос-платформенный язык, а все Inline только говорят о его не универсальности и на PC его в действительно стоящих приложениях мало.