ProfileInstaller

  
Ermöglicht Bibliotheken, Kompilierungs-Traces im Voraus zu füllen, damit sie von ART gelesen werden können.
Letzte Aktualisierung Stabile Version Releasekandidat Beta-Ausgabe Alpha-Release
7. August 2024 1.3.1 - - 1.4.0-alpha02

Abhängigkeiten deklarieren

Um eine Abhängigkeit von ProfileInstaller hinzuzufügen, müssen Sie das Maven-Repository von Google zu Ihrem Projekt arbeiten. Maven-Repository von Google lesen .

Fügen Sie der Datei build.gradle die Abhängigkeiten für die Artefakte hinzu, die Sie benötigen Ihre App oder Ihr Modul:

Groovig

dependencies {
    implementation "androidx.profileinstaller:profileinstaller:1.3.1"
}

Kotlin

dependencies {
    implementation("androidx.profileinstaller:profileinstaller:1.3.1")
}

Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.

Feedback

Dein Feedback hilft uns, Jetpack zu verbessern. Teilen Sie uns mit, wenn Sie neue Ausgaben entdecken oder zur Verbesserung dieser Bibliothek. In der bestehende Probleme in dieser Bibliothek, bevor Sie eine neue erstellen. So können Sie zu einem vorhandenen Problem abstimmen: indem Sie auf die Sternschaltfläche klicken.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zur Problemverfolgung. .

Version 1.4

Version 1.4.0-alpha02

7. August 2024

androidx.profileinstaller:profileinstaller:1.4.0-alpha02 wurde veröffentlicht. Version 1.4.0-alpha02 enthält diese Commits.

Neue Funktionen

  • API 35-Unterstützung zum Profile Installer hinzugefügt. (6f9f6fa)

Fehlerkorrekturen

  • Die manuelle Beschreibung des Zugriffs auf neue Plattform-APIs wurde entfernt, da dies bei Verwendung von R8 mit AGP 7.3 oder höher (z.B. R8 Version 3.3) und bei allen Builds bei Verwendung von AGP 8.1 oder höher (z.B. D8 Version 8.1) automatisch über die API-Modellierung erfolgt. Kunden, die AGP nicht verwenden, wird empfohlen, auf D8-Version 8.1 oder höher zu aktualisieren. Weitere Details findest du in diesem Artikel. (If6b4c, b/345472586)

Version 1.4.0-alpha01

7. Februar 2024

androidx.profileinstaller:profileinstaller:1.4.0-alpha01 wurde veröffentlicht. Version 1.4.0-alpha01 enthält diese Commits.

Fehlerkorrekturen

  • Fehlercode für kein eingebettetes Profil in Profilprüfung hinzugefügt. (Ifb109, b/313928520)
  • Absturzfehler beim Verwerfen von Shadern unter Android U (API 34) sowie in Emulatoren wurden behoben. (I031ca, b/274314544)
  • Die Unterstützung für Android U im Profilinstallationsprogramm wurde aktiviert. (Iaf177)
  • Das Profilinstallationsprogramm unter Android U schlug fehl, weil das aktuelle Profil beim Start des Prozesses nicht leer erstellt wurde. (Ie3899)
  • Die Bitmap-Transcodierung der Methode im Profilformat V_015S wurde korrigiert. (aosp/2906631) und (aosp/2847740)

Version 1.3

Version 1.3.1

3. Mai 2023

androidx.profileinstaller:profileinstaller:1.3.1 wurde veröffentlicht. Version 1.3.1 enthält diese Commits.

Fehlerkorrekturen

  • Unterstützung für Android U im Profilinstallationsprogramm aktiviert (Iaf177)
  • Das Profilinstallationsprogramm unter Android U schlug fehl, weil das aktuelle Profil beim Start des Prozesses nicht leer erstellt wurde. (Ie3899)

Version 1.3.0

22. März 2023

androidx.profileinstaller:profileinstaller:1.3.0 wurde veröffentlicht. Version 1.3.0 enthält diese Commits.

Wichtige Änderungen seit Version 1.2.0

  • NullPointerException in ProfileInstallReceiver korrigiert. (b/243851384)
  • ProfileVerifier API wurde hinzugefügt, um innerhalb der App zu prüfen, ob ein Basisprofil kompiliert wurde, geplant wurde oder fehlt (I263a4, b/246653809).
  • Fügt einen neuen Shell-Broadcast hinzu, der es MacroBenchmark ermöglicht, speicherinterne Profildaten vollständig auf das Laufwerk zu leeren, damit sie bei der Generierung von Referenzprofilen berücksichtigt werden. Dies ist erforderlich, um die MakroBenchmark-Bibliothek zu verwenden, um Referenzprofile mit BaselineProfileRule zu erfassen und die Profilleistung mit CompilationMode.Partial(warmupIterations) zu bewerten.
  • Es wurde ein Diagnosecode hinzugefügt, um komprimierte Referenzprofile zu erkennen. Komprimierte Referenzprofile können vom Profileinstaller aufgrund des CPU-Aufwands nicht in Makro-Benchmarks oder in der Produktion installiert werden. Sie sollten sie beim Erstellen Ihrer App vermeiden, indem Sie sie auf Studio/AGP Electric Eel oder die bundletool-Version 1.13.1(I86413, b/261998144) aktualisieren.
  • Es wurden Hooks für Makro-Benchmarks zum Erfassen von Profilen und Löschen von Shader-Cache hinzugefügt, die zum Generieren von Referenzprofilen oder Makro-Benchmarking auf nicht gerooteten Geräten erforderlich sind (Ie0a7d, b/250083467, b/253094958). (Ia5171, b/231455742)

Version 1.3.0-rc01

8. März 2023

androidx.profileinstaller:profileinstaller:1.3.0-rc01 wurde ohne Änderungen seit der letzten Betaversion veröffentlicht. Version 1.3.0-rc01 enthält diese Commits.

Version 1.3.0-beta01

8. Februar 2023

androidx.profileinstaller:profileinstaller:1.3.0-beta01 wurde veröffentlicht. Version 1.3.0-beta01 enthält diese Commits.

API-Änderungen

  • Komprimierte Profile werden nicht mehr unterstützt. Das Öffnen und Dekomprimieren führt beim Start zu einer Verringerung der CPU-Auslastung von 10 ms. Daher wurde stattdessen eine Diagnose hinzugefügt, um falsch komprimierte Referenzprofile zu erkennen. (I86413, b/261998144)

Version 1.3.0-alpha03

11. Januar 2023

androidx.profileinstaller:profileinstaller:1.3.0-alpha03 wurde veröffentlicht. Version 1.3.0-alpha03 enthält diese Commits.

Fehlerkorrekturen

  • Ermöglicht die Verarbeitung komprimierter und unkomprimierter Referenzprofile (Ic61a0)
  • Beheben Sie das Problem mit MacrobenchmarkScope.dropShaderCache(), damit es nicht mehr abstürzt, indem Sie das Problem mit der Broadcast-Registry im Profiler-Manifest beheben (I5c728, b/258619948).

Version 1.3.0-alpha02

9. November 2022

androidx.profileinstaller:profileinstaller:1.3.0-alpha02 wurde veröffentlicht. Version 1.3.0-alpha02 enthält diese Commits.

API-Änderungen

  • Es wurde ein Hook für Benchmarks hinzugefügt, um den Shader-Cache zu löschen, um eine konsistente Leistung bei Kaltstarts zu gewährleisten, insbesondere bei der Kompilierung mit Profilen aus Aufwärmiterationen. Dieses Update ist erforderlich, um Kaltstarts mit benchmark-macro-junit4:1.2.0-alpha05 oder höher zu messen. Informationen zu den API-Änderungen der Benchmarkbibliothek finden Sie auf der Seite Benchmark 1.2.0-alpha07. (Ia5171, b/231455742)

Version 1.3.0-alpha01

24. Oktober 2022

androidx.profileinstaller:profileinstaller:1.3.0-alpha01 wurde veröffentlicht. Version 1.3.0-alpha01 enthält diese Commits.

API-Änderungen

  • ProfileVerifier API wurde hinzugefügt, um innerhalb der App zu prüfen, ob ein Basisprofil kompiliert wurde, geplant wurde oder fehlt (I263a4, b/246653809).
  • Fügt einen neuen Shell-Broadcast hinzu, der es MacroBenchmark ermöglicht, speicherinterne Profildaten vollständig auf das Laufwerk zu leeren, damit sie bei der Generierung von Referenzprofilen berücksichtigt werden. Dies ist erforderlich, um die MakroBenchmark-Bibliothek zu verwenden, um Referenzprofile mit BaselineProfileRule zu erfassen und die Profilleistung mit CompilationMode.Partial(warmupIterations) zu bewerten. (Ie0a7d, b/250083467, b/253094958)

Version 1.2.2

Version 1.2.2

11. Januar 2023

androidx.profileinstaller:profileinstaller:1.2.2 wurde veröffentlicht. Version 1.2.2 enthält diese Commits.

Fehlerkorrekturen

  • Ermöglicht die Verarbeitung komprimierter und unkomprimierter Referenzprofile (Ic61a0)

Version 1.2.1

Version 1.2.1

7. Dezember 2022

androidx.profileinstaller:profileinstaller:1.2.1 wurde veröffentlicht. Version 1.2.1 enthält diese Commits.

Neue Funktionen

  • Aktivieren Sie Profileinstaller für S_V2 (API 32) und TIRAMISU (API 33) (b/254900303).

Version 1.2.0

Version 1.2.0

27. Juli 2022

androidx.profileinstaller:profileinstaller:1.2.0 wurde veröffentlicht. Version 1.2.0 enthält diese Commits.

Wichtige Änderungen seit Version 1.1.0

  • Das ab Android 12 verwendete ART-Profilformat wird jetzt unterstützt.
  • Fügen Sie in ProfileInstallReceiver neue APIs hinzu, um bei der Verwendung von Referenzprofilen konsistentere Ergebnisse mit Macrobenchmarks zu erhalten.

Version 1.2.0-rc01

15. Juni 2022

androidx.profileinstaller:profileinstaller:1.2.0-rc01 wurde veröffentlicht. Version 1.2.0-rc01 enthält diese Commits.

  • Diese Version ist mit androidx.profileinstaller:profileinstaller:1.2.0-beta03 identisch.

Version 1.2.0-beta03

1. Juni 2022

androidx.profileinstaller:profileinstaller:1.2.0-beta03 wurde veröffentlicht. Version 1.2.0-beta03 enthält diese Commits.

Version 1.2.0-beta02

18. Mai 2022

androidx.profileinstaller:profileinstaller:1.2.0-beta02 wurde veröffentlicht. Version 1.2.0-beta02 enthält diese Commits.

  • Keine Änderungen, zur Unterstützung der Compose-Versionen 1.2.0-beta02 erforderlich.

Version 1.2.0-beta01

11. Mai 2022

androidx.profileinstaller:profileinstaller:1.2.0-beta01 wurde veröffentlicht. Version 1.2.0-beta01 enthält diese Commits.

API-Änderungen

  • Fügen Sie in ProfileInstallReceiver neue APIs hinzu, um bei der Verwendung von Referenzprofilen konsistentere Ergebnisse mit Macrobenchmarks zu erhalten. (If2ae5, b/215740637)

Fehlerkorrekturen

  • Das Profil-Installationsprogramm gibt eine hilfreiche Meldung aus, wenn du versuchst, das Metadatenformat V_001 unter Android 12 und höher zu verwenden. (aosp/1978526, b/217502387)
  • Das Profilinstallationsprogramm verwendet jetzt androidx.startup-Version 1.1.1. (aosp/2077099, b/229828376)

Version 1.2.0-alpha02

26. Januar 2022

androidx.profileinstaller:profileinstaller:1.2.0-alpha02 wurde veröffentlicht. Version 1.2.0-alpha02 enthält diese Commits.

Diese Version ist mit 1.2.0-alpha01 identisch.

Version 1.2.0-alpha01

12. Januar 2022

androidx.profileinstaller:profileinstaller:1.2.0-alpha01 wurde veröffentlicht. Version 1.2.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Das ART-Profilformat wird ab Android 12 unterstützt.

Version 1.1.0

Version 1.1.0

9. Februar 2022

androidx.profileinstaller:profileinstaller:1.1.0 wurde veröffentlicht. Version 1.1.0 enthält diese Commits.

Version 1.1.0-rc01

15. Dezember 2021

androidx.profileinstaller:profileinstaller:1.1.0-rc01 wird ohne Updates seit 1.1.0-beta04 veröffentlicht. Version 1.1.0-rc01 enthält diese Commits.

Version 1.1.0-beta04

1. Dezember 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta04 wurde veröffentlicht. Version 1.1.0-beta04 enthält diese Commits.

Version 1.1.0-beta03

17. November 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta03 wurde veröffentlicht. Version 1.1.0-beta03 enthält diese Commits.

Fehlerkorrekturen

  • Aktualisiert, um Compose 1.1.0-beta03 zu unterstützen

Version 1.1.0-beta02

3. November 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta02 wurde veröffentlicht. Version 1.1.0-beta02 enthält diese Commits.

Fehlerkorrekturen

  • Aktualisiert, um Compose 1.1.0-beta02 zu unterstützen

Version 1.1.0-beta01

27. Oktober 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta01 wurde veröffentlicht. Version 1.1.0-beta01 enthält diese Commits.

  • Keine Änderungen seit 1.1.0-alpha07.

Version 1.1.0-alpha07

13. Oktober 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha07 wurde veröffentlicht. Version 1.1.0-alpha07 enthält diese Commits.

Neue Funktionen

  • Unterstützung für Profm unter Android N hinzugefügt

Version 1.1.0-alpha06

29. September 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha06 wurde veröffentlicht. Version 1.1.0-alpha06 enthält diese Commits.

Fehlerkorrekturen

  • Beheben Sie Probleme mit der Profileinstaller-Transcodierung auf N, O und O_MR1. (I12d75)

Version 1.1.0-alpha05

15. September 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha05 wurde veröffentlicht. Version 1.1.0-alpha05 enthält diese Commits.

Fehlerkorrekturen

  • Die Profiltranscodierung mit Android Nougat und Android Oreo für Multidex-APKs wurde korrigiert.

Version 1.1.0-alpha04

1. September 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha04 wurde veröffentlicht. Version 1.1.0-alpha04 enthält diese Commits.

Fehlerkorrekturen

  • Korrigieren Sie ProfileInstaller, damit Apps, die Referenzprofile verwenden, MacroBenchmarks mit CompilationMode.BaselineProfile leichter ausführen können. (I42657, b/196074999)

Version 1.1.0-alpha03

18. August 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha03 wurde veröffentlicht. Version 1.1.0-alpha03 enthält diese Commits.

Fehlerkorrekturen

  • Ändern Sie das Überspringen des Profileinstaller-Verhaltens, um die PackageInfo.lastUpdatedTime in einer Datei im Dateiverzeichnis der Anwendung und bevor Sie das Profil bei der nächsten Ausführung installieren. (Ib93d1)
  • Profilformat auf P-, Q- und R-Geräten so anpassen, dass sie den ART-Anforderungen entsprechen (I84e89)

Version 1.1.0-alpha02

4. August 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha02 wurde veröffentlicht. Version 1.1.0-alpha02 enthält diese Commits.

Aktualisiert, um mit Compose 1.1.0-alpha01 kompatibel zu machen.

Version 1.1.0-alpha01

21. Juli 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha01 wurde veröffentlicht. Version 1.1.0-alpha01 enthält diese Commits.

Fehlerkorrekturen

  • Es wurde ein Fehler behoben, der unter bestimmten Umständen den strikten Modus auslöste.

Version 1.0

Version 1.0.4

13. Oktober 2021

androidx.profileinstaller:profileinstaller:1.0.4 wurde veröffentlicht. Version 1.0.4 enthält diese Commits.

  • Aktualisiert, um Compose 1.0.4 zu unterstützen

Version 1.0.3

29. September 2021

androidx.profileinstaller:profileinstaller:1.0.3 wurde veröffentlicht. Version 1.0.3 enthält diese Commits.

  • Aktualisiert, um Compose 1.0.3 zu unterstützen

Version 1.0.2

1. September 2021

androidx.profileinstaller:profileinstaller:1.0.2 wurde veröffentlicht. Version 1.0.2 enthält diese Commits.

Fehlerkorrekturen

  • Profiltranscodierung für P-, Q- und R-Geräte hinzugefügt. Diese Änderung bedeutet, dass das Profil auf diesen Geräten transcodiert wird, sodass es immer von ART verwendet werden kann. Zuvor wurde die Transcodierung auf diesen Plattformen übersprungen, was dazu führen kann, dass ART das Quellprofil manchmal nicht verarbeiten konnte. Keine Änderungen an Entwickler-APIs.

Version 1.0.1

4. August 2021

androidx.profileinstaller:profileinstaller:1.0.1 wurde veröffentlicht. Version 1.0.1 enthält diese Commits.

Aktualisiert, um mit Compose 1.0.1 kompatibel zu machen.

Version 1.0.0

28. Juli 2021

androidx.profileinstaller:profileinstaller:1.0.0 wurde veröffentlicht. Version 1.0.0 enthält diese Commits.

Hauptfunktionen von Version 1.0.0

Das Profil-Installationsprogramm ist eine neue Bibliothek, mit der Bibliotheken und Anwendungen "Profilregeln" definieren und ART-Profilinformationen mit einem APK bündeln können. Mit dieser Bibliothek werden diese Profile nach dem Start der App installiert. Dies kann genutzt werden, um die Anwendungsleistung zu verbessern.

In den detaillierten Versionshinweisen unter 1.0.0-beta01 finden Sie weitere Informationen zu diesen Profilregeln und ihrer Funktionsweise.

Version 1.0.0-rc02

14. Juli 2021

androidx.profileinstaller:profileinstaller:1.0.0-rc02 wurde veröffentlicht. Version 1.0.0-rc02 enthält diese Commits.

Version 1.0.0-rc01

1. Juli 2021

androidx.profileinstaller:profileinstaller:1.0.0-rc01 wurde veröffentlicht. Version 1.0.0-rc01 enthält diese Commits.

Dies ist eine RC-Release ohne Änderungen gegenüber der Betaversion.

Version 1.0.0-beta01

16. Juni 2021

androidx.profileinstaller:profileinstaller:1.0.0-beta01 wurde veröffentlicht. Version 1.0.0-beta01 enthält diese Commits.

Zweck der Bibliothek

Das Profil-Installationsprogramm ist eine neue Bibliothek, mit der Bibliotheken und Anwendungen "Profilregeln" definieren und ART-Profilinformationen mit einem APK bündeln können. Mit dieser Bibliothek werden diese Profile nach dem Start der App installiert. Dies kann genutzt werden, um die Anwendungsleistung zu verbessern.

Diese Profilinstallation erfolgt über die Bibliothek „androidx.startup“. Wenn Sie die Profilinstallation aus irgendeinem Grund deaktivieren möchten, können Sie das Manifest ändern, um es zu entfernen:


       <provider
           android:name="androidx.startup.InitializationProvider"
           android:authorities="${applicationId}.androidx-startup"
           android:exported="false"
           tools:node="merge">
           <meta-data android:name="androidx.profileinstaller.ProfileInstallerInitializer"
                     tools:node="remove" />
       </provider>

Das ist besonders nützlich, wenn deine App nicht triviale Startanforderungen hat und du die Profilinstallation manuell über die ProfileInstaller.writeProfile API auslösen möchtest.

Was sind Profilregeln?

  • Profilregeln für eine Bibliothek werden in der Textdatei baseline-prof.txt im src/main oder einem entsprechenden Verzeichnis angegeben. In der Datei ist eine Regel pro Zeile angegeben, wobei eine Regel in diesem Fall ein Muster für den Abgleich mit Methoden oder Klassen in der Bibliothek ist. Die Syntax für diese Regeln ist eine Obermenge des visuell lesbaren ART-Profilformats, das bei Verwendung von adb shell profman --dump-classes-and-methods ... verwendet wird. Für die Ausrichtung auf Methoden oder Klassen gibt es zwei Arten dieser Regeln.

  • Eine Methodenregel hat das folgende Muster:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • Und eine Klassenregel hat das folgende Muster:

    <CLASS_DESCRIPTOR>
    
  • Hier steht <FLAGS> für mindestens eines der Zeichen H, S und P, um anzugeben, ob diese Methode als „Hot“, „Startup“ oder „Post Startup“ gekennzeichnet werden soll.

  • <CLASS_DESCRIPTOR> ist der Deskriptor für die Klasse, zu der die Zielmethode gehört. Die Klasse androidx.compose.runtime.SlotTable hätte beispielsweise den Deskriptor Landroidx/compose/runtime/SlotTable;.

  • <METHOD_SIGNATURE> ist die Signatur der Methode und enthält den Namen sowie die Parametertypen und Rückgabetypen der Methode. Die Methode fun isPlaced(): Boolean für LayoutNode hat beispielsweise die Signatur isPlaced()Z.

  • Diese Muster können Platzhalter (**, * und ?) enthalten, damit eine einzelne Regel mehrere Methoden oder Klassen umfasst.

Wozu dienen die Regeln?

  • Eine Methode mit dem Flag H gibt an, dass diese Methode "heiß" ist. und sollten im Voraus kompiliert werden.

  • Eine Methode mit dem Flag S gibt an, dass es sich um eine Methode handelt, die beim Start aufgerufen und im Voraus kompiliert werden sollte, um Kosten für die Kompilierung und die Interpretation der Methode beim Start zu vermeiden.

  • Eine Methode mit dem Flag P gibt an, dass es sich um eine Methode handelt, die nach dem Start aufgerufen wird.

  • Eine in dieser Datei vorhandene Klasse gibt an, dass sie beim Start verwendet wird und im Heap zugewiesen werden sollte, um Kosten für das Laden der Klasse zu vermeiden.

Wie funktioniert das?

  • Bibliotheken können diese Regeln definieren, die in AAR-Artefakte gepackt werden. Wenn dann ein APK erstellt wird, das diese Artefakte enthält, werden diese Regeln zusammengeführt und die zusammengeführten Regeln zum Erstellen eines kompakten binären ART-Profils verwendet, das speziell für das APK gilt. ART kann dieses Profil dann nutzen, wenn das APK auf den Geräten installiert ist, um im Voraus eine bestimmte Teilmenge der App zu kompilieren und so die Leistung der App zu verbessern, insbesondere bei der ersten Ausführung. Dies hat keine Auswirkungen auf Debug-fähige Anwendungen.

  • Regeldateien sollten den Namen baseline-prof.txt haben und im Stammverzeichnis des Hauptquellsatzes abgelegt werden (diese Datei sollte Ihrer AndroidManifset.xml-Datei gleichgeordnet sein).

  • Derzeit werden diese Dateien nur verwendet, wenn Sie das Android-Gradle-Plug-in 7.0 oder höher verwenden und derzeit nur mit einem Flag in Ihrem gradle.properties aktiviert sind:

    # Enable adding baseline-prof.txt files to AAR artifacts, and binary profiles to APKs
    android.experimental.enableArtProfiles=true
    

Für Profile ist ein Guthaben erforderlich

  • Richtig gestaltete Profile, die Methoden und Klassen, die sich im Startpfad befinden und leistungskritisch sind, korrekt priorisieren, erzielen die besten Ergebnisse. Wenn zu viele Methoden oder Klassen in Profilen enthalten sind, kann dies jedoch negative Auswirkungen auf den Arbeitsspeicher- und Laufwerksverbrauch haben. Daher wird empfohlen, konservativ zu beginnen, wenn Sie Ihre eigenen Profilregeln definieren.