分析指定位置的文件(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]),并报告详细的 build、结构和性能元数据。
支持的文件类型
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"
}
]
}