speg03の雑記帳

主に未来の自分のために試したことなどを記録しています

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