smali/baksmaliでAndroidのコードを編集してみる
Xperia mini proのCyanogenMod 9.1でセルスタンバイ問題について調べたときにやったことをメモしとく。
CyanogenMod
http://download.cyanogenmod.org/?type=stable&device=mango
cm-9.1.0-mango.zipを使った。
smali/baksmali
http://code.google.com/p/smali/
smali, baksmaliとも1.4.1を使った。jarファイルと起動用スクリプトをダウンロード。
スクリプトとjarを同じディレクトリに置いておけば良いみたいだった。jarのファイル名からバージョンを消しておく。以下みたいな感じになっていたら良さそう。
$ ls baksmali baksmali.jar smali smali.jar
やったこと
framework.jarからclasses.dexを抽出する
$ unzip -d cm-9.1.0-mango cm-9.1.0-mango.zip $ cp cm-9.1.0-mango/system/framework/framework.jar . $ unzip -l framework.jar Archive: framework.jar Length Date Time Name -------- ---- ---- ---- 0 08-28-12 16:40 META-INF/ 71 08-28-12 16:40 META-INF/MANIFEST.MF 9581924 08-28-12 16:40 classes.dex 84385 04-18-12 08:48 preloaded-classes -------- ------- 9666380 4 files $ unzip framework.jar classes.dex
baksmaliでディスアセンブルする
$ baksmali -o classes classes.dex
ごにょごにょ編集
$ $EDITOR classes/com/android/internal/telephony/gsm/GsmServiceStateTracker.smali
smaliでアセンブルしなおしてframework.jarに戻す
$ smali -o classes.dex classes $ zip framework.jar classes.dex $ unzip -l framework.jar Archive: framework.jar Length Date Time Name -------- ---- ---- ---- 0 08-28-12 16:40 META-INF/ 71 08-28-12 16:40 META-INF/MANIFEST.MF 9581888 12-14-12 21:35 classes.dex 84385 04-18-12 08:48 preloaded-classes -------- ------- 9666344 4 files