Что такое инструмент applypatch и как его использовать?

Недавно я наткнулся на инструмент applypatch, но не смог найти для него никакой документации в Интернете. Вот результат использования (это после ввода adb shell)

shell@android:/ $ applypatch --help                                            
usage: applypatch [-b <bonus-file>] <src-file> <tgt-file> <tgt-sha1> <tgt-size> [<src-sha1>:<patch> ...]
   or  applypatch -c <file> [<sha1> ...]
   or  applypatch -s <bytes>
   or  applypatch -l

Filenames may be of the form
  MTD:<partition>:<len_1>:<sha1_1>:<len_2>:<sha1_2>:...
to specify reading from or writing to an MTD partition.

Что означают параметры командной строки? Что такое МТД? Для чего нужны все хэши sha1?

Кроме того, может ли кто-нибудь с репутацией добавить тег applypatch или, может быть, тег tools? Что-то более описательное, чем то, что я поставил.

Я бы сказал, что это скорее вопрос, ориентированный на развитие? Что касается МПД, посмотрите Википедию .
Я бы не сказал, что это ориентировано на развитие. Я просто смотрел на какой-то код, который кто-то написал для выполнения на устройстве, и увидел, applypatchи мне стало любопытно, как он работает.
Просто читайте исходники :-). На самом деле эта команда действительно важна, если вы страдаете от неработающего обновления OTA (может быть из-за нехватки места), а ваш поставщик предоставляет только добавочное обновление OTA.

Ответы (3)

diffи patchявляются командами Unix/Linux, используемыми для простой проверки различий, отправки обновлений в огромные файлы путем отправки только различий и т. д. (см. Википедию ). В основном они используются при разработке (для обновления исходного кода), но также могут служить практическим целям в средах, не связанных с разработкой.

applypatch— это один из инструментов исправления на Android, который используется, например, для незначительных обновлений (OTA и т.п.). Так что, скорее всего, он не предназначен для того, чтобы «обычный конечный пользователь» имел дело с ним напрямую.

Команда applypatch действительно используется для исправления OTA. Например, у меня есть файл update.zip для моего планшета VZW SCH-I915... в моем случае я не хочу, чтобы это обновление OTA происходило, поэтому я хочу исправить /system/build.prop, чтобы обмануть устройство, заставив его думать, что это уже сделано. В файле update.zip есть файл «скрипт обновления», в котором подробно описаны исправления. Тот, который я искал, был:

apply_patch("/system/build.prop", "-", db0889f98b62e625283e5273bf35d790532b10bd, 5934, 7a52fd5ec0d5afcbaf159c330374dfb0c5cbc159, package_extract_file("patch/system/build.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.prop.

Я извлек соответствующий файл исправления на свою SD-карту. Затем синтаксис для выполнения этого действия на вторичной копии build.prop, которую я сделал (чтобы я мог проверить вывод перед копированием в /system), изменяется следующим образом:

/system/bin/applypatch "/mnt/sdcard/build.prop" "-" "db0889f98b62e625283e5273bf35d790532b10bd" "5934" 7a52fd5ec0d5afcbaf159c330374dfb0c5cbc159:/mnt/sdcard.prop/build

... который создал тот же файл build.prop, который я бы получил, если бы разрешил продолжить OTA. Надеюсь, это поможет.

Applypatch — это утилита, которая применяет двоичный патч к файлу. Например, в некоторых системах раздел восстановления создается путем применения двоичного исправления к загрузочному разделу (они почти идентичны, и при обновлении проще упаковать исправление, чем весь двоичный файл).

Типичное использование — запуск applypatch во время загрузки. Applypatch запускается с параметром -c (проверить), указывающим раздел хранилища, размер и хэш. Эти аргументы определяют, было ли уже применено исправление (если хэш совпадает, то оно было применено). Если исправление не было применено, то applybatch -bвыполняется для фактического применения исправления.

Варианты:

-c файл [ ша ...]

Убедитесь, что файл существует и соответствует хотя бы одному из SHA. SHA также может быть закодирован как часть имени файла; полезно, когда имя файла указывает на раздел. См. исходный код для объяснения. Если имя файла начинается с MTD: или EMMC:, то оно относится к разделу, а не к обычному файлу.

[-b бонусный файл ] src target target-sha1 target-size src-sha1:patchfile

Применяет патч в patchfile к файлу src , создавая target . target-sha1 и target-size используются для подтверждения успешного исправления. src и target могут быть разделами хранилища, например, boot и recovery. Если присутствует -b, он указывает zip-файл с дополнительными материалами.

-s байт

Выйдите с кодом возврата 0, если в кэше доступно не менее байтов .

Показать лицензию BSD и выйти