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 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-file と apk-file2 のサイズを比較します。以下のオプションを指定できます。
出力例(古いサイズ / 新しいサイズ / サイズの差 / パス): 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 からクラスツリーを出力します。出力内の P 、C 、M 、F はそれぞれ、パッケージ、クラス、メソッド、フィールドを表します。x 、k 、r 、d はそれぞれ削除、保存、参照、定義されたノードを表します。
出力を絞り込むには、以下のオプションを追加します。
出力例(型/状態/定義済みメソッド/参照メソッド) /byte size/name): 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 オプションを追加します。
メソッドの逆コンパイルの形式は、 |
res/ と resources.arsc に保存されているリソースの表示 | 説明 |
resources packages
|
リソース テーブルで定義されているパッケージのリストを出力します。 |
resources configs --type type [--package package] apk-file
|
指定した type の設定のリストを出力します。
type は string などのリソースタイプです。
リソース テーブルのパッケージ名を指定する場合、--package オプションを含めます。指定しない場合、最初に定義されているパッケージが使用されます。
|
resources value --config config --name name
--type type [--package package] apk-file
|
config 、name 、type で指定したリソースの値を出力します。type オプションには string などのリソースタイプを指定します。
リソース テーブルのパッケージ名を指定する場合、 |
resources names --config config --type type
[--package package] apk-file
|
設定とタイプに対応するリソース名のリストを出力します。type オプションには string などのリソースタイプを指定します。
リソース テーブルのパッケージ名を指定する場合、--package オプションを含めます。指定しない場合、最初に定義されているパッケージが使用されます。
|
resources xml --file path apk-file
|
バイナリ XML ファイルを人間が読み取れる形式で出力します。
file オプションを含めて、ファイルのパスを指定します。
|