Меню

android установка прошивки zip

Android установка прошивки zip

FAQ по созданию патча update.zip для прошивки через рекавери

Редактирование Updater-script. Информация, решения, команды, подпись патчей.
Инструкция по установке системных и пользовательских приложений с помощью recovery
Редактирование установленной прошивки и удаление системных приложений
(ключевые слова)

Напоминаю, тут не стол заказов.. Посты с просьбой собрать zip для «хххх» Recovery оффтоп

Сообщения, не относящиеся к теме обсуждения (оффтоп), удаляются без предупреждения

  • Добавление нескольких пользовательских/системных приложений «за один клик» (одним патчем).
  • Добавление/удаление системных приложений без root прав и вспомогательных программ.
  • Изменение прошивки (замена файлов, украшательства и т.д.).
  • Обновление программы или прошивки.
  • Переразметка памяти (обсуждения в другой теме)
  • Получение root прав SuperUser, SuperSU, Magisk
  1. Установленный на телефоне кастомный рекавери (CWM/TWRP)
  2. NotePad++ (редактор с сохранением Unix формата)
  3. Zip_signer (подписчик архивов)
  4. Архиватор ZIP
  5. Файл-заготовка sample.zip (либо update-binary для ручной сборки)
    Zip_signer.rar ( 13,28 КБ )
    sample-patch.rar ( 4,77 МБ )
    update-binary.rar ( 113,25 КБ )
  6. Дополнительные версии бинарника. binary_all.rar ( 649,36 КБ )
  7. Бинарники (архив/исходники)

Исходники бинарника, основная ссылка:
https://android.google…ootable/recovery/+refs
выбираем к примеру «android-9.0.0_r18» (последний билд на сегодня), потом ищем папку «updater», в папке «updater» исходники бинарника

К примеру https://android.google…droid-9.0.0_r18/updater — можно глянуть все команды которые может выполнить бинари в андроид 9.0.0 (в файле install.cpp, в самом низу)

Для того, чтобы установить новые системные приложения apk в Ваш аппарат, необходимо выполнить три шага:

  1. Собрать свой update.zip (из заготовки sample.zip)
  2. Подписать update.zip утилитой Zip_signer
  3. Закинуть на флэшку и установить в аппарат через ClockWorkMod Recovery

Эти шаги являются универсальными, т.е. подойдут для выполнения других подобных операций.

ШАГ №1
Собрать новый update.zip, используя «болванку» sample.zip
Порядок использования sample.zip:

  1. Разархивировать архив sample.zip
  2. Удалить файлы подписи META-INF/CERT.RSA, CERT.SF, MANIFEST.MF (т.к. 2м шагом мы их будем создавать для своей сборки)
  3. Поместить в папку /data/app свое пользовательское приложение (xxxxx.apk)
  4. При необходимости отредактировать файл updater-script (подробнее позже)
  5. Заархивировать всё (META-INF и data) ZIP’ом без сжатия

ШАГ №2
Подписать update.zip с помощью утилиты Zip_signer
Порядок использования утилиты Zip_signer:

  1. Переименовать Ваш отредактированный (т.е. уже с приложением внутри) sample.zip в update.zip
  2. Поместить его в папку с программой Zip_signer
  3. Запустить файл zip_signer.bat
  4. Дождаться, пока процесс будет завершен
  5. В папке появится файл update-finished.zip — это и есть подписанный файл
  6. Переименовать update-finished.zip по своему усмотрению (согласно логике патча)

ШАГ №3
Установка нового приложения

  1. Перекинуть (переименованный) update-finished.zip на флэшку и установить его в аппарат через TWRP или CWM (install zip from sdcard -> chooze zip from internal sdcard -> Yes, install sample.zip)
  2. Перезагрузить аппарат

/ )

  • Выполняем программу подписи (signapk )
  • Внимание! Патчи создаются только для мод.рекавери и результативно работают только в них. В стоковых рекавери (на аппаратах «из коробки») патчи не работают.

    Разберем sample.zip
    Патч добавляет пользовательское приложение MyPiano в Data.

    Код :
    ui_print(«=== Patching new application ===»);
    ui_print(» «); — выводит на экран надпись и пустую строку
    run_program(«/sbin/busybox», «mount», «/data»); — (монтирует data) открывает доступ для работы с системным разделом
    package_extract_dir(«data», «/data»); — копирует содержимое папки data в соответствующую папку на устройстве
    set_perm_recursive(1000, 1000, 0771, 0644, «/data/app»); — устанавливает владельца, группу и разрешения для содержимого папки на устройстве (инфо по коду ниже)
    run_program(«/sbin/busybox», «umount», «/data»); — размонтирование data
    ui_print(«=== Complete ===»); — выводит сообщение о завершении процесса

    Читайте также:  что такое настройка и наладка станка

    busybox — приложение для выполнения командной строки, устанавливается с кастомным рекавери, находится в ramdisk/sbin. в кастомных прошивках зачастую добавляют его в system/xbin

    Возможные исправления для своих целей

    1. Изменение прав
      set_perm_recursive(1000, 1000, 0771, 0644, «/data/app/»);
      можно заменить на:
      set_perm(1000, 1000, 0644, «/data/app/mypiano.apk»); — в данном случае права изменятся только лишь для добавленного приложения
    2. Добавление системного приложения
      а. корневая папка data меняется на system
      б. в коде updater-script тоже самое
      в. права назначаются через set_perm только для добавляемого приложения, для системных код 0675 (инфо по кодам ниже)
    3. Удаление приложения/файла
      В код добавляется строка подобного вида:
      delete(«/system/app/OldApk.apk»);
      При условии что busybox находится в другом месте, возможная замена
      run_program(«/sbin/busybox», «mount», «/data»); — на — run_program(«/system/xbin/busybox», «mount», «/data»);
      либо
      mount(«ext4», «EMMC», «/dev/block/mmcblk0p 5 «, «/data»); — при этом уточнить расположение блока нужного Вам раздела

    Правилами хорошего тона в написании любого кода является использование TAB’ов (отступов в начале строки).

    package_extract_dir
    Синтаксис: package_extract_dir(» «, » «);
    Копирует содержимое в . Файлы в имеющиеся в перезаписываются.
    Пример: package_extract_dir(«system», «/system»); Скопирует файлы из папки update.zip/system в /system

    package_extract_file
    Синтаксис: package_extract_file(» «, » «);
    Копирует файл в . Если файл существует, то он перезаписывается.
    Пример: package_extract_file(«test.sh», «/tmp/test.sh»); Скопирует файл test.sh из update.zip в /tmp/test.sh

    format
    Синтаксис: format(«MTD», » «);
    Форматирует раздел (см. приложение).
    Пример: format(«MTD», «system»); Полностью отформатирует /system . Примечание: форматирование удаляет данные необратимо.
    Пример 2: format(«ext4», «EMMC», «/dev/block/mtdblock5», «0», «/system»);
    Определение номера блока под спойлером «инфо и материалы».

    delete
    Синтаксис: delete(» «[, «file2», . «fileN»]);
    Удаляет файл(ы)
    Пример: delete(«/system/app/Calculator.apk»); Удалит Calculator.apk из папки system/app.

    delete_recursive
    Синтаксис: delete_recursive(» «[, «dir2», . «dirN»]);
    Рекурсивно удаляет папку(и) со всем содержимым
    Пример: delete_recursive(«/data/dalvik-cache»); Удалит папку /data/dalvik-cache со всем содержимым.

    run_program
    Синтаксис: run_program(» «[, » «, » «, » «]);
    Запускает программу(скрипт) .
    Пример: run_program(«/tmp/install_busybox.sh»); Запустит скрипт /tmp/install_busybox.sh.

    «[, . «pathtofileN»]);
    Устанавливает владельца, группу и разрешения для файла или папки, как ‘chmod’, ‘chown’, и ‘chgrp’ всё в одном
    Пример: set_perm(0, 2000, 0550, «/system/etc/init.goldfish.sh»); Установит владельца, группу и разрешения для файла /system/etc/init.goldfish.sh

    set_perm_recursive
    Синтаксис: set_perm_recursive( , , , , «

    «])
    Рекурсивно устанавливает владельца, группу и разрешения для содержимого папки. — для папок, — для файлов.
    Пример: set_perm_recursive(0, 0, 0755, 0644, «/system/app»); Установит права для содержимого /system/app, для папок — 0755, для файлов — 0644.

    show_progress
    Синтаксис: show_progress( , );
    Продвижение прогрессбара на долю за секунд. может быть нулевым для продвижения его по командe set_progress, а не по времени.
    Пример: show_progress(0.100000, 1); Увеличит прогресс на 0.1 часть за 1 секунду

    set_progress
    Синтаксис: set_progress( );
    Устанавливает положение прогрессбара на долю , для самого последнего вызова команды show_progress.
    Пример: set_progress(0.500000);

    symlink
    Синтаксис: symlink(«

  • «, «
  • «, «
  • «]);
    Создает символическую ссылку (как ‘ln-s’).
  • пишется в формате root:path, а
  • в формате целевой файловой системы (и может быть относительным). Википедия Symlink.
    Пример: symlink(«/data/app_s», «/system/app»); Создаст символическую ссылку на папку /data/app_s для папки /system/app

    Читайте также:  помощь по настройке сервера minecraft

    . должно быть название раздела, если это «MTD», или блок памяти если это «vfat»
    Пример: mount(«MTD», «userdata», «/data»);

    ui_print
    Синтаксис: ui_print(» «);
    Выводит на экран сообщение
    Пример: ui_print(«Formatting SYSTEM. «);

    sleep
    Синтаксис: sleep( );
    Пауза процесса на секунд
    Пример: sleep(5); — пауза 5 секунд, после чего код скрипта выполняется дальше.

    set_metadata / set_metadata_recursive
    Синтаксис: set_metadata (. );
    Устанавливает владельца, группу и разрешения (новая команда взамен set_perm для andriod 4.4.*)
    Примеры: Android update-script (Пост #32151495)
    Создание патча update.zip для прошивки через рекавери (Пост kory-vadim #81945464)

    set_metadata / set_metadata_recursive
    Синтаксис:
    set_metadata(«имя файла», «ключ1», «значение1», «ключ2», «значение2», . )
    set_metadata_recursive(«имя директории», «ключ1», «значение1», «ключ2», «значение2», . )
    Ключи:
    * uid
    * gid
    * mode (set_perm_extd only)
    * fmode (set_perm_extd_recursive only)
    * dmode (set_perm_extd_recursive only)
    * selabel
    * capabilities
    первые три (uid, gid, mode) это тоже самое что и в chmod, заполняется «uid», 0, «gid», 1000, «mode», 06754.
    для установки прошивки хватает трех ключей «uid», 0, «gid», 1000, «mode», 06754.
    Пример: set_metadata(«/system/xbin/shelld», «uid», 0, «gid», 1000, «mode», 06754, «capabilities», 0x0, «selabel», «u:object_r:system_file:s0»);
    set_metadata_recursive(«/system/xbin», «uid», 0, «gid», 2000, «dmode», 0755, «fmode», 0755, «capabilities», «0x0», «selabel», «u:object_r:system_file:s0»);

    команды для Nexus’ов
    block_image_update(«/dev/block/platform/msm_sdcc.1/by-name/system», package_extract_file(«system.transfer.list»), «system.new.dat», «system.patch.dat»);
    Синтаксис: block_image_update(«Путь к блоку раздела», package_extract_file(«список информации для патча (?) «), «образ», «патч образа»);
    я так понимаю, что так прошивается сильно сжатая прошивка (образ системы).
    Еще ifelse
    Пример: ifelse(is_mounted(«/system»), unmount(«/system»)); — если раздел сустем смонтирован дается команда на его размонтирование, если размонтиовать то нечего не происходит.

    Информация по атрибутам set_metadata и подобным командам на Android 4.4+
    Android update-script (Пост blackeangel #50803606)
    Описание откуда берутся «u:object_r:uncrypt_exec:s0» и подобные атрибуты. . .

    Пример скрипта который может удалять\перемещать\бекапить файлы и вести лог действий
    Android Script Creator (Пост Octanium #51085030)

    Используется при отсутствии busybox, либо чтоб не привязываться к его расположению в системе.

    Код «перезагрузки» и «перезагрузки в рекавери» соответственно:

    Когда скрипт выполняется очень быстро (1-4 секунд) я использовал следующий код:

    Т.е. за 3 секунды прогресс бар доходит до 100% (постепенно).
    Число «3» выбрано как [время установки скрипта]+1 сек, чтоб прогресс бар при установке гарантированно двигался и не успел дойти до 100% раньше, чем скрипт установится.

    «[, . «pathtofileN»]);
    Устанавливает владельца, группу и разрешения для файла или папки, как ‘chmod’, ‘chown’, и ‘chgrp’ всё в одном
    Пример: set_perm(0, 2000, 0550, «/system/etc/init.goldfish.sh») Установит владельца, группу и разрешения для файла /system/etc/init.goldfish.sh

    «])
    Рекурсивно устанавливает владельца, группу и разрешения для содержимого папки. — для папок, — для файлов.
    Пример: set_perm_recursive(0, 0, 0755, 0644, «/system/app») Установит права для содержимого /system/app, для папок — 0755, для файлов — 0644.

    . должно быть название раздела, если это «MTD», или блок памяти если это «vfat»
    Пример: mount(«MTD», «userdata», «/data»);


    Если Вам знакомо что такое Recovery, CWM,TWRP, знаете что такое кастомные прошивки и с чем их едят, то наверняка вы сталкивались с тем что прошивка или обновление не устанавливается выводя при этом ошибку «Status #».

    • Signature verification failed. Installation aborted — Патчи создаются только для мод.рекавери и результативно работают только в них. В стоковых рекавери (на аппаратах «из коробки») патчи НЕ работают. Следует заменить стоковое рекавери на CWM или TWRP.
    • Status 0 — данный код ошибки возник из за того, что файл updater-script или update-binary отсутствуют в прошивке или обновлении
    • Status 255 — данный код ошибки возник из за того, что файл update-binary не подходит
      В обоих случаях лечится одинаково, нужно взять update-binary из любой прошивки для вашего девайса
    • Status 1 — данный код ошибки возник из за того, что заданы неправильные пути монтирования разделов
    • Status 4 — данный код ошибки возник из за того, что архив прошивка либо архив-обновление рассчитаны на более раннюю версию СWM (там использовался updater-script без бинарника update-binary).
    • Status 6 — а) Обозначает что updater-scpript создан не в Unix формате, поэтому при установке Android не распознает что там написано и выдает ошибку Status 6. Для того чтобы это исправить советую скачать и установить NotePad ++ и поменять формат;
      б) Синтаксическая ошибка (пропущен какой-либо символ, например «;», пропущена буква в команде)
    • Status 7 — а) Прошивка не подходит для Вашего девайса и в updater-script прописано другое название модели. Открыть updater-script и удалить строки содержавшие название чужой модели и переподписать прошивку.
      б) Через рекавери сначала смонтировать систему (mounts & storage — mount /system), затем ставить патч
      в) Решение проблемы с ошибкой STATUS 7: Sony Ericsson XPERIA neo — CyanogenMod 7 — FreeXperia PROJECT (OS 2.3) (Пост #11599821)
    • line *** col **: syntax error — Синтаксическая ошибка в строке кода №*** и символе №** (ищите где пропустили или поставили лишний символ, обычно это запятые и кавычки)
    • Symlink: some symlinks failed — Недостаточно места в системном разделе. Патч устанавливает файлы не в тот раздел/блок.
    • No space left on device — Недостаточно места в системном разделе. Патч устанавливает файлы не в тот раздел/блок.
    • format() expects 4 args got 5 либо format() expects 5 args got 4 — [функция format() ожидала Х аргумента, но получила Y] — в содержинии формата убираем либо добавляем название раздела, к примеру («ext4», «EMMC», «/dev/block/mmcblk0p6», «0» , «/system» ) . «аргумент» — те данные, которые написаны внутри скобок через запятую.
    • Ошибку не выдает, патч в мод.рекавери срабатывает, но нужное приложение не добавляется — см. раздел шапки РЕДАКТИРОВАНИЕ UPDATER-SCRIPT -> п.4, либо вручную монтировать необходимый раздел.
    • Please upgrade to latest binary либо . binary — Файл update-binary не подходит, нужно взять update-binary из любой прошивки для вашего девайса.
    • Не работает подписчик Zip_signer — проверьте java на компьютере, обновите либо установите заново.
      «java» не является внутренней или внешней командой, исполняемой программой или пакетным файлом. — ошибка в Zip_signer — установите Java, Android update-script (Пост Vulcanus #54856173)
    Читайте также:  настройка оптического прицела tasco 4x20

    ps: Если в ходе ваших экспериментов часто появляются ошибки — попробуйте первым делом создать самый простой патч (взяв за основу sample.zip), а затем уже переходить на более сложные.
    Это делается в первую очередь для того чтоб избежать механических ошибок в процессе создания патча, а также проверить совместимость с update-binary, совместимость с мод.рекавери и соответствие подписи.

    Информация:

    Определение номера блока

    источник

  • Добавить комментарий

    Adblock
    detector