アップデートファイルに含まれている ファイル名.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 -lFilenames 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,957,312のboot78.imgを生成することができました。ありがとうございました。
>差分ファイルの書き方が罠で、「sha1ハッシュ:ファイル名」と「:」で繋げて書かねばいけません。
罠でした・・・
すっごい助かりました!