adblock check

Разбираемся со структурой и собираем .zip пакет для CWM recovery

Всем привет! Для интересующихся системой Андроид решил создать эту статью. Все, кто использует ОС Андроид не только для звонков и воспроизведения медиафайлов, а те кто любит эксперементировать с другими прошивками, ставить украшательства полностью изменяющие интерфейс, различные твики по увеличению производительности и т.д.(ну, конечно-же имеет рут права), не раз сталкивались с пакетами расширением .zip для установки через CWM recovery. Какова структура этих пакетов, как они ставятся, как самому собрать такой пакет смотрим под кат.

Так как подавляющее множество новичков в этом вопросе, описываю все своими словами. Зип пакет для рекавери,- это набор файлов, скриптов, содержащих в себе синтаксис (текст) на языке edify для выполнения каких либо задач (замена любых файлов, удаление, форматирование, вставка файлов, их запуск и т.д.). Структура пакета:

Внутри пакета мы видим в первую очередь папку «META-INF» в которой лежит папка «сom», далее папка «google», потом папка «android», а уже в последней мы видим два файла: updater-script и update-binary. Такое «забавное» содержание папки META-INF одинаково для всех recovery и устройств на ОС Андроид и только его может «читать» рекавери. Updater-script,- это файл, содержащий в себе команды для рекавери поэтапно. Например открываем updater-script рут эксплорером в текстовом редакторе и видим:

mount("/system");- скрипт монтирует систему на запись

delete("/system/app/calculator.apk");- удаляет из папки system/app/ приложение калькулятор

umout("/system");- размонтирует систему.

Этот скрипт может содержать любой синтаксис для удаления, копирования, открытия и т.д., но об этом позже. Второй файл update-binary,- это набор команд на языке edify (типа шпаргалка для updater-script). Рут эксплорером не открывается из-за большого веса и как правило, скачивается уже готовый. Пример для чего он нужен. Ставите архив, рекавери «смотрит» в updater-script первую команду, например, mount("/system); дальше эта команда проверяется в update-binary, а там написано, что эта команда монтирует на запись систему, и система это выполняет. Еще при распаковке в папке META-INF вы можете увидеть файлы MANIFEST.MF, CERT.RSA и CERT.SF. Это подпись архива, и нужна она только для заводского рекавери. Так же возле «главной» папки META-INF, может быть любая папка либо файл. Например пакет для замены ядра системы: видим в нем папку META-INF со всем в себе содержащим, что я писал выше (META-INF/com/google/android/updater-script и update-binary) и образ ядра boot.img. Либо пакет для удаления и замены, например, стандартного музыкального плеера: META-INF и папка system, а в ней папка app в которую мы ложем напр. playerpro.apk. C этим вроде разобрались, переходим к созданию пакета:

Для того чтобы собрать пакет, изменить или перепаковать прямо на смартфоне, нам потребуется в первую очередь рут права, файл update-binary и три программы: рут эксплорер, zarchiver, и программа для подписи архивов zip signer. Поехали! На примере мы будем удалять стоковый плеер, и на его место ставим PlayerPro.

1. Открываем root explorer и создаем путь из папок META-INF/com/google/android/.

2. В папку android распаковываем и кладем update-binary.

3. Так же в папке android жмем (в приложении Рут эксплорер) дополнительное меню и тапаем на «создать файл». Имя файла прописываем updater-script.

4. Открываем updater-script в текстовом редакторе того-же рут эксплорера и прописываем команды:

mount("/sbin/busybox", "/system");

delete("/system/app/music.apk");

package_extract_dir(«system», "/system“);

unmount("/system");

5. Выходим и сохраняем.

6. Шагаем к папке META-INF, и возле нее создаем папку system, а в ней папку app, куда кладем уже установленный апк файл нашего плеера (взять его можно по пути data/app).

7. Заходим в прогу Zarchiver/настройки/уровень сжатия zip и выбираем «нормальный». Потом выходим из настроек и жмем мультивыделение. Выбираем две наши папки META-INF и system, пакуем их в зип архив.

8. Открываем програму Zip signer, находим наш архив, называем его как хотим (только без русских символов и пробелов, напр. Playerpro-system-by-me), внизу жмем signed test key.

9. Находим подписанный архив, который готов для установки через CWM или любое другое кастомное recovery.

Небольшой пример команд для updater-script:

copy_dir

Синтаксис: copy_dir <src-dir> <dst-dir> [<timestamp>]

Копирует содержимое <src-dir> в <dst-dir>. Файлы в <dst-dir> имеющиеся в <src-dir> перезаписываются.

Пример: copy_dir PACKAGE:system SYSTEM: Скопирует файлы из папки update.zip/system в /system

format

Синтаксис: format <root>

Форматирует раздел (см. приложение)

Пример: format SYSTEM: Полностью отформатирует /system. Примечание: форматирование удаляет данные необратимо.

delete

Синтаксис: delete <file1> [… <fileN>]

Удаляет файл(ы)

Пример: delete SYSTEM:app/Calculator.apk Удалит Calculator.apk из папки system/app.

delete_recursive

Синтаксис: delete_recursive <file-or-dir1> [… <file-or-dirN>]

Рекурсивно удаляет файлы и папки со всем содержимым

Пример: delete_recursive DATA:dalvik-cache Удалит папку /data/dalvik-cache со всем содержимым

run_program

Синтаксис: run_program <program-file> [<args> ...]

Запускает программу(скрипт).

Пример: run_program PACKAGE:install_busybox.sh Запустит скрипт update.zip/install_busybox.sh .

set_perm

Синтаксис: set_perm <uid> <gid> <mode> <path> [… <pathN>]

Устанавливает владельца, группу и разрешения для файла или папки, как ‘chmod’, ‘chown’, и ‘chgrp’ всё в одном

Пример: set_perm 0 2000 0550 SYSTEM:etc/init.goldfish.sh Установит владельца, группу и разрешения для файла /system/etc/init.goldfish.sh

set_perm_recursive

Синтаксис: set_perm_recursive <uid> <gid> <dir-mode> <file-mode> <path> [… <pathN>]

Рекурсивно устанавливает владельца, группу и разрешения для содержимого папки. <dir-mode> — для папок, <file-mode> — для файлов.

Пример: set_perm_recursive 0 0 0755 0644 SYSTEM:app Установит права для содержимого /system/app, для папок — 0755, для файлов — 0644.

show_progress*

Синтаксис: show_progress <fraction> <duration>

Показывает прогрессбар в положении <fraction> <duration> секунд (или быстрее, если фактическая скорость выполнения может быть определена).

Пример: show_progress 0.1 0

symlink

Синтаксис: symlink <link-target> <link-path>

Создает символическую ссылку (как ‘ln-s’). <link-path> пишется в формате root:path, а <link-target> в формате целевой файловой системы (и может быть относительным)

Пример: symlink /data/app_s SYSTEM:app Создаст символическую ссылку на папку /data/app_s для папки /system/app

UPD: если вы собрали пакет, и прошили через рекавери, то варианта два- либо при его установке рекавери напишет ошибку и ничего не произойдет, не удалится. не заменится (такое происходит при неправельной структуре пакета, каких-либо ошибках в названиях файлов/папок, неправельных (не правельный порядок либо ошибки) команд в updater-script или неподходящем update-binary. Как правило рекавери пишет код ошибки от 1 до 9. Либо все станет как вы прописали. То есть, половину команд из updater-scrip не может быть выполнена- или все, или ничего и ошибка.

Надеюсь, кому-то данная статья пригодилась. Естественно, это не значит что вы сразу броситесь, и правильно создатите рабочий пакет, но это очень поможет вам в ваших начинаниях.

ПЕРЕД УСТАНОВКОЙ ЛЮБОГО ПАКЕТА НЕ ЗАБЫВАЕМ ДЕЛАТЬ БЭКАП СИСТЕМЫ. ЗА ВСЕ ДЕЙСТВИЯ ПО УДАЛЕНИЮ И ИЗМЕНЕНИЮ СИСТЕМНЫХ ФАЙЛОВ НИ Я, НИ АДМИНИСТРАЦИЯ САЙТА ОТВЕТСТВЕННОСТИ НЕ НЕСЕТ.

Agibsasha Agibsasha
Серебряный комментатор
18 комментариев по лайкам по дате
Оставьте комментарий...
Оставьте комментарий...
boiko-dv2012 10 лет
спасибо, статья помогла разобраться в некоторых нюансах… хотел уточнить… кое-что… получается, что update-binary универсальный набор команд и один файл подходит всем, как бы библиотека? и второе. Я (реальная ситуация) беру готовый пакет зип по обновлению system/app и system/framework, но от другого телефона. мои папки уже есть, как я понял скрипт и вся папка meta-inf мне подходит… как мне правильно подменить папку system в архиве и нужно ли после этого переподписывать измененный zip?? спасибо заранее за ответ.
Agibsasha 10 лет
Автор
Какой файл, папку, либы вы хотите заменить?
ciento 10 лет
Блин, такая проблема, я создал свой ROM для телефона, вроде-бы все правильно. Но при установке через CWM пишет что плохой пакет can't open /sdcard/CIOS_1.zip (bad)… Так обидно( Кто подскажет как решить проблему?
id138964149 10 лет
можно ли в updater-script прописать 2 раза вот это:
mount("/sbin/busybox", "/system");
delete("/system/app/music.apk");
package_extract_dir(«system», "/system“);
unmount("/system");
для того чтобы 2 файла удалило и 2 вставило или как то по другому?
del 10 лет
ну саша как всегда +
Agibsasha 10 лет
Автор
Спасибо!
shapen09 11 лет
Слушай, а можешь конкретно помочь собрать зип архив с приложениями для блютуз, блютуз сервисы и так далее??
Agibsasha 11 лет
Автор
Могу конкретно! :)
id200427476 4 года
Здравствуйте! Можете подсказать, меня эта ошибка достала,Could not extract meta-inf/com/google/android/update-binary! Преследует меня на всех прошивках какие я перепробовал, twrp последний для моего телефона
shapen09 11 лет
Оо, ты наверное единственный смыщленный человек:))) Скинь ссылку вк или скайпа, поговорим:)
Beksultan19 11 лет
Молодец, лови плюсик +!
dashat 11 лет
Бредактор шутит.
Macho-Support 10 лет
Господа, у нас не 4pda!..
Agibsasha 10 лет
Автор
Сайт посвящен мобильной тематике, это мы и обсуждаем
Оставьте комментарий...
Оставьте комментарий...