Analysiert die Datei(en) (AAB, APK, JAR, AAR) an den angegebenen Speicherorten und gibt alle verfügbaren Details zurück.
Nutzung
android analyze [-h] [--analysis=PARAM] [--format=PARAM] <path>
Optionen
--analysis=PARAM: Analysekategorie zum Filtern der Ausgabe (basic, optimization). Unterstützt kommagetrennte Werte (Standard: alle).-f,--format=PARAM: Ausgabeformat: json, textproto. Wenn Sie das Feld weglassen, wird die Ausgabe für Menschen lesbar formatiert.-h,--help: Zeigt die Hilfemeldung für den angegebenen Befehl an.
Optionen für android:
--sdk=PARAM: Pfad zum Android SDK.-v,--verbose: Aktiviert die ausführliche Ausgabe zur Fehlerbehebung.-V,--version– Versionsinformationen ausgeben und beenden
Positionsargumente
<path>: Pfad zu den zu analysierenden Zieldateien (AAB, APK, JAR, AAR).
Beschreibung
android analyze prüft ein oder mehrere Android-Artefakte, z. B. Anwendungspakete (.aab, .apk) oder Bibliotheksarchive (.aar, .jar), und meldet detaillierte Build-, Struktur- und Leistungsmetadaten.
Unterstützte Dateitypen
android analyze unterstützt sowohl Anwendungspakete als auch Bibliotheksarchive:
- Android App Bundles (
.aab) und APKs (.apk): Bewertet Metadaten auf Anwendungsebene, Kompilierungskonfigurationen, DEX-Eigenschaften und Optimierungsausgaben. - Android-Archive (
.aar) und Java-Archive (.jar): Bewertet Metadaten auf Bibliotheksebene, DEX-Kompilierungsmesswerte, die Auswirkungen von Keep-Regeln und gebündelte native Komponenten.
Analysekategorien (--analysis)
Standardmäßig werden alle verfügbaren Analysekategorien ausgeführt. Verwenden Sie --analysis=<category>, um die Ausgabe nach bestimmten Kategorien (kommagetrennt) zu filtern.
basic: Grundlegende Metadaten wie Paketname und Version für Anwendungen: Meldet Details zur Anwendungsidentifikation (z.B. Paketname, Versionsname und Versionscode für Anwendungen).optimization: Compiler-Optimierungen, DEX-Größen und Metadaten zur Codekomprimierung:- Für Anwendungen (
.aab,.apk): Berichte zur Version des Android Gradle-Plug-ins (AGP), zur unkomprimierten DEX-Größe, zu den Einstellungen und Prozentsätzen für die R8-Verkleinerung und ‑Optimierung, zum Status der R8-Ressourcenoptimierung und zu DEX-Markierungsmetadaten. - Für Bibliotheken (
.aar,.jar): Berichte zu D8- und R8-DEX-Größen, Keep-Verhältnis, Zusammenfassungen der Elementsammlung (beibehaltene im Vergleich zu allen Klassen, Methoden und Feldern), verwendete und nicht verwendete paketweite Keep-Regeln mit Auswirkungsradius, blockierte Consumer-Keep-Regeln, gepackte native Bibliotheken (.so-Dateien) und Warnungen für erkannte Optimierungs-Antipatterns.
- Für Anwendungen (
Ausgabeformatierung (-f, --format)
- Standardmäßig wird die Ausgabe in einem menschenlesbaren Zusammenfassungsformat ausgegeben.
-f json, --format=json: Gibt maschinenlesbares JSON aus, das für das programmatische Parsen durch Skripts und CI-Pipelines geeignet ist.-f textproto, --format=textproto: Gibt das Protobuf-Textformat (textproto) aus.
Beispiele
APK mit allen Standardkategorien analysieren:
android analyze app-release.apk
Mehrere Artefakte zusammen analysieren:
android analyze app-release.apk library.aar
AAB analysieren und die Ergebnisse als JSON ausgeben:
android analyze --format=json app-release.aab
Beispiel für eine JSON-Ausgabe:
{
"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"
}
}
}
]
}
Analysieren Sie eine JAR-Bibliothek (Java Archive) mit allen Standardkategorien:
android analyze library.jar
Analysieren Sie eine Android-Archivbibliothek (AAR), filtern Sie nach der Kategorie optimization und geben Sie das Ergebnis als JSON aus:
android analyze --analysis=optimization -f json library.aar
Beispiel für eine JSON-Ausgabe:
{
"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"
}
]
}