apkanalyzer

APK Analyzer のコマンドライン版では、ビルドプロセスの完了後に APK の構成をすぐに分析できます。また、2 つの APK の差分を比較できます。APK Analyzer を使うと、アプリ内の DEX ファイルとリソースに関する問題のデバッグに要する時間を短縮し、APK のサイズも削減できます。

apkanalyzer は、Android SDK コマンドライン ツール パッケージ(android_sdk/cmdline-tools/version/bin/apkanalyzer)に含まれています。または Android Studio 内で APK Analyzer ツールにアクセスすることもできます。詳しくは APK Analyzer を使ったビルドの分析をご覧ください。

構文

apkanalyzer の構文は次のとおりです。

apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]

subject は分析対象であり、APK の全体または一部を対象にすることができます。指定するのは以下のいずれかです。

  • apk: アプリ ID、バージョン コード、バージョン名などの APK ファイルの属性を分析します。
  • files: APK ファイル内のファイルを分析します。
  • manifest: APK ファイル内のマニフェストの内容を分析します。
  • dex: APK ファイル内の DEX ファイルを分析します。
  • resources: テキスト、画像、文字列の各リソースを表示します。

verb には、subject で指定した分析対象について知りたいことを指定します。subject、verb、および各オプションについては、コマンドに関する次のセクションをご覧ください。

コマンドには必ず APK ファイルを指定する必要があります。2 つ目の APK を指定する必要があるのは、apk compare コマンドのみです。

曖昧にならない限り、どのオプションも短くすることができます。たとえば、--human-readable グローバル オプションは -h のように短縮できます。

次の例では、apk(subject)を分析して file-size(verb)を取得し、そのファイルサイズを人間が読み取れる形式(-h オプション)で出力します。

apkanalyzer -h apk file-size myapk.apk

コマンド

以下のコマンドの説明では subject 別に整理し、各 subject で指定できる verb とオプションの組み合わせを列挙しています。

APK ファイルの属性の表示 説明
apk summary apk-file アプリ ID、バージョン コード、バージョン名を出力します。

出力例:

com.myapp 5 1.1-beta
apk file-size apk-file APK の合計ファイルサイズを出力します。
apk download-size apk-file APK のダウンロード サイズの見積もりを出力します。
apk features [--not-required] apk-file APK が使用する機能のうち Play ストアでのフィルタリングをトリガーする機能を出力します。--not-required オプションを追加すると、必須ではないとマークされた機能が出力に含まれます。

出力例:

android.hardware.type.watch
android.hardware.microphone implied:
    requested android.permission.RECORD_AUDIO permission
apk compare [options] apk-file apk-file2 apk-fileapk-file2 のサイズを比較します。以下のオプションを指定できます。
  • --different-only: 違いがあるディレクトリとファイルを出力します。
  • --files-only: ディレクトリ エントリを出力しません。
  • --patch-size: そのまま比較した結果ではなく、ファイルごとのパッチの推定値を表示します。

出力例(古いサイズ / 新しいサイズ / サイズの差 / パス)

39086736 48855615 9768879 /
10678448 11039232 360784 /classes.dex
18968956 18968956 0 /lib/
110576 110100 -476 /AndroidManifest.xml
...
APK ファイル システムの表示 説明
files list apk-file APK 内のすべてのファイルのリストを表示します。

出力例:

/
/classes2.dex
/classes.dex
/assets/
/assets/asset.data
/AndroidManifest.xml
/resources.arsc
/res/
...
files cat --file path apk-file ファイルの内容を出力します。--file path オプションを使用して、APK 内のパス(--file /AndroidManifest.xml など)を指定する必要があります。
マニフェストの情報の表示 説明
manifest print apk-file APK のマニフェストを XML 形式で出力します。
manifest application-id apk-file アプリ ID の値を出力します。
manifest version-name apk-file バージョン名の値を出力します。
manifest version-code apk-file バージョン コードの値を出力します。
manifest min-sdk apk-file SDK の最小バージョンを出力します。
manifest target-sdk apk-file SDK のターゲット バージョンを出力します。
manifest permissions apk-file 権限のリストを出力します。
manifest debuggable apk-file アプリがデバッグ可能かどうかを出力します。
DEX ファイルの情報へのアクセス 説明
dex list apk-file APK 内の DEX ファイルのリストを出力します。
dex references [--files path] [--files path2] apk-file 指定した DEX ファイルのメソッドの参照数を出力します。 デフォルトではすべての DEX ファイルが対象です。一部のファイルを対象にするには、--files オプションで、対象にするファイルを指定します。

出力例:

classes.dex 59598
classes2.dex 8042
dex packages [option1 option2 ...] apk-file DEX からクラスツリーを出力します。出力内の PCMF はそれぞれ、パッケージ、クラス、メソッド、フィールドを表します。xkrd はそれぞれ削除、保存、参照、定義されたノードを表します。

出力を絞り込むには、以下のオプションを追加します。

  • --defined-only: APK で定義されたクラスのみ出力します。
  • --files: 出力する DEX ファイルの名前を指定します。デフォルトは、すべての DEX ファイルです。
  • --proguard-folder file: マッピングを検索する Proguard 出力フォルダを指定します。
  • --proguard-mappings file: Proguard マッピング ファイルを指定します。
  • --proguard-seeds file: Proguard シードファイルを指定します。
  • --proguard-usages file: Proguard 使用状況ファイルを指定します。
  • --show-removed: Proguard によって削除されたクラスとメンバーを表示します。

出力例(タイプ / 状態 / 定義されたメソッド数 / 参照されたメソッド数 / バイトサイズ / 名前):

P d 1 1 85 g
P d 1 1 85 g.a
C d 1 1 85 g.a.a
M d 1 1 45 g.a.a java.lang.Object get()
C r 0 1 40 byte[]
M r 0 1 40 byte[] java.lang.Object clone()
dex code --class class [--method method] クラスまたはメソッドのバイトコードを smali 形式で出力します。クラス名は必須です。逆コンパイルのために完全修飾クラス名が出力されます。逆コンパイルするメソッドを指定するには、--method オプションを追加します。

メソッドの逆コンパイルの形式は、name(params)returnType(例: someMethod(Ljava/lang/String;I)V)です。

res/ と resources.arsc に保存されているリソースの表示 説明
resources packages リソース テーブルで定義されているパッケージのリストを出力します。
resources configs --type type [--package package] apk-file 指定した type の設定のリストを出力します。 typestring などのリソースタイプです。 リソース テーブルのパッケージ名を指定する場合、--package オプションを含めます。指定しない場合、最初に定義されているパッケージが使用されます。
resources value --config config --name name --type type [--package package] apk-file confignametype で指定したリソースの値を出力します。type オプションには string などのリソースタイプを指定します。

リソース テーブルのパッケージ名を指定する場合、--package オプションを含めます。指定しない場合、最初に定義されているパッケージが使用されます。

resources names --config config --type type [--package package] apk-file 設定とタイプに対応するリソース名のリストを出力します。type オプションには string などのリソースタイプを指定します。 リソース テーブルのパッケージ名を指定する場合、--package オプションを含めます。指定しない場合、最初に定義されているパッケージが使用されます。
resources xml --file path apk-file バイナリ XML ファイルを人間が読み取れる形式で出力します。 file オプションを含めて、ファイルのパスを指定します。