1. アプリのapkファイルはもらえる
2. アプリのAndroidManifest.xmlはもらえない
3. しかしAndroidManifest.xmlが必要だ
という状況に陥った。
パートナーさんから、「こういうのあるんで使ってみては?」と言われたので
あるツールを利用したところ、なるほどどうして使えるではないか。
備忘録としてここに記載しておきます。
が、リバースエンジニアリングの一種なので取り扱いは慎重に。
じゃないと最悪変な髪型の人と関係を持つ可能性も。

冗談です。
さて、apkはjarで解凍することが出来ます。
解凍するとAndroidManifest.xmlもきちんとそこに存在します。
が、しかしこれ、バイナリデータとなっておりテキストエディタでは内容を読み取れません。
上で書いた通り、パートナーさんに紹介してもらったツールの登場です。
AXMLPrinter2.jar
というツール。
「Prints XML document from binary XML file」
infoseek先生に意味を尋ねた
「XMLが2進のXMLファイルから記録する印刷」
日本語でおk
茶番はさて置き、以下に手順をば。
※ jdkは6系を使っており、pathも設定済みとします、あたりまえだけど。
■手順1. AXMLPrinter2.jarをダウンロードする
AXMLPrinter2.jarはGoogle Codeで公開されています。
http://code.google.com/p/android4me/downloads/detail?name=AXMLPrinter2.jar
ここからダウンロード可能です。
ダウンロードしたら、適宜ファイルを配置しておきます。
ここではC:\tmp にjarを配置しておきます。
■手順2. バイナリになったxmlを取得する
apkからAndroidManifest.xmlを取得します。
jarコマンドを使ってapkを解凍します。(私はLhaplusで解凍しましたが。)
解凍したAndroidManifest.xmlはバイナリ形式のはずです。
これをC:\tmpに配置します。
■手順3. AXMLPrinter2.jarの実行
バイナリのxmlをテキストデータに変換します。
C:\tmp に移動し、以下のコマンドを実行します。
C:\tmp>java -jar AXMLPrinter2.jar AndroidManifest.xml > hoge.txt
これで C:\tmp\hoge.txt にAndroidManifest.xmlのテキスト形式の内容が出力されているはずです。
元データとバイナリから変換後のデータとで比較もしてみた。
非常にシンプルな自作アプリのAndroidManifest.xmlを使っています。
元データ↓
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="jp.gr.java_conf.smd877.CP500103"
android:versionCode="4"
android:versionName="4" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.CAMERA"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".CP500103Activity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
バイナリから変換後のデータ↓
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="4"
android:versionName="4"
package="jp.gr.java_conf.smd877.CP500103"
>
<uses-sdk
android:minSdkVersion="8"
>
</uses-sdk>
<uses-permission
android:name="android.permission.CAMERA"
>
</uses-permission>
<application
android:label="@7F040001"
android:icon="@7F020000"
>
<activity
android:label="@7F040001"
android:name=".CP500103Activity"
>
<intent-filter
>
<action
android:name="android.intent.action.MAIN"
>
</action>
<category
android:name="android.intent.category.LAUNCHER"
>
</category>
</intent-filter>
</activity>
</application>
</manifest>
一部ラベル系のパラメータは変換されたものになっているけど、読み解く分には問題ない感じす。
















