2010年12月16日木曜日

AndroidのAPKのManifest.xmlの中身の秘密の知りたいの

Androidのアプリケーションはapkという拡張子がついたzipファイルとして配布される。
zipファイルなので当然、解凍したくなる。

欲望のままに解凍するとDalvik VM用にコンパイルされたdexファイルや各種のリソースファイルが展開される。

展開されたファイルは、Android SDKに含まれる各種のツールでデコンパイルすることができるらしい。

  • dexdump
  • aidl
  • aapt
上記のツールは、%Android SDK Home%\platforms\android-4\toolsとかその辺りに入ってる。
今回は、aaptというツールを使って、AndroidManifest.xmlファイルをデコンパイルしてみる。

まず、そもそもapkを解凍して得られるAndroidManifest.xmlファイルはバイナリファイルなので、テキストエディタで開いても意味不明な感じになる。

そこで、aaptを使ってxmlファイル・・・ではなく、apkファイルの中身をサクっと見てみると、AndroidManifest.xmlの内容を見ることができてしまう。
そのコマンドがこれだ・・・

aapt l -a アプリケーション.apk

ずらずらーっと(中略)

Android manifest:
N: android=http://schemas.android.com/apk/res/android
  E: manifest (line=2)
    A: android:versionCode(0x0101021b)=(type 0x10)0x1
    A: android:versionName(0x0101021c)="1.0" (Raw: "1.0")
    A: package="com.example.listview.tap" (Raw: "com.example.listview.tap")
    E: application (line=6)
      A: android:label(0x01010001)=@0x7f040001
      A: android:icon(0x01010002)=@0x7f020000
      E: activity (line=7)
        A: android:label(0x01010001)=@0x7f040001
        A: android:name(0x01010003)=".Main" (Raw: ".Main")
        E: intent-filter (line=9)
          E: action (line=10)
            A: android:name(0x01010003)
                ="android.intent.action.MAIN" (Raw: "android.intent.action.MAIN")
          E: category (line=11)
            A: android:name(0x01010003)
               ="android.intent.category.LAUNCHER" (Raw: "android.intent.category.LAUNCHER")

(※便宜上、一部改行してます)

EはおそらくElement、AはAttribute、NはNamespaceの略かと思われる。

0 件のコメント:

コメントを投稿