[Android] deodexをしてみよう
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 のダウンロードは
からどうぞ。deodex のやり方も
に書いてあるので読めばバッチリです。
糸冬
というのも突き放しすぎなのでちょっと解説
とりあえず 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 処理するファイルが多い場合は面倒なのでバッチファイルを作るといいと思います。
ねむい
関連記事
- [電話] GalaxySの標準アプリでSBMのMMS
- [電話] apktoolでapkを弄り回す日々。そのいち
- [電話] XPERIA X10 mini pro 2.1でMMS
- [電話] Galaxy S GT-I9000 XXJPXでFMラジオ日本周波数対応
- [電話] XPERIA acro IS11S 3.0.1.C.3.31アップデート
- [電話] XPERIA X10 mini proアプリの日本語化
- [電話] LG Optimus 2X dexoptをなんとかしてパフォーマンス改善
- [電話] Huawei IDEOS U8150のFMラジオを日本周波数対応にできるといいな→駄目でした
- [電話] Galaxy SII GT-I9100のFMラジオを日本周波数対応にする
- apktoolでアプリのパッケージ名を変更する
コメント
3 件のコメント on [Android] deodexをしてみよう
-
[電話] Galaxy S GT-I9000 XXJPXでFMラジオ日本周波数対応 : 8796.jp管理日誌
2010年12月20日 11:19 AM
-
[m.l.k.c : v.5] » Atrix 4g Status Bar Network事業者名消去
2011年3月21日 4:32 PM
[...] 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 管理日誌 [...]
コメントする。
and oh, if you want a pic to show with your comment, go get a gravatar!




2010年11月14日 1:27 AM