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. ProGuard-kompatiblen Optimierern oder sekundären DEX-Postprozessoren) 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ört in der Regel Java- und Kotlin-Code, im Gegensatz zu kompiliertem C++-Code oder .so-Dateien.

In Android Vitals-Berichten werden Messwerte zur DEX-Codeoptimierung für alle Apps und Spiele angezeigt. Grenzwerte werden jedoch nur für Apps und Spiele durchgesetzt, die bestimmte Größenanforderungen erfüllen.

Problem erkennen

Android Vitals kann Sie benachrichtigen, wenn die Optimierungsstufen für den DEX-Code Ihrer App niedrig sind. Dazu gehören die Verschleierung, das Shrinking und die Optimierung für Apps und Spiele, die R8 verwenden. Bei Apps, die R8 nicht verwenden, werden die Optimierungs-, Shrinking- und Verschleierungsraten von Android Vitals geprüft. Bei Bedarf wird jedoch auf Verschleierungsheuristiken zurückgegriffen.

Optimierungsstatus überwachen

Android Vitals-Daten können Ihnen helfen, die Leistung Ihrer App zu verbessern. Sie werden über die Play Console benachrichtigt, wenn Ihre App die Mindestprozentsätze für die Codeoptimierung nicht erreicht. Ausführliche Definitionen von Shrinking, 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 Versionen von AGP oder wenn die Datei r8.json nicht enthalten ist, werden die Prozentsätze aus der Datei mapping.txt berechnet, sofern sie enthalten ist, oder mithilfe von DEX-Heuristiken, wenn die Zuordnungsdatei nicht verfügbar ist.

Bei Apps, die mit einem alternativen Code-Optimierungstool optimiert werden, wird in Android Vitals eine Analyse durchgeführt, um den Prozentsatz der Klassen, Methoden und Felder zu schätzen, die im App-Bundle verschleiert werden.

Mindestgröße für DEX insgesamt

Android Vitals berechnet Messwerte zur Codeoptimierung für alle Apps. Sie erhalten jedoch 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).

In Android Vitals wird die DEX-Größe Ihrer App angezeigt. 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 Komprimierung Ihres App-Bundles mit dem R8 Configuration Analyzer messen. Der Bericht „R8 Configuration Analyzer“ ist auch im R8 Analyzer-Skill enthalten. Der Bericht kann Ihnen zwar helfen, die Auswirkungen Ihrer Keep-Regeln auf die Optimierungs-, Shrinking- und Obfuscation-Faktoren zu verstehen, die Prozentsätze im Bericht stimmen jedoch nicht mit den Werten in Android Vitals überein, da sie vor den Optimierungen berechnet werden.

Wenn Sie die genauen Metadaten sehen möchten, die von Android Vitals zur Berechnung Ihrer Werte verwendet werden, extrahieren Sie die r8.json-Datei aus Ihrem App-Bundle:

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

Problem beheben

Wenn Sie niedrige Werte für den Optimierungsfaktor des DEX-Codes haben, sehen Sie sich die Empfehlungen für Ihr Build-System und Ihren Optimizer an:

Android-Gradle-Plug-in und R8

Informationen zur Verbesserung der R8-DEX-Codeoptimierung finden Sie unter R8-Optimierung verbessern. Mit dem R8 Analyzer-Skill können Sie zusätzliche Informationen zur Optimierung der Keep-Regeln Ihrer App erhalten.

Build-Systeme ohne R8 und DEX-Postprozessoren

Wenn in Ihrer Build-Pipeline benutzerdefinierte Build-Tools oder sekundäre DEX-Postprozessoren verwendet werden, gehen Sie so vor, 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 .dex-Dateien aus.
  • Achten Sie genau auf die Dateien mit der größten Größe, wenn Sie die Schaltfläche „Namen deobfuskieren“ 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 in der Datei proguard-rules.pro, 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 Ihrem DEX ist, suchen Sie nach Keep-Regeln im Format -keep com.foo.** oder -keep com.foo.bar.**.
  • Die Regeln für die Nutzung von Bibliotheken sind möglicherweise nicht so einfach zu erkennen. Wenn Sie vermuten, dass eine Regel für die Verwendung von Bibliotheken die Optimierung beeinträchtigt, können Sie dies lokal überprüfen. Fügen Sie die Regel dazu einer eigenständigen Beispiel-App mit einer aktuellen Version von AGP hinzu und untersuchen Sie sie mit dem R8 Configuration Analyzer.