2012/08/27

自分専用update.zipの作り方、updater-scriptの書き方



ROM焼きをやっていて困るのが、毎回自分に必要なファイルを上書きインストールしなければいけないこと。

私は以下のファイルをROM焼きの度に導入しています。

  • libsec-ril.so(/system/vendor/lib/)
  • bootanimation.zip(/system/media/)
  • apns-conf.xml(/system/etc)
  • su(/system/bin/)
  • Superuser.apk(/system/app/)
  • com.keramidas.TitaniumBackup.apk(/data/app/)


これまではROM焼きの度にダウンロードしたzipファイルにこれらのファイルを(7zipにて)上書きしてから導入していたのですが、毎回これらの作業を行うのは正直面倒になってきたので、自分用update.zipを作成しようと思ったのです。


手っ取り早い方法は、自分の端末用のCWMインストール用zipを拾ってきて、好きなように改変する方法です。(私はTitaniumBackupにて作成可能なupdate.zipを利用しました)
zipを1から作成することも出来ますが、署名のステップを踏む必要があり、少し面倒です。



以下が作成手順です。

1.導入したいファイルの収集

私の場合は、上で紹介したファイルです。個人的にSuperSUよりSuperuserの方が好きなので、Superuser用のsuバイナリを用意しています。


2.用意した自機用zipを7zipなどで開き(≠解凍)、META-INFフォルダ以外を削除


3.1.で用意したファイルをzip内に突っ込む

この場合、トップディレクトリにポンポン突っ込んでも、インストールするフォルダ階層に合わせて入れてもどっちでもOKですが、フォルダ階層に合わせる方が後々楽です。

トップディレクトリ

systemフォルダ内


4.updater-scriptを書き換える

※以下、記載ミスがあってもご容赦くださいm(_ _)m


まず、META-INFフォルダ内のファイルはupdater-script以外は触らないようにしましょう。
META-INF\com\google\android\に入っているupdater-scriptを書き換えます。ここが一番ハードルが高いです。

このupdater-scriptの記述に従って、CWMから端末に書き込まれるわけです。
  1. updater-scriptを各種エディタで開く
  2. 中身をすべて消去する
  3. 自分用にゴリゴリ書き進める

updater-scriptの記述ルールは以下の通り。
  • 端末内データのディレクトリは”/・・・”と頭に”/”をつけて、zip内データのディレクトリは頭に”/”をつけずに記入する。
  • 行ごとにセミコロン”;”で区切る

主なスクリプトの書き方は以下の通り。
  • mount("type", "loction", "mount point")
    マウントする
    ※既にbusyboxが導入されている場合、”run_program("/sbin/busybox", "mount", "mount point")”でもOK
  • delete("場所1","場所2",・・・)
    端末内のファイルを削除する
  • package_extract_dir("場所1", "場所2")
    場所1のディレクトリを場所2に展開(上書き)する
  • package_extract_file("場所1", "場所2")
    場所1のファイルを場所2に展開する
  • set_perm(uid, gid, mode, "場所1", ・・・)
    ファイルのパーミッションを設定する
  • symlink("場所1", "file2")
    場所1のシンボリックリンクを場所2に配置する
  • unmount("mount point")
    アンマウントする
    ※既にbusyboxが導入されている場合、run_program("/sbin/busybox", "umount", "mount point")でもOK
  • ui_print("hogehoge")
    CWMのzipインストール時に表示される進行内容を記述します。自分用なので、別に書かなくてもOK
  • show_progress(a,b)
    aは全工程に占める本工程の割合を、bは予想される時間を記述します。show_progressをいくつか設定することは可能(例えば/system導入でa=0.5,/data導入でa=0.5等)ですが、すべてのaを合計して”1”になるようにします。bは適当でOK
    自分用なので、冒頭にshow_progress(1.0,0);と書けば充分です。
  • set_progress(c)
    show_progressで示した工程の中で、どれだけ進んだかを記述します。1≧cで、3工程を示したければ、set_progress(0.33),set_progress(0.66),set_progress(1.00)と記述すればOK。
    自分用なので、最後にset_progress(1.00);と書けば充分です。

※show_progress,set_progressの記述はCWMの進行バーの増え方に影響します。3工程で示した今回の例の場合、set_progressを書いた所で1/3ずつバーが増えていきます。

show_progress,set_progressのわかりにくい概念図



最初はscriptを書くのが難しく感じられるかもしれません。
色々なインストール用zipのscriptを眺めながら、コピペしつつ作成するといいかもしれないですね。


最後に、私が書いたupdater-scriptを紹介します。

ui_print("Installing update.zip");
show_progress(1.0,0);
ui_print("Mounting system...");
mount("ext4", "EMMC", "/dev/block/platform/omap/omap_hsmmc.0/by-name/system", "/system");
ui_print("Deleting old files...");
delete("/system/bin/su", "/system/xbin/su", "/system/app/Superuser.apk", "/system/app/SuperSU.apk");
set_progress(0.1);
ui_print("Copying system files...");
package_extract_dir("system", "/system");
ui_print("Fixing permissions...");
set_perm(0, 0, 0644, "/system/app/Superuser.apk", "/system/etc/apns-conf.xml", "/system/media/bootanimation.zip", "/system/vendor/lib/libsec-ril.so");
set_perm(0, 0, 06755, "/system/bin/su");
ui_print("Symlinking...");
symlink("/system/bin/su", "/system/xbin/su");
ui_print("Unmounting system...");
unmount("/system");
set_progress(0.66);
ui_print("Mounting data...");
mount("ext4", "EMMC", "/dev/block/platform/omap/omap_hsmmc.0/by-name/data", "/data");
ui_print("Installing apps...");
package_extract_dir("data", "/data");
ui_print("Unmounting data...");
unmount("/data");
set_progress(1.00);
ui_print("Complete!");


 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Blogger Templates
Related Posts Plugin for WordPress, Blogger...