android analyze

Analyzes the file(s) (AAB, APK, JAR, AAR) at the given location(s) and reports back all available details.

Usage

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

Options

  • --analysis=PARAM - Analysis category to filter output (basic, optimization). Supports comma-separated values (default: all).
  • -f,--format=PARAM - Output format: json, textproto. If omitted, output is formatted for human readability.
  • -h,--help - Shows the help message for the specified command.

android options:

  • --sdk=PARAM - Path to the Android SDK.
  • -v,--verbose - Enable verbose output for troubleshooting.
  • -V,--version - Print version information and exit.

Positional arguments

  • <path> - Path to the target file(s) to analyze (AAB, APK, JAR, AAR).

Description

      `android analyze` inspects one or more Android artifacts—such as
      application packages (`.aab`, `.apk`) or library archives (`.aar`,
      `.jar`)—and reports detailed build, structure, and performance
      metadata.

      ### Supported File Types

      `android analyze` supports both application packages and library
      archives:

      - **Android App Bundles (`.aab`) and APKs (`.apk`)**: Evaluates
        application-level metadata, compilation configurations, DEX
        characteristics, and optimization outputs.
      - **Android Archives (`.aar`) and Java Archives (`.jar`)**: Evaluates
        library-level metadata, DEX compilation metrics, keep rule impact,
        and bundled native components.

      ### Analysis Categories (`--analysis`)

      By default, all available analysis categories are performed. Use
      `--analysis=<category>` to filter output to specific categories
      (comma-separated).

      - **`basic`**: Basic metadata such as package name and version for
        applications:

Reports application identification details (e.g., package name, version name, and version code for applications).

  • optimization: Compiler optimizations, DEX sizes, and code-shrinking metadata:

    • For applications (.aab, .apk): Reports Android Gradle Plugin (AGP) version, uncompressed DEX size, R8 shrinking and optimization settings and percentages, R8 resource optimization status, and DEX marker metadata.
    • For libraries (.aar, .jar): Reports D8 and R8 DEX sizes, keep ratio, item collection summaries (kept vs. total classes, methods, and fields), used and unused package-wide keep rules with impact radius, blocked consumer keep rules, packaged native libraries (.so files), and warnings for detected optimization antipatterns.

      ### Output Formatting (-f, --format)

      • By default, output is printed in a human-readable summary format.
      • -f json, --format=json: Emits machine-readable JSON, suitable for programmatic parsing by scripts and CI pipelines.
      • -f textproto, --format=textproto: Emits Protobuf text format (textproto).

        Examples

        Analyze an APK with all default categories:

        android analyze app-release.apk
        

        Analyze multiple artifacts together:

        android analyze app-release.apk library.aar
        

        Analyze an AAB and output the results as JSON:

        android analyze --format=json app-release.aab
        

        Sample JSON output:

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

        Analyze a Java Archive (JAR) library with all default categories:

        android analyze library.jar
        

        Analyze an Android Archive (AAR) library filtering for the optimization category and outputting as JSON:

        android analyze --analysis=optimization -f json library.aar
        

        Sample JSON output:

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