ProfileInstaller

  
Ermöglicht es Bibliotheken, Kompilierungs-Traces vorab zu füllen, damit sie von ART gelesen werden können.
Letzte Aktualisierung Stabile Version Releasekandidat Beta-Ausgabe Alpharelease
7. Februar 2024 1.3.1 - - 1.4.0-alpha01

Abhängigkeiten deklarieren

Zum Hinzufügen einer Abhängigkeit von ProfileInstaller müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.

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

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. Lassen Sie uns wissen, wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie eine neue erstellen. Durch Klicken auf die Stern-Schaltfläche können Sie zu einem vorhandenen Problem abstimmen.

Neues Problem erstellen

Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.

Version 1.4

Version 1.4.0-alpha01

7. Februar 2024

androidx.profileinstaller:profileinstaller:1.4.0-alpha01 wird freigegeben. Version 1.4.0-alpha01 enthält diese Commits.

Fehlerkorrekturen

  • Fehlercode für kein in Profilprüfung eingebettetes Profil hinzugefügt. (Ifb109, b/313928520)
  • Behebung des Absturzes beim Löschen von Shadern unter Android U (API 34) und bei Emulatoren. (I031ca, b/274314544)
  • Im Profil-Installationsprogramm wird Android U unterstützt. (Iaf177)
  • Das Installationsprogramm für das Profil konnte unter Android U nicht installiert werden, da das aktuelle Profil beim Start des Prozesses nicht leer erstellt wurde. (Ie3899)
  • Korrigieren Sie die Bitmaptranscodierung für die Methode im Profilformat V_015S. (aosp/2906631) und (aosp/2847740)

Version 1.3

Version 1.3.1

3. Mai 2023

androidx.profileinstaller:profileinstaller:1.3.1 wird freigegeben. Version 1.3.1 enthält diese Commits.

Fehlerkorrekturen

  • Unterstützung für Android U im Profil-Installationsprogramm (Iaf177) aktiviert
  • Das Installationsprogramm für das Profil konnte unter Android U nicht installiert werden, da 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 wird freigegeben. Version 1.3.0 enthält diese Commits.

Wichtige Änderungen seit Version 1.2.0

  • Problem mit NullPointerException in ProfileInstallReceiver behoben. (b/243851384)
  • Die ProfileVerifier API wurde hinzugefügt, um in der App zu prüfen, ob ein Basisprofil kompiliert oder geplant wurde oder fehlt (I263a4, b/246653809).
  • Fügt einen neuen Shell-Broadcast hinzu, der es MacroBenchmark ermöglicht, Profildaten im Arbeitsspeicher vollständig auf das Laufwerk zu übertragen, damit sie in die Referenzprofilgenerierung einbezogen werden. Dies ist erforderlich, um mit der Makro-Benchmark-Bibliothek 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 Basisprofile können aufgrund von CPU-Overhead nicht vom Profileinstaller in Macro-Benchmarks oder in der Produktion installiert werden. Sie sollten sie beim Erstellen Ihrer App vermeiden, indem Sie entweder auf Studio/AGP Electric Eel oder die bundletool-Version 1.13.1(I86413, b/261998144) aktualisieren.
  • Es wurden Hooks für Makro-Benchmark hinzugefügt, um Profile zu erfassen und den Shader-Cache zu löschen, die zum Generieren von Baseline-Profilen 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 wird 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 wird freigegeben. Version 1.3.0-beta01 enthält diese Commits.

API-Änderungen

  • Entfernt die Unterstützung für die Verarbeitung komprimierter Profile: Das Öffnen und Dekomprimieren führt zu einer Regression der CPU-Auslastung von 10 ms während des Starts. Daher wurde stattdessen eine Diagnose hinzugefügt, um falsch komprimierte Basisprofile zu erkennen. (I86413, b/261998144)

Version 1.3.0-alpha03

11. Januar 2023

androidx.profileinstaller:profileinstaller:1.3.0-alpha03 wird freigegeben. Version 1.3.0-alpha03 enthält diese Commits.

Fehlerkorrekturen

  • Ermöglicht die Verarbeitung komprimierter und unkomprimierter Basisprofile (Ic61a0)
  • Beheben Sie MacrobenchmarkScope.dropShaderCache(), damit die Broadcast Registry im Profileinstaller-Manifest nicht mehr abstürzt (I5c728, b/258619948).

Version 1.3.0-alpha02

9. November 2022

androidx.profileinstaller:profileinstaller:1.3.0-alpha02 wird freigegeben. 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 und so eine konsistente Leistung bei Kaltstarts zu gewährleisten, insbesondere beim Kompilieren von 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 wird freigegeben. Version 1.3.0-alpha01 enthält diese Commits.

API-Änderungen

  • ProfileVerifier API hinzugefügt, um von der App aus zu prüfen, ob ein Basisprofil kompiliert oder geplant wurde oder fehlt (I263a4, b/246653809)
  • Fügt einen neuen Shell-Broadcast hinzu, der es MacroBenchmark ermöglicht, Profildaten im Arbeitsspeicher vollständig auf das Laufwerk zu übertragen, damit sie in die Referenzprofilgenerierung einbezogen werden. Dies ist erforderlich, um mit der Makro-Benchmark-Bibliothek 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 wird freigegeben. Version 1.2.2 enthält diese Commits.

Fehlerkorrekturen

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

Version 1.2.1

Version 1.2.1

7. Dezember 2022

androidx.profileinstaller:profileinstaller:1.2.1 wird freigegeben. 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 wird freigegeben. Version 1.2.0 enthält diese Commits.

Wichtige Änderungen seit Version 1.1.0

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

Version 1.2.0-rc01

15. Juni 2022

androidx.profileinstaller:profileinstaller:1.2.0-rc01 wird freigegeben. 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 wird freigegeben. Version 1.2.0-beta03 enthält diese Commits.

Version 1.2.0-beta02

18. Mai 2022

androidx.profileinstaller:profileinstaller:1.2.0-beta02 wird freigegeben. Version 1.2.0-beta02 enthält diese Commits.

  • Keine Änderungen erforderlich, um Compose 1.2.0-beta02-Versionen zu unterstützen.

Version 1.2.0-beta01

11. Mai 2022

androidx.profileinstaller:profileinstaller:1.2.0-beta01 wird freigegeben. Version 1.2.0-beta01 enthält diese Commits.

API-Änderungen

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

Fehlerkorrekturen

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

Version 1.2.0-alpha02

26. Januar 2022

androidx.profileinstaller:profileinstaller:1.2.0-alpha02 wird freigegeben. 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 wird freigegeben. Version 1.2.0-alpha01 enthält diese Commits.

Neue Funktionen

  • Unterstützung für das ART-Profilformat hinzufügen, das ab Android 12 verwendet wird.

Version 1.1.0

Version 1.1.0

9. Februar 2022

androidx.profileinstaller:profileinstaller:1.1.0 wird freigegeben. Version 1.1.0 enthält diese Commits.

Version 1.1.0-rc01

15. Dezember 2021

androidx.profileinstaller:profileinstaller:1.1.0-rc01 wird seit Version 1.1.0-beta04 ohne Updates 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 wird freigegeben. Version 1.1.0-beta04 enthält diese Commits.

Version 1.1.0-beta03

17. November 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta03 wird freigegeben. Version 1.1.0-beta03 enthält diese Commits.

Fehlerkorrekturen

  • Aktualisiert zur Unterstützung von Compose 1.1.0-beta03

Version 1.1.0-beta02

3. November 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta02 wird freigegeben. Version 1.1.0-beta02 enthält diese Commits.

Fehlerkorrekturen

  • Aktualisiert zur Unterstützung von Compose 1.1.0-beta02

Version 1.1.0-beta01

27. Oktober 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta01 wird freigegeben. 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 wird freigegeben. 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 wird freigegeben. Version 1.1.0-alpha06 enthält diese Commits.

Fehlerkorrekturen

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

Version 1.1.0-alpha05

15. September 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha05 wird freigegeben. Version 1.1.0-alpha05 enthält diese Commits.

Fehlerkorrekturen

  • Probleme mit der Transcodierung des Android Nougat- und Android Oreo-Profils für Multidex-APKs wurden behoben.

Version 1.1.0-alpha04

1. September 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha04 wird freigegeben. Version 1.1.0-alpha04 enthält diese Commits.

Fehlerkorrekturen

  • Beheben Sie ProfileInstaller, damit Apps, die Referenzprofile verwenden, Makro-Benchmarks mit CompilationMode.BaselineProfile ausführen können. (I42657, b/196074999)

Version 1.1.0-alpha03

18. August 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha03 wird freigegeben. Version 1.1.0-alpha03 enthält diese Commits.

Fehlerkorrekturen

  • Ändern Sie das Verhalten beim Überspringen von Profileinstaller, damit „PackageInfo.lastUpdatedTime“ in einer Datei im Dateiverzeichnis der Anwendung protokolliert und vor der Installation des Profils bei der nächsten Ausführung verglichen wird. (Ib93d1)
  • Passen Sie das Profilformat auf P-, Q- und R-Geräten an, um die ART-Anforderungen zu erfüllen (I84e89).

Version 1.1.0-alpha02

4. August 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha02 wird freigegeben. Version 1.1.0-alpha02 enthält diese Commits.

Aktualisiert und mit Compose 1.1.0-alpha01 kompatibel.

Version 1.1.0-alpha01

21. Juli 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha01 wird freigegeben. 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 wird freigegeben. Version 1.0.4 enthält diese Commits.

  • Für Compose 1.0.4 aktualisiert

Version 1.0.3

29. September 2021

androidx.profileinstaller:profileinstaller:1.0.3 wird freigegeben. Version 1.0.3 enthält diese Commits.

  • Für Compose 1.0.3 aktualisiert

Version 1.0.2

1. September 2021

androidx.profileinstaller:profileinstaller:1.0.2 wird freigegeben. Version 1.0.2 enthält diese Commits.

Fehlerkorrekturen

  • Profiltranscodierung für P-, Q- und R-Geräte hinzugefügt. Diese Änderung bedeutet, dass diese Geräte das Profil transcodieren und somit sicherstellen, dass das geschriebene Profil immer von ART verwendet werden kann. Zuvor wurde die Transcodierung auf diesen Plattformen übersprungen, wodurch ART manchmal das Quellprofil nicht verarbeiten konnte. Keine Änderungen an Entwickler-APIs.

Version 1.0.1

4. August 2021

androidx.profileinstaller:profileinstaller:1.0.1 wird freigegeben. Version 1.0.1 enthält diese Commits.

Aktualisiert und mit Compose 1.0.1 kompatibel.

Version 1.0.0

28. Juli 2021

androidx.profileinstaller:profileinstaller:1.0.0 wird freigegeben. Version 1.0.0 enthält diese Commits.

Hauptfunktionen von Version 1.0.0

Profile Installer ist eine neue Bibliothek, mit der Bibliotheken und Anwendungen Profilregeln definieren und ART-Profilinformationen mit einem APK bündeln können. Diese Bibliothek installiert diese Profile nach dem Start der App. Dies kann zur Verbesserung der Anwendungsleistung genutzt werden.

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

Version 1.0.0-rc02

14. Juli 2021

androidx.profileinstaller:profileinstaller:1.0.0-rc02 wird freigegeben. Version 1.0.0-rc02 enthält diese Commits.

Version 1.0.0-rc01

1. Juli 2021

androidx.profileinstaller:profileinstaller:1.0.0-rc01 wird freigegeben. Version 1.0.0-rc01 enthält diese Commits.

Dies ist eine RC-Version ohne Änderungen im Vergleich zur Betaversion.

Version 1.0.0-beta01

16. Juni 2021

androidx.profileinstaller:profileinstaller:1.0.0-beta01 wird freigegeben. Version 1.0.0-beta01 enthält diese Commits.

Zweck der Bibliothek

Profile Installer ist eine neue Bibliothek, mit der Bibliotheken und Anwendungen Profilregeln definieren und ART-Profilinformationen mit einem APK bündeln können. Diese Bibliothek installiert diese Profile nach dem Start der App. Dies kann zur Verbesserung der Anwendungsleistung genutzt werden.

Die Installation des Profils erfolgt mit der Bibliothek „androidx.startup“. Falls die Profilinstallation aus irgendeinem Grund deaktiviert werden soll, kann er das Manifest ändern, um sie 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 Ihre App anspruchsvolle Startanforderungen hat und Sie die Profilinstallation manuell mit der ProfileInstaller.writeProfile API auslösen möchten.

Was sind Profilregeln?

  • Profilregeln für eine Bibliothek sind 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 menschenlesbaren ART-Profilformats, das bei Verwendung von adb shell profman --dump-classes-and-methods ... verwendet wird. Für die Ausrichtung auf Methoden oder Klassen stehen zwei Regeln für diese Regeln zur Verfügung.

  • Eine Methodenregel hat das folgende Muster:

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

    <CLASS_DESCRIPTOR>
    
  • In diesem Fall ist <FLAGS> 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, 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 eine "heiße" Methode ist und im Voraus kompiliert werden sollte.

  • Eine Methode mit dem Flag S gibt an, dass es sich um eine Methode handelt, die beim Start aufgerufen wird und im Voraus kompiliert werden sollte, um Kosten für Kompilierung und 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 weist darauf hin, dass sie beim Start verwendet wird und im Heap vorab zugewiesen werden sollte, um die Kosten für das Laden der Klasse zu vermeiden.

Wie funktioniert das?

  • Bibliotheken können diese Regeln definieren, die in AAR-Artefakte verpackt werden. Wenn dann ein APK erstellt wird, das diese Artefakte enthält, werden diese Regeln zusammengeführt und die zusammengeführten Regeln verwendet, um ein kompaktes binäres ART-Profil zu erstellen, das für das APK spezifisch ist. ART kann dieses Profil dann bei der Installation des APK auf Geräten nutzen, um vorab eine bestimmte Teilmenge der Anwendung zu kompilieren und so die Leistung der Anwendung, insbesondere der ersten Ausführung, zu verbessern. Dies hat keine Auswirkungen auf Anwendungen, die debuggen werden können.

  • Regeldateien sollten den Namen baseline-prof.txt haben und im Stammverzeichnis Ihres Hauptquellsatzes abgelegt werden. Es sollte sich dabei um eine Datei auf der gleichen Ebene wie die Datei AndroidManifset.xml handeln.

  • 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
    

Profile erfordern ein Gleichgewicht

  • Richtig gestaltete Profile, die Methoden und Klassen, die im Startpfad enthalten und leistungskritisch sind, richtig priorisieren, erzielen die besten Ergebnisse. Wenn jedoch zu viele Methoden oder Klassen in Profile aufgenommen werden, kann sich das negativ auf den Speicherverbrauch und die Laufwerksnutzung auswirken. Daher wird empfohlen, beim Definieren eigener Profilregeln konservativ zu beginnen.