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から端末に書き込まれるわけです。
- updater-scriptを各種エディタで開く
- 中身をすべて消去する
- 自分用にゴリゴリ書き進める
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!");