Tinder reduziert Kaltstarts der App mit dem neuen R8 Configuration Analyzer um 47 %
Lesezeit: 4 Minuten
Tinder hat es sich zur Aufgabe gemacht, echte Verbindungen zu fördern und zu inspirieren, indem es für jede neue Generation von Singles einfach und unterhaltsam ist, sich zu treffen. Mit der Größe der Codebasis der Android-App nahm jedoch auch die Komplexität zu. Vor den letzten Optimierungsmaßnahmen waren etwa 70% der App nicht optimiert. Sie enthielt 17 DEX-Dateien, darunter drei, die nur für den Start vorgesehen waren. Obwohl R8 aktiviert war, wurde ein Großteil des Optimierungspotenzials durch Keep-Regeln blockiert. Das Team konnte nicht feststellen, welche Regeln die Optimierung verhinderten. Um die Startzeit zu verkürzen und die Anzahl der vom Nutzer wahrgenommenen ANR-Fehler („App antwortet nicht“) zu reduzieren, hat Tinder den neuen R8 Configuration Analyzer verwendet.
Mit dem R8 Configuration Analyzer konnte Tinder unbeabsichtigte Optimierungsblocker identifizieren und entfernen. Die Ergebnisse waren sofort sichtbar und beeindruckend: Tinder konnte die Anzahl der Kaltstarts der App um 47% reduzieren, die Downloadgröße der App um 28,98% (auf 61,5 MB) verringern und die Anzahl der vom Nutzer wahrgenommenen ANR-Fehler um 28 % senken.
Konfigurationsanalyse
Der R8 Configuration Analyzer zeigt die R8-Optimierung an, indem er die Werte für Verkleinerung, Optimierung und Verschleierung erfasst, um Bereiche mit Verbesserungspotenzial aufzuzeigen. Sie zeigt die allgemeinen, redundanten oder veralteten Keep-Regeln, einschließlich derer aus externen Bibliotheken, damit Sie die Auswirkungen der Keep-Regeln analysieren und die Keep-Regeln optimieren können.
Zu den wichtigsten Messwerten im Konfigurationsanalysetool gehören:
- Wert für die Entfernung von Ressourcen:Prozentsatz des Codes, der für die R8-Entfernung von Ressourcen verfügbar ist.
- Optimierungsfaktor: Prozentsatz des Codes, der optimiert werden kann (z. B. Methodeninlining, horizontales Zusammenführen von Klassen).
- Obfuskationswert:Prozentsatz der Klassen, Methoden und Felder, die von R8 umbenannt werden können, um die Größe zu verringern.
Mit dem Analysetool können Sie Aufbewahrungsregeln und ihre Auswirkungen prüfen:
- Breite Regeln finden:Schränken Sie den Umfang paketweiter Regeln ein, die die R8-Optimierung einschränken, und identifizieren Sie die spezifischen Klassen, Methoden und Felder, die von der Verkleinerung, Optimierung und Verschleierung ausgeschlossen sind.
- Regeln verfeinern: Nur bestimmte Klassen/Methoden, die Reflexion erfordern, werden berücksichtigt, um die Optimierung zu ermöglichen.
- Redundante Regeln entfernen: Entfernen Sie Regeln, die mit null Klassen, Methoden oder Feldern in Ihrem aktuellen Build übereinstimmen.
- Identische Regeln: Identische Beibehaltungsregeln sind Regeln, die auf dieselben Klassen, Felder und Methoden abzielen, oder doppelte Deklarationen von Beibehaltungsregeln in derselben oder in verschiedenen Beibehaltungsregeldateien.
- Untergeordnete Regeln finden:Bereinigen Sie bestimmte Regeln, die bereits durch umfassendere Konfigurationen abgedeckt sind.
- Problematische Bibliotheken identifizieren:Prüfen Sie die kombinierte Optimierungsauswirkung der zusammengeführten Consumer-Keep-Regeln aus allen Bibliotheken.
Damit Sie den R8 Configuration Analyzer mit agentischen Tools verwenden können, haben wir einen R8 Analyzer-Skill veröffentlicht. Dieser Skill optimiert automatisierte Entwicklungs-Workflows, indem er den Bericht des R8 Configuration Analyzer zusammenfasst und wichtige Messwerte anzeigt: Optimierungs-, Obfuskations- und Verkleinerungswerte. Außerdem werden die fünf wichtigsten Beibehaltungsregeln hervorgehoben, sodass Sie genau sehen, was die Codeoptimierung blockiert.
Versteckte Optimierungsblocker finden
Vor der Integration des R8 Configuration Analyzer hatte die Android-App von Tinder aufgrund einer stark unoptimierten Codebasis erhebliche technische Schulden. Diese fehlende Optimierung beeinträchtigte die Nutzerfreundlichkeit direkt und führte zu langsamen Kaltstarts.
Um diese Probleme zu beheben, hat das Tinder-Team den R8 Configuration Analyzer verwendet, um die R8-Konfiguration umfassend zu prüfen. Der Analyzer zeigte, dass die R8-Optimierung der Codebasis selbst im vollständigen R8-Modus nur bei etwa 28% lag. Mit dem R8 Configuration Analyzer stellte Tinder fest, dass eine interne Bibliothek eine allgemeine, nicht eingegrenzte Keep-Regel einführte.
# Prevents optimization in all public classes along with all of their public and protected members -keep public class * { public protected *; }
Diese „breite“ Regel deckte unbeabsichtigt verschiedene Abhängigkeiten in der gesamten App ab und verhinderte die Optimierung in einer großen Anzahl von Klassen. Da die zu umfassende Regel Laufzeitabstürze verhinderte, haben Entwickler häufig vergessen, neue Regeln für neue Funktionen hinzuzufügen, die Reflexion verwendeten. Dadurch konnten sich versteckte Probleme im Laufe der Zeit anhäufen.
Mithilfe der Statistiken des R8 Configuration Analyzer konnte das Team die spezifischen Klassen, die von der allgemeinen Keep-Regel aus der Bibliothek betroffen waren, erfolgreich ermitteln und analysieren. Das Team stellte sofort fest, dass die Optimierung in größeren, nicht dynamisch aufgerufenen Klassen blockiert wurde, in denen R8 eine Optimierung durchführen konnte. Durch die Verfeinerung dieser spezifischen Keep-Regel konnte Tinder erhebliche Optimierungsmöglichkeiten erschließen, seine Legacy-Konfigurationen entwirren und seine Optimierungszahlen insgesamt drastisch verbessern. Die R8-Werte stiegen von 28% auf 50%, was zu sofortigen Leistungssteigerungen in der gesamten Anwendung führte. Das Tinder-Team arbeitet aktiv daran, diesen Wert weiter zu verbessern.
- Schnelleres Laden:Das Team konnte die Anzahl der Nutzer, bei denen lange Kaltstarts der App auftraten, um 47% reduzieren.
- Geringere Größe:Die Downloadgröße der App wurde von 86,6 MB auf 61,5 MB reduziert (28,98% weniger).
- Verbesserte Stabilität:Die vom Nutzer wahrgenommenen ANR-Fehler („App antwortet nicht“) sanken von 0,35% auf 0,28 % und näherten sich damit deutlich dem Medianwert der Vergleichsgruppe an.
- Weniger Komplexität: Die Gesamtzahl der DEX-Dateien wurde von 17 auf 11 reduziert, darunter nur zwei Startdateien.
Neben diesen technischen Leistungsverbesserungen führte die verstärkte Optimierung der App direkt zu spürbarem Geschäftswachstum und höherem Nutzer-Engagement, insbesondere in Märkten mit begrenzten Ressourcen.
- Regionales Engagement:In Ländern, in denen Geräte mit wenig RAM einen großen Marktanteil haben, war der größte Anstieg des Engagements zu verzeichnen. Die Senkung der ANR-Raten war entscheidend, um das Engagement in diesem großen Markt zu verbessern.
- Steigerung der Interaktionen:Seit der Optimierung der App sind die Interaktionen um 3% gestiegen.
Zukünftige Leistung mit Continuous Integration sichern
Die Code-Minimierung ist keine einmalige Aufgabe, sondern erfordert kontinuierliche Aufmerksamkeit. Inspiriert von den enormen Verbesserungen, die durch den R8 Configuration Analyzer erzielt wurden, hat das Android-Team von Tinder die Optimierungsüberwachung proaktiv in seinen täglichen Workflow integriert, um Regressionen zu verhindern.
Das Tinder-Team hat seiner CI/CD-Pipeline einen neuen Job hinzugefügt, um Änderungen an den Optimierungsstatistiken zu melden. So kann jeder sehen, wie sich sein Beitrag auf die Optimierung auswirkt. Wenn das Team andere Entwickler berät, die die Integration der R8-Konfiguration in Betracht ziehen, betont es die Bedeutung der Prüfung interner Abhängigkeiten. Die meisten gängigen Drittanbieterbibliotheken haben klar definierte Regeln. Interne Unternehmensprojekte, die als „stabil“ gelten, können jedoch weitreichende Regeln einführen, die sich negativ auf die Gesamtoptimierung auswirken.
Zusammenfassung
Angesichts einer stark unoptimierten Codebasis und einer großen Anzahl von DEX-Dateien benötigte Tinder eine Möglichkeit, die Reduzierungsregeln der App sauber zu prüfen. Der R8 Configuration Analyzer bot die idealen Tools, um zu weit gefasste interne Bibliotheksregeln und die von der Keep-Regel betroffenen Klassen zu identifizieren. So konnte das Team seine Codebasis zuverlässig optimieren. So konnte Tinder die Kaltstarts um fast die Hälfte reduzieren, die APK-Größe um über 28 % verringern und eine stabilere, leistungsfähigere Grundlage für seine Nutzer schaffen. Das Team arbeitet aktiv daran, diese Zahlen weiter zu verbessern.
R8 Configuration Analyzer verwenden
Der R8 Configuration Analyzer und seine eigenständigen Funktionen können je nach Ihrer aktuellen Version des Android-Gradle-Plug-ins (AGP) verwendet werden:
1. AGP 9.3-Release: Der R8 Configuration Analyzer ist vollständig integriert und wird mit AGP 9.3 veröffentlicht. Wenn Sie einen R8-Release-Build ausführen, wird der Bericht im Ordner `build/outputs/mapping/release/configanalyzer.html` generiert.
2. Eigenständige Gradle-Aufgabe: In AGP 9.3 wird eine eigenständige Gradle-Aufgabe eingeführt, mit der Sie den Analysebericht erstellen können, ohne einen vollständigen Release-Build auszuführen. So erhalten Sie beim lokalen Optimieren von Keep-Regeln viel schneller Feedback:
./gradlew :app:analyzeReleaseR8Config
Der Bericht wird um build/reports/r8/r8-config-analyzer-release.html. erstellt.
3. Verwendung mit älteren AGP-Versionen: Wenn Sie eine Version vor AGP 9.3 verwenden, müssen Sie nicht die gesamte AGP-Version migrieren, um Ihre Konfiguration zu analysieren. Sie können die R8-Version unabhängig auf 9.3.7-dev oder höher aktualisieren. Folgen Sie dazu der Anleitung zum Ersetzen von R8 in AGP. Wenn Sie den Bericht lokal generieren möchten, führen Sie den Build mit der angegebenen Property aus:
./gradlew assembleRelease -Dcom.android.tools.r8.dumpkeepradiushtmltodirectory=<output_directory>
Weitere Informationen finden Sie in der Dokumentation zum R8 Configuration Analyzer.
-
FallstudienGrab ist die führende Super-App in Südostasien. Sie bietet Millionen von Nutzern in acht Ländern Liefer-, Mobilitäts- und Finanzdienstleistungen über eine einzige App.
Ajesh Pai, Nguyen Van Minh, Tracy Agyemang • Lesezeit: 5 Minuten -
FallstudienWhatsApp ist die weltweit größte Messaging-Plattform mit Milliarden von Nutzern weltweit. Es ist das Standardkommunikationstool für Menschen in verschiedenen Regionen und verbindet Nutzer über private, zuverlässige und sichere Nachrichten.
Niharika Arora, Tracy Agyemang, Mayank Jain • Lesezeit: 8 Minuten -
FallstudienKarrot ist eine hyperlokale, Community-gestützte Peer-to-Peer-Marktplatz-App, mit der Nutzer Artikel mit anderen bestätigten Nutzern kaufen, verkaufen und tauschen können. Seit der Einführung in Südkorea im Jahr 2015 hat sich die Plattform auf globale Märkte ausgeweitet und über 43 Millionen registrierte Nutzer gewonnen.
Thomas Ezan, Tracy Agyemang • Lesezeit: 2 Minuten
Lassen Sie sich Woche für Woche die neuesten Informationen zur Android-Entwicklung zusenden.