apkファイルからxmlファイルを取得
apkファイルの中から layout の xml ファイルを見たくなったり、アニメーションのタイミングを見るために anim/hoge.xml を見たくなったり、文字列の中身を見るためにstring.xml を見たくなったりすることがあると思います。apkはzipファイルなのでファイル名を変更して解凍するとxmlファイルを取得することができますが、apkの中にある xml は高速にアクセスしたり、サイズを小さくするために Binary XML という方式で保存されているためです。
android-apktool というツールを利用すれば、この Binary XML を可読性のある Text XML に変換してくれます。
使い方
apktoolのウェブサイトを開いたら、apktool1.5.2.tar.bz2と各プラットフォームごとのファイルをダウンロードして解凍してください。あとは、apkをデコンパイルする以下のコマンドで実行できます。
java -jar apktool.jar d foo.apk
fooフォルダが作成されて、その中に見慣れたフォルダ構成で書き出されます。
なお、google playに公開されているアプリのapkのデコンパイルはアプリの利用規約で禁止されていることが多いのでやめておいたほうが無難です。
apk-tool のオプション
デコンパイル以外にもいくつか機能があります。以下が引数なしで実行したときにヘルプ表示です。自分の備忘として書いておきます。
C:\dev\apk-tool>java -jar apktool.jar Apktool v1.5.2 - a tool for reengineering Android apk files Copyright 2010 Ryszard Wi?niewskiwith smali v1.4.1, and baksmali v1.4.1 Updated by @iBotPeaches Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0) Usage: apktool [-q|--quiet OR -v|--verbose] COMMAND [...] COMMANDs are: d[ecode] [OPTS] [ ] Decode to . OPTS: -s, --no-src Do not decode sources. -r, --no-res Do not decode resources. -d, --debug Decode in debug mode. Check project page for more info. -b, --no-debug-info Baksmali -- don't write out debug info (.local, .param, .line, etc.) -f, --force Force delete destination directory. -t , --frame-tag Try to use framework files tagged by . --frame-path Use the specified directory for framework files --keep-broken-res Use if there was an error and some resources were dropped, e.g.: "Invalid config flags detected. Dropping resources", but you want to decode them anyway, even with errors. You will have to fix them manually before building. b[uild] [OPTS] [ ] [ ] Build an apk from already decoded application located in . It will automatically detect, whether files was changed and perform needed steps only. If you omit then current directory will be used. If you omit then /dist/ will be used. OPTS: -f, --force-all Skip changes detection and build all files. -d, --debug Build in debug mode. Check project page for more info. -a, --aapt Loads aapt from specified location. if|install-framework [ ] --frame-path [ ] Install framework file to your system. For additional info, see: http://code.google.com/p/android-apktool/ For smali/baksmali info, see: http://code.google.com/p/smali/