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.
- Per le applicazioni (
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"
}
]
}