android analyze

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.

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