Bescottee苦しいときは伸びてるとき、楽なときは伸びていないとき

2 apkファイルからxmlファイルを取得する方法

admin to Android SDK — Tags:  

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?niewski 
with 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/

コメントをどうぞ