2012/03/28

deodexしてみる

よく分かっていないけれど、やってみたらできた。
再起動やらなにやら入れ込みたい場合はやっておくと弄りやすくなる。


※追記
2011年XPERIA端末はdeodexするは必要ない。
ただ、ICSはなんとなくodex化されてるっぽいから憶えとく。

【必要なもの】
Java開発環境 → ここ
Android SDK → ここ
smaliとbaksmali → ここ
7-zip(コマンドライン) → ここ
ROMからsystem/framework下全部とsystem/app下全部

1)端末の設定→アプリケーション→開発→USBデバッグにチェック入れる。

2)PCと端末をUSB接続

3)PCの任意の場所に作業フォルダ作成(例:C:\deodex)

4)1の中にsmaliとbaksmaliと7za.exeを入れる。

5)コマンドプロンプト起動して1に移動
cd C:\deodex

6)adbコマンドでsystem/frameworkとsystem/appを引っこ抜く。
adb pull /system/framework system/framework
adb pull /sysytem/app system/app

7)deodexしたいodexを1直下に配置(C:\deodex\*****.odex)

8)baksmaliでodexを解体(例としてSettings.odex)
java -jar baksmali.jar -d system/framework -x Settings.odex -o Settings
これで作業フォルダにSettingsフォルダが作られ、その中にsmaliファイルが展開される。
※Bluetooth.odexはクラスパス(javax.obex.odex)を指定する必要あり
java -jar baksmali.jar -c :javax.obex.odex -d system/framework -x Bluetooth.odex -o Bluetooth
※android.policy.odexとframework.odexもクラスパス(core-junit.odex)の指定が必要
java -jar baksmali.jar -c :core-junit.odex -d system/framework -x android.policy.odex -o android.policy
java -jar baksmali.jar -c :core-junit.odex -d system/framework -x framework.odex -o framework

9)5で展開したsmaliファイルを固める(dex化)
java -jar smali.jar Settings -o classes.dex
これで5で生成したsmaliファイルがclasses.dexとしてアセンブルされる。

10)6でできたclasses.dexをapkに追加
7za a -tzip Settings.apk classes.dex
これでapkに追加される。
※場合によっては、再署名する必要あり?

おまけ
deodexすればandorid.policy.jarなど解体したい場合、
わざわざclasses.dexを解凍してbaksmali.jarを使わなくてすむ。

いるもの
7-zip → ここ から32ビット用もしくは64ビット用をDLしてインストール
apktool → ここ
apktool-install-windows-r04-brut1.tar.bz2とapktool1.4.3.tar.bz2をDLして7-zipで解凍
解凍したものをPCの任意の場所(例: C:\apktool)にフォルダ作成して入れる。
パスを通しておく。

1)PCの任意の場所に作業フォルダを作る。(例: C:\disassemble)

2)1の中に逆アセンブルしたいjarファイルを入れる。

3)コマンドプロント起動して1に移動
cd C:\disassemble

4)解体(例としてandroid.policy.jar)
apktool d android.policy.jar
これで作業フォルダにandroid.policy.jar.outフォルダが作られ、smaliファイルが展開される。

5)smaliファイル編集したら固める。
apktool b android.policy.jar.out
これでandroid.policy.jar.outの中にdistフォルダが作られ編集されたandroid.policy.jarが作られる。
が、このままではダメ

6)2のjarファイルを7-zipで開き、5のjarファイルも7-zipで開く。

7)5のclasses.dexを2に移動
これで終わり

※2012/6/25追記
XPERIA Sの新ファーム 6.1.A.0.452を入手したら、ことごとくodex・・・
これからodexが当たり前になるのかと思って、確認がてらクラスパスを調べる。
1) android.policy.odexとframework.odex ← core-junit.odexがクラスパス
2) qcrilhook.odex ← qcsemcserviceif.odexがクラスパス
3) semcrilextension.odex ← qcrilhook.odexがクラスパス

java -jar baksmali.jar -d system/framework -x core-junit.odex -o core-junit
java -jar smali.jar core-junit -o classes.dex
7za a -tzip core-junit.jar classes.dex

java -jar baksmali.jar -c :core-junit.jar -d system/framework -x framework.odex -o framework
java -jar smali.jar framework -o classes.dex
7za a -tzip framework.jar classes.dex

java -jar baksmali.jar -c :core-junit.jar -d system/framework -x android.policy.jar -o android.policy
java -jar -smali.jar android.policy -o classes.dex
7za a -tzip android.policy.jar classes.dex

java -jar baksmali.jar -d system/framework -x qcsemcserviceif.odex -o qcsemcservice
java -jar smali.jar qcsemcservice -o classes.dex
7za a -tzip qcsemcservice.jar classes.dex

java -jar baksmali.jar -c :qcsemcservicife.jar -d system/framework -x qcrilhook.odex -o qcrilhook
java -jar smali.jar qcrilhook -o classes.dex
7za a -tzip qcrilhook.jar classes.dex

java -jar baksmali.jar -c :qcrilhook.jar -d system/framework -x semcrilextension.odex -o semcrilextension
java -jar smali.jar semcrilextension -o classes.dex
7za a -tzip semcrilextension.jar classes.dex

0 件のコメント:

コメントを投稿