[Android] deodexをしてみよう

2010年11月11日 by
カテゴリ: Android 

deodexの必要性とか説明とかはひとまず置いておいて

hoge.apk からプログラム部分の classes.dex が hoge.odex として飛び出してしまったのを hoge.apk に戻しましょうというおはなし。

対象のファイルが存在する端末が手元にある場合は xUltimate がラクチン

http://www.droidforums.net/forum/xeudoxus/47283-release-xultimate.html

USBデバッグ状態で接続した端末から /system/app/ と /system/framework/ から apk と jar を引っ張り出して deodex してくれます。

端末からファイルを持ってくるところから deodex まで一括してやってくれるのでうまくいけば誰でも簡単にできると思います。

糸冬

でも人生そんなラクチンなことだけ覚えたんじゃいけませんよ。裏で動いてる手順の元というか原理というのもある程度理解しておかないとうまくいかなかったときに対処ができません。

ということで手動で deodex ですが、基本的には散々やってきた apktool の元になっている smali と baksmali を使います。jar ファイルとシェルスクリプトの組み合わせですが、Windowsではなかなか使いにくいツールです。Cygwin でも入れておいてください。

例えば C:\deodex\ に smali とか置いたら cd /cygdrive/c/deodex/ で移動して ./smali hoge.apk みたいに実行するのが Cygwin 式。

そうそう、smali と bksmali のダウンロードは

http://code.google.com/p/smali/

からどうぞ。deodex のやり方も

http://code.google.com/p/smali/wiki/DeodexInstructions

に書いてあるので読めばバッチリです。

糸冬

というのも突き放しすぎなのでちょっと解説

とりあえず JDK 入れといて

deodex といいますが、 odex をいきなり dex に変換してるわけではなく baksmali というツールで逆アセンブルのようなことをしてソースファイルっぽいものにしてから smali というツールでコンパイルして dex ファイルを作っているのです。apktool で apk ファイルを分解してできる smali フォルダを作るのと一緒。

baksmali はダウンロードしてきた baksmali-バージョン番号.jar と一緒に使います。jar の方は baksmali.jar に改名して baksmali と同じフォルダに置きましょう。ちなみに smali も同じように改名して smali.jar にしておかないと使えません。

さて、準備ができたことにして実際の事例

Q. なぜか手元に JapaneseIME.apk と JapaneseIME.odex となぜか framework フォルダの中身があるのですが、どうすればいいのでしょう

簡単なのは framework フォルダに JapaneseIME.odex を突っ込んでそこで

baksmali –x JapaneseIME.odex

と実行するだけで out フォルダにフォルダがいくつかできてその中に *.smali ファイルがたくさんできていることでしょう。

別のフォルダに framework 関連のファイルがある場合は –d オプションなどを指定してみるのもよいでしょう。何か足りないと言われたら -c オプションを追加して

baksmali -d ../framework -c :com.sonyericsson.suquashi.jar -x Conversations.odex

みたいに追加してあげるとできたりします。frameworkフォルダの中身は端末から持ってきたママで良いようです。

そして

smali –o classes.dex out

とすれば deodex された classes.dex ファイルが出来上がります。コレを元の apk に追加してやれば今度こそ本当に終了。

deodex  処理するファイルが多い場合は面倒なのでバッチファイルを作るといいと思います。

ねむい

コメント

3 件のコメント on [Android] deodexをしてみよう

    […] This post was mentioned on Twitter by cha2maru, なかみちと. なかみちと said: [Android] deodexをしてみよう : 8796.jp管理日誌 http://t.co/DHqPytK via @nakamichito […]

    […] deodex 化と apktool をそこそこ使えること。 apktool d FMRadio.apk […]

    […] 8796.jp 管理日誌 […]