それなりに安全に Galaxy S で framework-res.apk を書き換える方法

framework-res.apk を書き換えるときは、update.zip を使うか、起動中に書き換える方法が一般的です。
ですが、元の framework-res.apk を削除・置き換えするのは、いくらバックアップを取っているとはいえ怖かったりします。
特に起動中に framework-res.apk を削除すると、だんだん動作が不安定になってきますので、迅速に新しい framework-res.apk をコピーする必要があるなど、難易度が高めです。


というわけで、間違いなくバックアップを取りつつ安全に framework-res.apk を書き換える手段です。
それなりに安全に、とは書いていますが、あくまでやっていることが理解できる場合のみです。
すべて自己責任でお願いします。


さて、書き換えたい framework-res のファイル名を、ここでは framework-res.apk.customized とします。
まず、 リカバリモードに突入します。
http://d.hatena.ne.jp/cryks/20101104/1288826791 を参考に、root を取得してください。
リカバリモードでは /system は rw でマウントされていますので、再マウントの必要はありません。


> adb push framework-res.apk.customized /tmp
> adb shell
# cp /tmp/framework-res.apk.customized /system/framework
# cd /system/framework
# mv framework-res.apk framework-res.apk.original
# ln -s framework-res.apk.customized framework-res.apk


要はリカバリモードで作業することで framework-res の実行は関係なくなり、さらに元のファイルは同じ階層に保管しておき、あくまでシンボリックリンクで指し示す先を変更するといった感じです。
もし起動しなくなっても、リカバリモードに入り root を取り、


# cd /system/framework
# rm framework-res.apk
# ln -s framework-res.apk.original framework-res.apk


とするだけで復旧ができます。


(2010/12/31 追記)
この方法だと /system の空き容量がマッハになるので、/data などに移してリンクしたほうが空き容量的には幸せです。
ただし factory reset したときが悲惨です。
どちらも自己責任で。
Galaxy S で /system の容量が足りないとお嘆きのあなたへ