Programma di installazione profili

  
Consente alle librerie di precompilare in anticipo le tracce di compilazione in modo che possano essere lette da ART.
Aggiornamento più recente Release stabile Candidato per la release Versione beta Release alpha
7 febbraio 2024 1.3.1 - - 1.4.0-alpha01

Dichiarazione delle dipendenze

Per aggiungere una dipendenza a ProfileInstaller, devi aggiungere il Repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il Repository Maven di Google.

Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle per l'app o il modulo:

Trendy

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

Kotlin

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

Per ulteriori informazioni sulle dipendenze, vedi Aggiungere dipendenze build.

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se rilevi nuovi problemi o hai idee per migliorare la libreria. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne una nuova. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Crea un nuovo problema

Per ulteriori informazioni, consulta la documentazione di Issue Tracker.

Versione 1.4

Versione 1.4.0-alpha01

7 febbraio 2024

androidx.profileinstaller:profileinstaller:1.4.0-alpha01 viene rilasciato. La versione 1.4.0-alpha01 contiene questi commit.

Correzioni di bug

  • Aggiunto codice di errore per nessun profilo incorporato nello strumento di verifica del profilo. (Ifb109, b/313928520).
  • È stato corretto l'arresto anomalo durante l'eliminazione degli wiper su Android U (API 34) e sugli emulatori. (I031ca, b/274314544).
  • Supporto per Android U nel programma di installazione del profilo attivato. (Iaf177)
  • Risolto il problema del programma di installazione del profilo su Android U che non funzionava perché il profilo corrente non è stato creato vuoto all'avvio del processo. (Ie3899)
  • Correggi la transcodifica bitmap del metodo nel formato del profilo V_015S. (aosp/2906631) e (aosp/2847740)

Versione 1.3

Versione 1.3.1

3 maggio 2023

androidx.profileinstaller:profileinstaller:1.3.1 viene rilasciato. La versione 1.3.1 contiene questi commit.

Correzioni di bug

  • Supporto per Android U nel programma di installazione del profilo attivato (Iaf177)
  • Risolto il problema del programma di installazione del profilo su Android U che non funzionava perché il profilo corrente non è stato creato vuoto all'avvio del processo. (Ie3899)

Versione 1.3.0

22 marzo 2023

androidx.profileinstaller:profileinstaller:1.3.0 viene rilasciato. La versione 1.3.0 contiene questi commit.

Modifiche importanti dalla versione 1.2.0

  • È stato corretto un NullPointerException in ProfileInstallReceiver. (b/243851384)
  • È stata aggiunta l'API ProfileVerifier per controllare dall'interno dell'app se un profilo di riferimento è stato compilato, pianificato o non è presente (I263a4, b/246653809)
  • Aggiunge una nuova trasmissione shell che consente a Macrobenchmark di eliminare completamente i dati del profilo in memoria su disco, da includere nella generazione del profilo di base. Questa operazione è necessaria per utilizzare la libreria di macrobenchmark per acquisire i profili di riferimento con BaselineProfileRule e valutare il rendimento del profilo utilizzando CompilationMode.Partial(warmupIterations).
  • È stato aggiunto un codice diagnostico per rilevare i profili di riferimento compressi. I profili di base compressi non possono essere installati da Profileinstall in Macrobenchmarks o in produzione a causa del sovraccarico della CPU e devono essere evitati quando si crea l'app aggiornandola a Studio/AGP Electric Eel o alla versione bundletool 1.13.1(I86413, b/261998144)
  • Sono stati aggiunti hook per macrobenchmark per acquisire i profili e rilasciare la cache dello Shader, necessari per generare profili di riferimento o macrobenchmarking su dispositivi non rooted (Ie0a7d, b/250083467, b/253094958) (Ia5171, b/231455742

Versione 1.3.0-rc01

8 marzo 2023

androidx.profileinstaller:profileinstaller:1.3.0-rc01 viene rilasciato senza modifiche dall'ultima versione beta. La versione 1.3.0-rc01 contiene questi commit.

Versione 1.3.0-beta01

8 febbraio 2023

androidx.profileinstaller:profileinstaller:1.3.0-beta01 viene rilasciato. La versione 1.3.0-beta01 contiene questi commit.

Modifiche alle API

  • Rimuove il supporto per la gestione dei profili compressi: l'apertura e la decompressione porta a una regressione di 10 secondi nell'utilizzo della CPU durante l'avvio della CPU, quindi è stata aggiunta una diagnostica per rilevare profili di riferimento compressi in modo errato. (I86413, b/261998144)

Versione 1.3.0-alpha03

11 gennaio 2023

androidx.profileinstaller:profileinstaller:1.3.0-alpha03 viene rilasciato. La versione 1.3.0-alpha03 contiene questi commit.

Correzioni di bug

  • Consente la gestione dei profili di riferimento compressi o non compressi (Ic61a0)
  • Correggi l'arresto anomalo di MacrobenchmarkScope.dropShaderCache() in modo che non si verifichi più l'arresto anomalo correggendo il registro delle trasmissioni nel file manifest del programma di installazione del profilo (I5c728, b/258619948)

Versione 1.3.0-alpha02

9 novembre 2022

androidx.profileinstaller:profileinstaller:1.3.0-alpha02 viene rilasciato. La versione 1.3.0-alpha02 contiene questi commit.

Modifiche alle API

  • È stato aggiunto un hook per i benchmark in modo da eliminare la cache delloshar, in modo da garantire prestazioni coerenti per le startup a freddo, soprattutto durante la compilazione con profili da iterazioni di riscaldamento. Questo aggiornamento è necessario per misurare gli avvii a freddo utilizzando benchmark-macro-junit4:1.2.0-alpha05 o versioni successive. Per le modifiche all'API della libreria di benchmark, consulta la pagina Benchmark 1.2.0-alpha07. (Ia5171, b/231455742)

Versione 1.3.0-alpha01

24 ottobre 2022

androidx.profileinstaller:profileinstaller:1.3.0-alpha01 viene rilasciato. La versione 1.3.0-alpha01 contiene questi commit.

Modifiche alle API

  • È stata aggiunta l'API ProfileVerifier per controllare dall'interno dell'app se un profilo di riferimento è stato compilato, pianificato o non è presente (I263a4, b/246653809)
  • Aggiunge una nuova trasmissione shell che consente a Macrobenchmark di eliminare completamente i dati del profilo in memoria su disco, da includere nella generazione del profilo di base. Questa operazione è necessaria per utilizzare la libreria di macrobenchmark per acquisire i profili di riferimento con BaselineProfileRule e valutare il rendimento del profilo utilizzando CompilationMode.Partial(warmupIterations). (Ie0a7d, b/250083467, b/253094958).

Versione 1.2.2

Versione 1.2.2

11 gennaio 2023

androidx.profileinstaller:profileinstaller:1.2.2 viene rilasciato. La versione 1.2.2 contiene questi commit.

Correzioni di bug

  • Consente la gestione dei profili di riferimento compressi o non compressi (Ic61a0)

Versione 1.2.1

Versione 1.2.1

7 dicembre 2022

androidx.profileinstaller:profileinstaller:1.2.1 viene rilasciato. La versione 1.2.1 contiene questi commit.

Nuove funzionalità

  • Attiva il programma di installazione del profilo per S_V2 (API 32) e TIRAMISU (API 33) (b/254900303).

Versione 1.2.0

Versione 1.2.0

27 luglio 2022

androidx.profileinstaller:profileinstaller:1.2.0 viene rilasciato. La versione 1.2.0 contiene questi commit.

Modifiche importanti dalla versione 1.1.0

  • Aggiunto il supporto per il formato del profilo ART utilizzato su Android 12 e in futuro.
  • Aggiungi nuove API in ProfileInstallReceiver per ottenere risultati più coerenti con Macrobenchmarks quando utilizzi i profili di riferimento.

Versione 1.2.0-rc01

15 giugno 2022

androidx.profileinstaller:profileinstaller:1.2.0-rc01 viene rilasciato. La versione 1.2.0-rc01 contiene questi commit.

  • Questa versione è identica a androidx.profileinstaller:profileinstaller:1.2.0-beta03.

Versione 1.2.0-beta03

1° giugno 2022

androidx.profileinstaller:profileinstaller:1.2.0-beta03 viene rilasciato. La versione 1.2.0-beta03 contiene questi commit.

Versione 1.2.0-beta02

18 maggio 2022

androidx.profileinstaller:profileinstaller:1.2.0-beta02 viene rilasciato. La versione 1.2.0-beta02 contiene questi commit.

  • Non sono necessarie modifiche per supportare le versioni di Compose 1.2.0-beta02.

Versione 1.2.0-beta01

11 maggio 2022

androidx.profileinstaller:profileinstaller:1.2.0-beta01 viene rilasciato. La versione 1.2.0-beta01 contiene questi commit.

Modifiche alle API

  • Aggiungi nuove API in ProfileInstallReceiver per ottenere risultati più coerenti con Macrobenchmarks quando utilizzi i profili di riferimento. (If2ae5, b/215740637).

Correzioni di bug

  • Il programma di installazione del profilo genera un messaggio utile quando tenta di utilizzare il formato dei metadati V_001 su Android 12 e versioni successive. (aosp/1978526, b/217502387)
  • Il programma di installazione del profilo ora utilizza androidx.startup versione 1.1.1. (aosp/2077099, b/229828376)

Versione 1.2.0-alpha02

26 gennaio 2022

androidx.profileinstaller:profileinstaller:1.2.0-alpha02 viene rilasciato. La versione 1.2.0-alpha02 contiene questi commit.

Questa versione è identica a 1.2.0-alpha01.

Versione 1.2.0-alpha01

12 gennaio 2022

androidx.profileinstaller:profileinstaller:1.2.0-alpha01 viene rilasciato. La versione 1.2.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Aggiungi il supporto per il formato del profilo ART utilizzato su Android 12 e versioni successive.

Versione 1.1.0

Versione 1.1.0

9 febbraio 2022

androidx.profileinstaller:profileinstaller:1.1.0 viene rilasciato. La versione 1.1.0 contiene questi commit.

Versione 1.1.0-rc01

15 dicembre 2021

androidx.profileinstaller:profileinstaller:1.1.0-rc01 viene rilasciato senza aggiornamenti dalla versione 1.1.0-beta04. La versione 1.1.0-rc01 contiene questi commit.

Versione 1.1.0-beta04

1° dicembre 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta04 viene rilasciato. La versione 1.1.0-beta04 contiene questi commit.

Versione 1.1.0-beta03

17 novembre 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta03 viene rilasciato. La versione 1.1.0-beta03 contiene questi commit.

Correzioni di bug

  • Aggiornato per supportare Compose 1.1.0-beta03

Versione 1.1.0-beta02

3 novembre 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta02 viene rilasciato. La versione 1.1.0-beta02 contiene questi commit.

Correzioni di bug

  • Aggiornato per supportare Compose 1.1.0-beta02

Versione 1.1.0-beta01

27 ottobre 2021

androidx.profileinstaller:profileinstaller:1.1.0-beta01 viene rilasciato. La versione 1.1.0-beta01 contiene questi commit.

  • Nessuna modifica dalla versione 1.1.0-alpha07.

Versione 1.1.0-alpha07

13 ottobre 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha07 viene rilasciato. La versione 1.1.0-alpha07 contiene questi commit.

Nuove funzionalità

  • Aggiunto il supporto per Prof su Android N

Versione 1.1.0-alpha06

29 settembre 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha06 viene rilasciato. La versione 1.1.0-alpha06 contiene questi commit.

Correzioni di bug

  • Sono stati risolti i problemi di transcodifica del programma di installazione dei profili su N, O e O_MR1. (I12d75)

Versione 1.1.0-alpha05

15 settembre 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha05 viene rilasciato. La versione 1.1.0-alpha05 contiene questi commit.

Correzioni di bug

  • È stata corretta la transcodifica del profilo Android Nougat e del profilo Android Oreo per gli APK multidex.

Versione 1.1.0-alpha04

1° settembre 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha04 viene rilasciato. La versione 1.1.0-alpha04 contiene questi commit.

Correzioni di bug

  • Correggi ProfileInstaller per consentire alle app che utilizzano profili di riferimento di eseguire MacroBenchmark più facilmente con CompilationMode.BaselineProfile. (I42657, b/196074999)

Versione 1.1.0-alpha03

18 agosto 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha03 viene rilasciato. La versione 1.1.0-alpha03 contiene questi commit.

Correzioni di bug

  • Modifica il comportamento di ignorare del programma di installazione del profilo per registrare il valore PackageInfo.lastUpdatedTime in un file nella directory dei file dell'app e confrontarlo prima di installare il profilo alla successiva esecuzione. (Ib93d1)
  • Regola il formato del profilo sui dispositivi P, Q, R per garantire la conformità ai requisiti ART (I84e89)

Versione 1.1.0-alpha02

4 agosto 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha02 viene rilasciato. La versione 1.1.0-alpha02 contiene questi commit.

Aggiornato per essere compatibile con Compose 1.1.0-alpha01.

Versione 1.1.0-alpha01

21 luglio 2021

androidx.profileinstaller:profileinstaller:1.1.0-alpha01 viene rilasciato. La versione 1.1.0-alpha01 contiene questi commit.

Correzioni di bug

  • Risolto il bug che in alcune circostanze attivava la modalità con restrizioni.

Versione 1.0

Versione 1.0.4

13 ottobre 2021

androidx.profileinstaller:profileinstaller:1.0.4 viene rilasciato. La versione 1.0.4 contiene questi commit.

  • Aggiornato per supportare Compose 1.0.4

Versione 1.0.3

29 settembre 2021

androidx.profileinstaller:profileinstaller:1.0.3 viene rilasciato. La versione 1.0.3 contiene questi commit.

  • Aggiornato per supportare Compose 1.0.3

Versione 1.0.2

1° settembre 2021

androidx.profileinstaller:profileinstaller:1.0.2 viene rilasciato. La versione 1.0.2 contiene questi commit.

Correzioni di bug

  • Transcodifica del profilo aggiunta per dispositivi P, Q, R. In questo modo, questi dispositivi transcodificano il profilo, garantendo che il profilo scritto sia sempre utilizzabile da ART. In precedenza la transcodifica veniva saltata su queste piattaforme, il che a volte fa sì che ART non riesca a elaborare il profilo di origine. Nessuna modifica alle API per sviluppatori.

Versione 1.0.1

4 agosto 2021

androidx.profileinstaller:profileinstaller:1.0.1 viene rilasciato. La versione 1.0.1 contiene questi commit.

Aggiornato per essere compatibile con Compose 1.0.1.

Versione 1.0.0

28 luglio 2021

androidx.profileinstaller:profileinstaller:1.0.0 viene rilasciato. La versione 1.0.0 contiene questi commit.

Funzionalità principali della versione 1.0.0

Il programma di installazione del profilo è una nuova libreria che consente a librerie e applicazioni di definire "regole del profilo" e di raggruppare le informazioni del profilo ART con un APK. Questa libreria installerà i profili dopo l'avvio dell'applicazione. Questa funzionalità può essere utilizzata per migliorare le prestazioni dell'applicazione.

Per ulteriori informazioni su queste regole del profilo e sul loro funzionamento, consulta le note di rilascio dettagliate all'indirizzo 1.0.0-beta01.

Versione 1.0.0-rc02

14 luglio 2021

androidx.profileinstaller:profileinstaller:1.0.0-rc02 viene rilasciato. La versione 1.0.0-rc02 contiene questi commit.

Versione 1.0.0-rc01

1° luglio 2021

androidx.profileinstaller:profileinstaller:1.0.0-rc01 viene rilasciato. La versione 1.0.0-rc01 contiene questi commit.

Questa è una release RC senza modifiche rispetto alla versione beta.

Versione 1.0.0-beta01

16 giugno 2021

androidx.profileinstaller:profileinstaller:1.0.0-beta01 viene rilasciato. La versione 1.0.0-beta01 contiene questi commit.

Scopo della raccolta

Il programma di installazione del profilo è una nuova libreria che consente a librerie e applicazioni di definire "regole del profilo" e di raggruppare le informazioni del profilo ART con un APK. Questa libreria installerà i profili dopo l'avvio dell'applicazione. Questa funzionalità può essere utilizzata per migliorare le prestazioni dell'applicazione.

L'installazione di questo profilo viene eseguita con la libreria androidx.startup. Se per qualsiasi motivo desideri disabilitare l'installazione del profilo, puoi modificare il file manifest per rimuoverlo:


       <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>

Ciò è particolarmente utile se la tua app ha requisiti di avvio non banali e vuoi attivare manualmente l'installazione del profilo utilizzando l'API ProfileInstaller.writeProfile.

Che cosa sono le regole del profilo?

  • Le regole del profilo per una libreria sono specificate in un file di testo baseline-prof.txt che si trova in src/main o nella directory equivalente. Il file specifica una regola per riga, dove una regola in questo caso è un pattern per la corrispondenza con metodi o classi della libreria. La sintassi di queste regole è un soprainsieme del formato del profilo ART leggibile che viene utilizzato quando si utilizza adb shell profman --dump-classes-and-methods .... Queste regole assumono una delle due forme per il targeting di metodi o classi.

  • Una regola del metodo avrà il seguente pattern:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • Una regola di classe avrà il seguente pattern:

    <CLASS_DESCRIPTOR>
    
  • Qui <FLAGS> contiene uno o più caratteri H, S e P per indicare se il metodo deve essere contrassegnato o meno come "Hot", "Startup" o "Post Startup".

  • <CLASS_DESCRIPTOR> è il descrittore della classe a cui appartiene il metodo scelto come target. Ad esempio, la classe androidx.compose.runtime.SlotTable avrà un descrittore Landroidx/compose/runtime/SlotTable;.

  • <METHOD_SIGNATURE> è la firma del metodo e include il nome, i tipi di parametro e i tipi restituiti del metodo. Ad esempio, il metodo fun isPlaced(): Boolean su LayoutNode ha la firma isPlaced()Z.

  • Questi pattern possono includere caratteri jolly (**, * e ?) in modo che una singola regola includa più metodi o classi.

A cosa servono le regole?

  • Un metodo con il flag H indica che si tratta di un metodo "ad accesso frequente" e deve essere compilato in anticipo.

  • Un metodo con il flag S indica che si tratta di un metodo che viene richiamato all'avvio e deve essere compilato in anticipo per evitare i costi di compilazione e interpretazione del metodo all'avvio.

  • Un metodo con il flag P indica che si tratta di un metodo che viene richiamato dopo l'avvio.

  • Una classe presente in questo file indica che viene utilizzata durante l'avvio e deve essere preallocata nell'heap per evitare i costi di caricamento della classe.

Come funziona?

  • Le librerie possono definire queste regole che verranno pacchettizzate in artefatti AAR. Quando viene creato un APK che include questi artefatti, queste regole vengono unite e le regole unite vengono utilizzate per creare un profilo ART binario compatto specifico per l'APK. ART può quindi sfruttare questo profilo quando l'APK viene installato sui dispositivi per compilare in anticipo un sottoinsieme specifico dell'applicazione al fine di migliorarne le prestazioni, in particolare la prima esecuzione. Tieni presente che ciò non avrà alcun effetto sulle applicazioni di cui è possibile eseguire il debug.

  • I file delle regole devono essere denominati baseline-prof.txt e posizionati nella directory radice del set di origine principale (dovrebbe essere un file di pari livello del file AndroidManifset.xml)

  • Al momento questi file vengono utilizzati solo se usi il plug-in Android per Gradle 7.0 o versioni successive e al momento è abilitato solo con un flag nel tuo gradle.properties:

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

I profili richiedono un saldo

  • I profili creati correttamente, che danno priorità in modo corretto ai metodi e alle classi che saranno nel percorso di avvio e che saranno critiche per le prestazioni, daranno i risultati migliori; tuttavia, l'inclusione di troppi metodi o classi nei profili può avere un effetto negativo netto in termini di consumo di memoria e utilizzo del disco, quindi è consigliabile iniziare in modo conservativo se si definiscono le regole del profilo.