Odex и Deodex

Категория: Samsung GT-I9100 Galaxy S II

Почти все *.apk в обычной прошивке сопровождаются файлом ODEX. Часть приложения (а именно сам java код) содержится как раз в этом файле. Поэтому любое изменение самого apk файла должно сопровождаться соответствующей правкой файла ODEX. Умельцы преобразовали файлы программа.ODEX в classes.odex и запихнули их внутрь файлов *.apk, тем самым уменьшили размер прошивки и самое главное - теперь сами *.apk-файлы можно менять как угодно, на работу системы это роковым образом не влияет. Вот это называется деодексирование.
Чем это хорошо - в деодексированной прошивке можно запросто открыть архиватором *.apk-файл, поменять в нём ресурсы (картинки и т.п.) и вернуть изменённый файл на место в прошивку. В обычной же это приводит к краху системы. Одексирование само по себе является оптимизацией того самого java кода под конкретный процессор/устройство. То есть теперь конкретно и по делу: файл *.odex содержит перекомпилированый java код программы под конкретное устройство, а файл classes.dex в корне файла *.apk содержит java код, который может быть выполнен на любом устройстве. Это и есть сердце Андроида: виртуальная java машина "Dalvik". А это все вместе означает, что система каждый раз будет пытаться прекомпилировать все classes.dex находящиеся в *.apk при их отсутствии в папке dalvik-cache.
Для установки Deodex'ed прошивки как правило нужен Root.


Как сделать deodex?
Что нам понадобится:
- ПК на Виндовс
- JDK (Java Development Kit)
- ANDROID SDK
- XULTIMATE 2.2
- и рутованный i9003

1. Распаковываем архив xUltimate v2.2 и запускаем Main.exe
2. Если все пойдет нормально, xUltimate распознает телефон и подключится к нему, после чего вы увидите меню опций
3. Запустите "Option 1". После ее завершения - запустите "Option 2".
4. После их окончания запустите "Option 3"
5. Важно! После запуска "Option 3" =>
6. Запустите "Option 4" и подождите
7. Закройте xUltimate и подключите телефон к USB
8. Копируем папки "done_frame" и "done_app" (из того места, куда мы распаковали архив с xUltimate) В КОРЕНЬ! а не на внешнюю флешку
9. Переведите телефон в "Режим отладки по USB", не держа его в режиме передачи файлов
10. Откройте командную строку и введите следующее:

adb shell
#su
#stop
mount -o remount rw /system
cp /sdcard/done_app/* /system/app/
cp /sdcard/done_frame/* /system/framework/
rm /system/app/*.odex
rm /system/framework/*.odex
mount -o remount ro /system
reboot 

11. Готово.

 

Деодекс с помощью busybox
1) Сначала получаем root.
2) Скачиваем Android Terminal Emulator и устанавливаем.
3) Скачиваем busybox и устанавливаем.
4) Скачиваем этот архив (Внимание! Архив к прошивке I9003XXKB3. К другим версиям прошивки архив вам нужно получить самим, выполнив шаги с 1 по 9 выше выложенной инструкции), распаковываем любым архиватором и перемещаем на sdcard нашего телефона.
5) Запускаем Android Terminal Emulator.
6) Пишем su и жмем Enter.
7) Пишем busybox и жмем Enter.
8) Вводим поочередно команды:

su
mount -o remount rw /system
rm /system/app/*.odex
cp /sdcard/done_app/* /system/app
rm /system/framework/*.odex
cp /sdcard/done_frame/* /system/framework
mount -o remount ro /system
reboot 

После ввода cp /sdcard/done_app/* /system/app телефон работает нестабильно, вылезают сообщения об ошибках. Нажимать "Завершить принудительно" до полного прекращения. Это связано с тем, что происходит перезапись системных файлов.
После ввода reboot телефон перезагрузится. Загрузка будет идти немного дольше обычного.
После загрузки телефона проверьте каталоги /system/app и /system/framework на наличие файлов .odex
Если их нет, значит вы успешно деодексировали прошивку.

Ответы