DEX-Codeoptimierung

Die DEX-Codeoptimierung ist ein Android Vitals-Ergebnis, mit dem Sie die Kompilierungsqualität, Größe und Leistung Ihrer App im Blick behalten und verbessern können. Wenn Sie Ihren Code mit R8 oder alternativen Tools (z. B. mit ProGuard-kompatiblen Optimierern oder sekundären DEX-Nachbearbeitern) optimieren und verschleiern, wird die DEX-Größe Ihrer App reduziert, die Laufzeitleistung verbessert und der Arbeitsspeicherverbrauch minimiert.

DEX-Dateien (Dalvik Executable) enthalten den kompilierten Code, der zum Ausführen Ihrer App verwendet wird. Dazu gehören in der Regel Java- und Kotlin-Code, im Gegensatz zu kompiliertem C++-Code oder .so Dateien.

Android Vitals meldet DEX-Codeoptimierungs-Messwerte für alle Apps und Spiele, erzwingt aber nur Grenzwerte für Apps und Spiele, die bestimmte Größenanforderungen erfüllen.

Problem ermitteln

Android Vitals kann Sie benachrichtigen, wenn die DEX-Codeoptimierungsstufen Ihrer App niedrig sind. Dazu gehören Verschleierung, Verkleinerung und Optimierung für Apps und Spiele, die R8 verwenden. Bei Apps, die R8 nicht verwenden, versucht Android Vitals, die Optimierungs-, Verkleinerungs- und Verschleierungsraten zu prüfen, greift aber bei Bedarf auf Verschleierungsheuristiken als Proxy zurück.

Optimierungsstatus im Blick behalten

Android Vitals kann die Leistung Ihrer App verbessern, indem Sie über die Play Console benachrichtigt werden, wenn Ihre App die Mindestprozentsätze für die Codeoptimierung nicht erfüllt. Detaillierte Definitionen von Verkleinerung, Optimierung und Verschleierung finden Sie unter R8 Configuration Analyzer verwenden.

Bei Apps, die mit dem neuesten Patch von AGP Version 8.10 oder höher erstellt wurden, werden diese Prozentsätze aus der enthaltenen r8.json-Datei abgerufen.

Bei niedrigeren AGP-Versionen oder wenn die r8.json-Datei nicht enthalten ist, werden die Prozentsätze aus der mapping.txt-Datei berechnet, falls sie enthalten ist, oder mit DEX-Heuristiken, wenn die Zuordnungsdatei nicht verfügbar ist.

Bei Apps, die mit einem alternativen Codeoptimierer optimiert wurden, führt Android Vitals eine Analyse durch, um den Prozentsatz der Klassen, Methoden und Felder zu schätzen, die im App Bundle verschleiert sind.

Mindestgrößen für die DEX-Gesamtgröße

Android Vitals berechnet zwar Codeoptimierungs-Messwerte für alle Apps, Sie erhalten aber nur Benachrichtigungen, wenn Ihr App Bundle die folgenden Anforderungen an die DEX-Gesamtgröße erfüllt:

  • Apps: Das Bundle enthält mindestens 10 MB DEX-Code (gemessen als unkomprimierte Größe).
  • Spiele: Das Bundle enthält mindestens 50 MB DEX-Code (gemessen als unkomprimierte Größe).

Android Vitals zeigt die DEX-Größe Ihrer App an. Sie können sie aber auch lokal über die Befehlszeile messen:

  unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

R8-Codeoptimierung lokal messen

Wenn Ihre App mit R8 optimiert wird, können Sie die Optimierung, Verschleierung und Verkleinerung Ihres App Bundles mit dem R8 Configuration Analyzer messen. Der Bericht des R8 Configuration Analyzer ist auch im R8 Analyzer Skill enthalten. Der Bericht kann Ihnen zwar helfen, zu verstehen, wie sich Ihre Keep-Regeln auf Ihre Optimierungs-, Verkleinerungs- und Verschleierungswerte auswirken, die Prozentsätze im Bericht stimmen aber nicht mit den Werten in Android Vitals überein, da diese Prozentsätze vor den Optimierungen berechnet werden.

Wenn Sie die genauen Metadaten prüfen möchten, die Android Vitals zur Berechnung Ihrer Werte verwendet, extrahieren Sie die Datei r8.json aus Ihrem App Bundle:

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json

Problem beheben

Wenn Sie niedrige DEX-Codeoptimierungswerte beheben möchten, sehen Sie sich die Empfehlungen basierend auf Ihrem Build-System und Optimierer an:

Android-Gradle-Plug-in und R8

Informationen zum Verbessern Ihrer R8-DEX-Codeoptimierungswerte finden Sie unter R8-Optimierung verbessern. Sie können auch den R8 Analyzer Skill verwenden, um weitere Informationen zum Optimieren der Keep-Regeln Ihrer App zu erhalten.

Nicht-R8-Build-Systeme und DEX-Nachbearbeiter

Wenn Ihre Build-Pipeline benutzerdefinierte Build-Tools oder sekundäre DEX-Nachbearbeiter verwendet, führen Sie die folgenden Schritte aus, um die Optimierung Ihrer App zu verbessern:

  • Öffnen Sie Ihr App Bundle in Android Studio und sehen Sie es sich im APK Analyzer an.
  • Wählen Sie alle der .dex Dateien aus.
  • Achten Sie genau auf die Dateien mit der größten Größe, wenn Sie die "Namen entschleiern" Schaltfläche aktivieren. Hinweis: Dazu müssen Sie eine mapping.txt Datei hochladen. Wenn einige dieser Dateien auch nach der Verschleierung groß bleiben, sind sie wahrscheinlich von paketweiten Keep-Regeln betroffen.
  • Suchen Sie entweder in Ihrer proguard-rules.pro-Datei, configuration.txt oder dem Äquivalent für Ihren Optimierer, wenn Sie R8 nicht verwenden, nach Keep-Regeln, die mit den Paketen übereinstimmen, die nicht verschleiert werden. Wenn com.foo. beispielsweise ein großes Paket in Ihrer DEX-Datei ist, suchen Sie nach Keep-Regeln im Format -keep com.foo.** oder -keep com.foo.bar.**.
  • Beachten Sie, dass Keep-Regeln für Bibliotheksnutzer möglicherweise nicht so einfach zu identifizieren sind. Wenn Sie vermuten, dass eine Regel für Bibliotheksnutzer die Optimierung beeinträchtigt, können Sie sie lokal validieren, indem Sie sie einer eigenständigen Beispiel-App mit einer aktuellen Version von AGP hinzufügen und sie mit dem R8 Configuration Analyzer prüfen.