Android-Analyse

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.

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