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 (.sofiles), and warnings for detected optimization antipatterns.
- For applications (
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"
}
]
}