android analyze

Analizza i file (AAB, APK, JAR, AAR) nelle posizioni indicate e restituisce tutti i dettagli disponibili.

Utilizzo

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

Opzioni

  • --analysis=PARAM - Categoria di analisi per filtrare l'output (basic, optimization). Supporta valori separati da virgola (valore predefinito: tutti).
  • -f,--format=PARAM - Formato di output: json, textproto. Se omesso, l'output viene formattato per la leggibilità.
  • -h,--help: mostra il messaggio di aiuto per il comando specificato.

Opzioni android:

  • --sdk=PARAM: percorso dell'SDK Android.
  • -v,--verbose: attiva l'output dettagliato per la risoluzione dei problemi.
  • -V,--version - Stampa le informazioni sulla versione ed esce.

Argomenti posizionali

  • <path>: il percorso dei file di destinazione da analizzare (AAB, APK, JAR, AAR).

Descrizione

android analyze ispeziona uno o più artefatti Android, come pacchetti di applicazioni (.aab, .apk) o archivi di librerie (.aar, .jar), e genera report dettagliati su build, struttura e metadati delle prestazioni.

Tipi di file supportati

android analyze supporta sia i pacchetti di applicazioni sia gli archivi di librerie:

  • Android App Bundle (.aab) e APK (.apk): valuta i metadati a livello di applicazione, le configurazioni di compilazione, le caratteristiche DEX e gli output di ottimizzazione.
  • Android Archives (.aar) e archivi Java (.jar): valuta i metadati a livello di libreria, le metriche di compilazione DEX, l'impatto delle regole di conservazione e i componenti nativi in bundle.

Categorie di analisi (--analysis)

Per impostazione predefinita, vengono eseguite tutte le categorie di analisi disponibili. Utilizza --analysis=<category> per filtrare l'output in base a categorie specifiche (separate da virgole).

  • basic: metadati di base come il nome del pacchetto e la versione delle applicazioni.Segnala i dettagli di identificazione dell'applicazione (ad es. nome del pacchetto, nome della versione e codice della versione per le applicazioni).

  • optimization: ottimizzazioni del compilatore, dimensioni dei file DEX e metadati di riduzione del codice

    • Per le applicazioni (.aab, .apk): segnala la versione del plug-in Android per Gradle (AGP), le dimensioni DEX non compresse, le impostazioni e le percentuali di ottimizzazione e riduzione di R8, lo stato di ottimizzazione delle risorse R8 e i metadati degli indicatori DEX.
    • Per le librerie (.aar, .jar): segnala le dimensioni DEX di D8 e R8, il rapporto di conservazione, i riepiloghi della raccolta di elementi (classi, metodi e campi conservati rispetto a quelli totali), le regole di conservazione a livello di pacchetto utilizzate e non utilizzate con raggio di impatto, le regole di conservazione dei consumer bloccate, le librerie native pacchettizzate (file .so) e gli avvisi per gli antipattern di ottimizzazione rilevati.

Formattazione dell'output (-f, --format)

  • Per impostazione predefinita, l'output viene stampato in un formato di riepilogo leggibile.
  • -f json, --format=json: genera un JSON leggibile da macchina, adatto per l'analisi programmatica da parte di script e pipeline CI.
  • -f textproto, --format=textproto: genera il formato di testo Protobuf (textproto).

Esempi

Analizza un APK con tutte le categorie predefinite:

android analyze app-release.apk

Analizza più artefatti insieme:

android analyze app-release.apk library.aar

Analizza un file AAB e genera i risultati in formato JSON:

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

Esempio di output 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"
        }
      }
    }
  ]
}

Analizza una libreria Java Archive (JAR) con tutte le categorie predefinite:

android analyze library.jar

Analizza una libreria Android ARchive (AAR) filtrando per la categoria optimization e generando l'output in formato JSON:

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

Esempio di output 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"
    }
  ]
}