Analiza los archivos (AAB, APK, JAR, AAR) en las ubicaciones dadas y devuelve todos los detalles disponibles.
Uso
android analyze [-h] [--analysis=PARAM] [--format=PARAM] <path>
Opciones
--analysis=PARAM: Es la categoría de análisis para filtrar el resultado (básico, optimización). Admite valores separados por comas (predeterminado: todos).-f,--format=PARAM: Es el formato de salida, que puede ser json o textproto. Si se omite, el resultado se formatea para que sea legible por humanos.-h,--help: Muestra el mensaje de ayuda para el comando especificado.
Opciones de android:
--sdk=PARAM: Es la ruta de acceso al SDK de Android.-v,--verbose: Habilita el resultado detallado para solucionar problemas.-V,--version: Imprime la información de la versión y sale.
Argumentos de posición
<path>: Es la ruta de acceso a los archivos de destino que se analizarán (AAB, APK, JAR, AAR).
Descripción
android analyze inspecciona uno o más artefactos de Android, como paquetes de aplicaciones (.aab, .apk) o archivos de biblioteca (.aar, .jar), y genera informes detallados de metadatos de compilación, estructura y rendimiento.
Tipos de archivos admitidos
android analyze admite paquetes de aplicaciones y archivos de bibliotecas:
- Android App Bundles (
.aab) y APK (.apk): Evalúa los metadatos a nivel de la aplicación, las configuraciones de compilación, las características de DEX y los resultados de optimización. - Archivos de Android (
.aar) y archivos de Java (.jar): Evalúa los metadatos a nivel de la biblioteca, las métricas de compilación de DEX, el impacto de las reglas de conservación y los componentes nativos empaquetados.
Categorías de análisis (--analysis)
De forma predeterminada, se realizan todas las categorías de análisis disponibles. Usa
--analysis=<category> para filtrar el resultado por categorías específicas
(separadas por comas).
basic: Metadatos básicos, como el nombre del paquete y la versión de las aplicaciones: Informa los detalles de identificación de la aplicación (p.ej., el nombre del paquete, la versión con nombre y el código de versión de las aplicaciones).optimization: Optimizaciones del compilador, tamaños de DEX y metadatos de reducción de código:- Para aplicaciones (
.aab,.apk): Informa la versión del complemento de Android para Gradle (AGP), el tamaño del DEX sin comprimir, la configuración y los porcentajes de reducción y optimización de R8, el estado de optimización de recursos de R8 y los metadatos del marcador DEX. - Para bibliotecas (
.aar,.jar): Informa los tamaños de DEX de D8 y R8, la proporción de conservación, los resúmenes de recopilación de elementos (clases, métodos y campos conservados en comparación con el total), las reglas de conservación de todo el paquete usadas y no usadas con radio de impacto, las reglas de conservación de consumidores bloqueadas, las bibliotecas nativas empaquetadas (archivos.so) y las advertencias de antipatrones de optimización detectados.
- Para aplicaciones (
Formato de salida (-f, --format)
- De forma predeterminada, el resultado se imprime en un formato de resumen legible por humanos.
-f json, --format=json: Emite un JSON legible por máquinas, adecuado para el análisis programático por parte de secuencias de comandos y canalizaciones de CI.-f textproto, --format=textproto: Emite el formato de texto de Protobuf (textproto).
Ejemplos
Analiza un APK con todas las categorías predeterminadas:
android analyze app-release.apk
Analiza varios artefactos juntos:
android analyze app-release.apk library.aar
Analiza un AAB y genera los resultados como JSON:
android analyze --format=json app-release.aab
Resultado JSON de muestra:
{
"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"
}
}
}
]
}
Analiza una biblioteca de archivo de Java (JAR) con todas las categorías predeterminadas:
android analyze library.jar
Analiza una biblioteca de Android Archive (AAR) filtrando por la categoría optimization y generando un resultado como JSON:
android analyze --analysis=optimization -f json library.aar
Resultado JSON de muestra:
{
"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"
}
]
}