Posted at

smali/baksmaliでAndroidのコードを編集してみる

More than 5 years have passed since last update.

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