指定された場所にあるファイル(AAB、APK、JAR、AAR)を分析し、利用可能なすべての詳細を報告します。
使用方法
android analyze [-h] [--analysis=PARAM] [--format=PARAM] <path>
オプション
--analysis=PARAM- 出力をフィルタする分析カテゴリ(basic、optimization)。カンマ区切り値をサポートします(デフォルト: すべて)。-f,--format=PARAM- 出力形式: json、textproto。省略すると、出力は人が読める形式になります。-h,--help- 指定したコマンドのヘルプ メッセージを表示します。
android のオプション:
--sdk=PARAM- Android SDK へのパス。-v,--verbose- トラブルシューティング用の詳細出力を有効にします。-V,--version- バージョン情報を出力して終了します。
位置引数
<path>- 分析対象のファイル(AAB、APK、JAR、AAR)のパス。
説明
android analyze は、1 つ以上の Android アーティファクト(アプリケーション パッケージ(.aab、.apk)やライブラリ アーカイブ(.aar、.jar)など)を検査し、ビルド、構造、パフォーマンスに関する詳細なメタデータをレポートします。
サポートされているファイル形式
android analyze は、アプリケーション パッケージとライブラリ アーカイブの両方をサポートしています。
- Android App Bundle(
.aab)と APK(.apk): アプリケーション レベルのメタデータ、コンパイル構成、DEX 特性、最適化出力を評価します。 - Android アーカイブ(
.aar)と Java アーカイブ(.jar): ライブラリレベルのメタデータ、DEX コンパイル指標、キープルールの影響、バンドルされたネイティブ コンポーネントを評価します。
分析カテゴリ(--analysis)
デフォルトでは、利用可能なすべての分析カテゴリが実行されます。--analysis=<category> を使用して、出力を特定のカテゴリ(カンマ区切り)にフィルタします。
basic: アプリのパッケージ名やバージョンなどの基本的なメタデータ。アプリの識別情報(アプリのパッケージ名、バージョン名、バージョン コードなど)を報告します。optimization: コンパイラの最適化、DEX サイズ、コード圧縮のメタデータ:- アプリケーション(
.aab、.apk)の場合: Android Gradle プラグイン(AGP)のバージョン、非圧縮 DEX サイズ、R8 の圧縮と最適化の設定と割合、R8 のリソース最適化ステータス、DEX マーカー メタデータを報告します。 - ライブラリ(
.aar、.jar)の場合: D8 と R8 の DEX サイズ、保持率、アイテム コレクションの概要(保持されたクラス、メソッド、フィールドと合計クラス、メソッド、フィールド)、使用済みおよび未使用のパッケージ全体の保持ルールと影響範囲、ブロックされたコンシューマー保持ルール、パッケージ化されたネイティブ ライブラリ(.soファイル)、検出された最適化アンチパターンの警告を報告します。
- アプリケーション(
出力形式(-f, --format)
- デフォルトでは、出力は人が読める形式のサマリー形式で出力されます。
-f json, --format=json: 機械で読み取り可能な JSON を出力します。これは、スクリプトや CI パイプラインによるプログラムによる解析に適しています。-f textproto, --format=textproto: Protobuf テキスト形式(textproto)を出力します。
例
すべてのデフォルト カテゴリで APK を分析します。
android analyze app-release.apk
複数のアーティファクトをまとめて分析する。
android analyze app-release.apk library.aar
AAB を分析し、結果を JSON 形式で出力します。
android analyze --format=json app-release.aab
JSON 出力の例:
{
"results": [
{
"optimization": {
"bundleAnalysisResult": {
"agpVersion": "9.3.2",
"r8Json": {
"version": "9.3.16",
"options": {
"isRepackageClassesEnabled": true,
"isProguardCompatibilityModeEnabled": false
},
"stats": {
"shrinkingRatio": 0.9606,
"optimizationRatio": 0.9551,
"obfuscationRatio": 0.9622
},
"resourceOptimizationStatus": "R8_RESOURCE_OPTIMIZATION_STATUS_DISABLED",
"r8DexChecksumStatus": "EXACT_MATCH"
},
"r8DexMarkerMetadata": {
"r8Enabled": true,
"d8Enabled": false,
"fullModeEnabled": true
},
"mappingObfuscationRatio": 0.97108626,
"dexHeuristicObfuscationRatio": 0.97108626,
"uncompressedDexSizeBytes": "6198152"
}
},
"artifactPath": "app-release.aab",
"basic": {
"appInfo": {
"packageName": "com.google.samples.apps.nowinandroid",
"versionName": "1.0",
"versionCode": "1"
}
}
}
]
}
すべてのデフォルト カテゴリを使用して Java アーカイブ(JAR)ライブラリを分析します。
android analyze library.jar
optimization カテゴリをフィルタリングして JSON として出力する Android アーカイブ(AAR)ライブラリを分析します。
android analyze --analysis=optimization -f json library.aar
JSON 出力の例:
{
"results": [
{
"optimization": {
"libraryAnalysisResult": {
"dex": {
"d8CompileResult": {
"dexSizeBytes": 2117400
},
"r8CompileResult": {
"dexSizeBytes": 1100,
"configuration": {
"keepRules": [
{
"source": "-keep class com.example.ExampleClass_* {\n static *** builder();\n}",
"keptItemCount": 2
},
{
"source": "-keep class com.example.SomeClass {\n public static *** SDK_ROOT_CLASS_NAME;\n}",
"keptItemCount": 2
}
]
},
"classes": {
"itemCount": 3437,
"keptItemCount": 2,
"noObfuscationCount": 2,
"noOptimizationCount": 2,
"noShrinkingCount": 2
},
"fields": {
"itemCount": 9835,
"keptItemCount": 1,
"noObfuscationCount": 1,
"noOptimizationCount": 1,
"noShrinkingCount": 1
},
"methods": {
"itemCount": 16333,
"keptItemCount": 1,
"noObfuscationCount": 1,
"noOptimizationCount": 1,
"noShrinkingCount": 1
}
},
"validateConsumerKeepRulesResult": {}
},
"r8Version": "9.5.17-dev",
"version": "kg=1_r8=9.5.17-dev"
}
},
"artifactPath": "library.aar"
}
]
}