遅ればせながらアップデートファイルに含まれているパッチの適用方法

2012年1月11日 by
カテゴリ: Android 

アップデートファイルに含まれている ファイル名.p というファイルは差分ファイルです。

以前のバージョンのファイルに差分を適用することで新しいバージョンのファイルが出来るというカラクリ。

その差分ファイルを元ファイルに適用するのが /system/bin/applypatch です。

とりあえず端末上で実行してみましょう

# applypatch
applypatch
usage: applypatch <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.

どうやら <src-file> というのが元のファイルで <tgt-file> というのが出力先。sha1 ってのはハッシュで size はファイルサイズです。

はぁ?って感じw

そこで参考にするのはアップデートファイルに含まれている /META-INF/com/google/android/updater-script というファイル。

例えば boot 領域に boot.img.p を適用するっぽいところにはこう書かれています。

apply_patch(“MTD:boot:2955264:(中略)”, “-“, bdf23d8737e235a6bd38ab017d2a39baf678f74a, 2957312, 69d5cb317b7293600a329855094f33322ac261e8, package_extract_file(“patch/boot.img.p”));

はい。 MTD から始まる部分は /dev/block/boot のパーティションを示してますが、今回はファイル(boot76.img)に差分ファイル(boot.img.p)を適用するので気にしない。

applypatch /sdcard/boot76.img /sdcard/boot78.img bdf23d8737e235a6bd38ab017d2a39baf678f74a 2957312 69d5cb317b7293600a329855094f33322ac261e8:/sdcard/boot.img.p

というふうに書いて実行すると

applying patch to /sdcard/boot76.img
failed to stat “/sdcard/boot78.img”: No such file or directory
target 2957312 bytes; free space -1688469504 bytes; retry 1; enough 1

のように表示されて /sdcard/boot78.img ができます。

差分ファイルの書き方が罠で、「sha1ハッシュ:ファイル名」と「:」で繋げて書かねばいけません。

ええ、はまりました。

以上ご参考まで。

コメント

2 件のコメント on 遅ればせながらアップデートファイルに含まれているパッチの適用方法

  1. T
    2012年1月12日 12:26 AM
  2. おかげさまで、2,957,312のboot78.imgを生成することができました。ありがとうございました。

  3. ななしさん
    2013年12月22日 3:04 PM
  4. >差分ファイルの書き方が罠で、「sha1ハッシュ:ファイル名」と「:」で繋げて書かねばいけません。

    罠でした・・・
    すっごい助かりました!