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 Speicherbedarf 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 werden Messwerte zur DEX-Codeoptimierung für alle Apps und Spiele erfasst. Schwellenwerte werden jedoch nur für Apps und Spiele durchgesetzt, die bestimmte Größenanforderungen erfüllen.

Problem erkennen

Android Vitals kann dich in der Play Console benachrichtigen, wenn die DEX-Codeoptimierung, ‑Minimierung oder ‑Verschleierung deiner App nicht den festgelegten Mindestprozentsätzen entspricht.

Berechnung des Optimierungsfaktors

Bei Apps, die mit der neuesten Patchversion von AGP 8.10 oder höher erstellt wurden (z. B. 8.10.1 statt 8.10.0), werden diese Prozentsätze aus der enthaltenen r8.json-Datei abgerufen. Achten Sie darauf, dass Sie die neueste Patchversion des Android-Gradle-Plug-ins und von R8 für Ihre Nebenversion verwenden, damit genaue Metadaten generiert werden.

Bei Apps, die mit früheren Versionen des AGP erstellt wurden, oder Apps, die mit einem alternativen Code-Optimierer optimiert wurden, in dem r8.json nicht enthalten ist, schätzt Android Vitals die Verschleierungsprozentsätze als Proxy mithilfe der Datei mapping.txt (falls enthalten) oder DEX-Heuristiken.

Mindestwerte für die DEX-Gesamtgröße

Android Vitals berechnet zwar 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 (unkomprimierte Größe).
  • Spiele: Das Bundle enthält mindestens 50 MB DEX-Code (unkomprimierte Größe).

Codeoptimierung lokal messen

Wenn Sie die unkomprimierte DEX-Größe Ihres App-Bundles messen und die Prozentsätze für Optimierung, Verkleinerung und Verschleierung abrufen möchten, die den Ergebnissen in Android Vitals entsprechen, führen Sie android analyze aus:

android analyze <yourapp>.aab

Problem beheben

Wenn Sie einen niedrigen Optimierungsfaktor für DEX-Code haben, sehen Sie sich die Empfehlungen für Ihr Build-System und Ihren Optimierer an:

R8

Wenn Sie die R8-DEX-Codeoptimierungswerte verbessern möchten, lesen Sie die Anleitung unter R8-Optimierung verbessern. Verwenden Sie außerdem den R8 Configuration Analyzer, um zu erfahren, wie sich Ihre Keep-Regeln auf die Optimierungs-, Verkleinerungs- und Verschleierungswerte auswirken. Detaillierte Definitionen dieser Messwerte finden Sie unter Bericht verstehen.

Wenn Sie das Android-Gradle-Plug-in (AGP) verwenden, können Sie auch den R8 Analyzer Skill verwenden, um zusätzliche Informationen zur Optimierung der Keep-Regeln Ihrer App zu erhalten. Wenn Sie Bazel verwenden, haben Sie auch Zugriff auf den R8 Configuration Analyzer. Weitere Informationen finden Sie in der rules_android-Dokumentation zur R8-Optimierung.

Nicht-R8-Optimierer und DEX-Postprozessoren

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

  • Öffnen Sie Ihr App-Bundle in Android Studio und rufen Sie es im APK Analyzer auf.
  • Wählen Sie alle .dex-Dateien aus.
  • Achten Sie besonders 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 laden. Wenn einige dieser Dateien trotz Verschleierung groß bleiben, sind sie wahrscheinlich von paketweiten Beibehaltungsregeln betroffen.
  • Suchen Sie entweder in der Datei proguard-rules.pro, in configuration.txt oder im Äquivalent für Ihren Optimierer, wenn Sie nicht R8 verwenden, nach Keep-Regeln, die mit den Paketen übereinstimmen, die nicht verschleiert werden. Wenn com.foo. beispielsweise ein großes Paket in Ihren DEX-Dateien ist, suchen Sie nach Beibehaltungsregeln im Format -keep com.foo.** oder -keep com.foo.bar.**.
  • Beachten Sie, dass die Aufbewahrungsregeln 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 die Bibliothek direkt mit android analyze <library>.aar prüfen oder sie validieren, indem Sie sie einer eigenständigen Beispiel-App mit einer aktuellen Version des AGP hinzufügen und sie mit dem R8 Configuration Analyzer prüfen.