android analyze

分析指定位置的檔案 (AAB、APK、JAR、AAR),並回報所有可用詳細資料。

用量

android analyze [-h] [--analysis=PARAM] [--format=PARAM] <path>

選項

  • --analysis=PARAM:用於篩選輸出內容的分析類別 (基本、最佳化)。支援逗號分隔值 (預設值:all)。
  • -f,--format=PARAM - 輸出格式:json、textproto。如果省略,輸出內容會採用人類可讀的格式。
  • -h,--help:顯示指定指令的說明訊息。

android 選項:

  • --sdk=PARAM - Android SDK 的路徑。
  • -v,--verbose:啟用詳細輸出功能,以便排解問題。
  • -V,--version:輸出版本資訊並結束。

位置引數

  • <path> - 要分析的目標檔案路徑 (AAB、APK、JAR、AAR)。

說明

android analyze 會檢查一或多個 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

分析 Android ARchive (AAR) 程式庫,篩選 optimization 類別,並輸出為 JSON:

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"
    }
  ]
}