ProfileInstaller

  
Permite que las bibliotecas prepropaguen los registros de compilación de manera anticipada para que ART los lea.
Actualización más reciente Versión estable Versión potencial Versión beta Versión alfa
7 de febrero de 2024 1.3.1 - - 1.4.0-alpha01

Cómo declarar dependencias

Para agregar una dependencia en ProfileInstaller, debes incluir el repositorio Maven de Google en tu proyecto. Lee el repositorio Maven de Google para obtener más información.

Agrega las dependencias de los artefactos que necesites en el archivo build.gradle de tu app o módulo:

Groovy

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

Kotlin

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

Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.

Comentarios

Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.

Crear un error nuevo

Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.

Versión 1.4

Versión 1.4.0-alpha01

7 de febrero de 2024

Lanzamiento de androidx.profileinstaller:profileinstaller:1.4.0-alpha01. La versión 1.4.0-alpha01 contiene estas confirmaciones.

Correcciones de errores

  • Se agregó un código de error para que no haya ningún perfil incorporado al verificador de perfiles. (Ifb109, b/313928520).
  • Se corrigió la falla que se producía cuando se descartaban sombreadores en Android U (nivel de API 34), así como en emuladores. (I031ca, b/274314544).
  • Se habilitó la compatibilidad con Android U en el instalador del perfil. (Iaf177).
  • Se corrigió el error del instalador de perfiles en Android U debido a que el perfil actual no se creaba vacío cuando se iniciaba el proceso (Ie3899).
  • Se corrigió la transcodificación del mapa de bits del método en el formato de perfil V_015S. (aosp/2906631) y (aosp/2847740).

Versión 1.3

Versión 1.3.1

3 de mayo de 2023

Lanzamiento de androidx.profileinstaller:profileinstaller:1.3.1. La versión 1.3.1 contiene estas confirmaciones.

Correcciones de errores

  • Se habilitó la compatibilidad con Android U en el instalador de perfiles (Iaf177).
  • Se corrigió el error del instalador de perfiles en Android U debido a que el perfil actual no se creaba vacío cuando se iniciaba el proceso (Ie3899).

Versión 1.3.0

22 de marzo de 2023

Lanzamiento de androidx.profileinstaller:profileinstaller:1.3.0. La versión 1.3.0 contiene estas confirmaciones.

Cambios importantes desde 1.2.0

  • Se corrigió una NullPointerException en ProfileInstallReceiver. (b/243851384).
  • Se agregó la API de ProfileVerifier para verificar desde la app si se compiló, programó o falta un perfil de referencia (I263a4, b/246653809).
  • Se agregó una nueva emisión de shell que permite que Macrobenchmark vacíe por completo los datos del perfil de la memoria al disco, para incluirlos en la generación del perfil de referencia. Esto es necesario para usar la biblioteca de macrocomparativas a fin de capturar perfiles de referencia con BaselineProfileRule y evaluar el rendimiento del perfil con CompilationMode.Partial(warmupIterations).
  • Se agregó un código de diagnóstico para detectar perfiles de Baseline comprimidos. Profileinstaller no puede instalar los perfiles de Baseline comprimidos en Macrobenchmarks ni en producción debido a la sobrecarga de la CPU, y se deben evitar cuando compilas tu app actualizando a Studio/AGP Electric Eel o a la versión de bundletool 1.13.1(I86413, b/261998144).
  • Se agregaron hooks para macrocomparativas a fin de capturar perfiles y la caché del sombreador, que son necesarios para generar perfiles de Baseline o macrocomparativas en dispositivos sin permisos de administrador (Ie0a7d, b/250083467, b/253094958) (Ia5171, b/231455742).

Versión 1.3.0-rc01

8 de marzo de 2023

Lanzamiento de androidx.profileinstaller:profileinstaller:1.3.0-rc01 sin modificaciones desde la última versión beta. La versión 1.3.0-rc01 contiene estas confirmaciones.

Versión 1.3.0-beta01

8 de febrero de 2023

Lanzamiento de androidx.profileinstaller:profileinstaller:1.3.0-beta01. La versión 1.3.0-beta01 contiene estas confirmaciones.

Cambios en la API

  • Se quitó la compatibilidad para controlar perfiles comprimidos: abrir y descomprimir genera una regresión de 10 s de ms en el uso de CPU durante el inicio, por lo que, en su lugar, se agregó un diagnóstico para descubrir perfiles de referencia comprimidos de forma incorrecta. (I86413, b/261998144).

Versión 1.3.0-alpha03

11 de enero de 2023

Lanzamiento de androidx.profileinstaller:profileinstaller:1.3.0-alpha03. La versión 1.3.0-alpha03 contiene estas confirmaciones.

Correcciones de errores

  • Se habilita el manejo de perfiles de Baseline comprimidos o sin comprimir (Ic61a0).
  • Se corrigió MacrobenchmarkScope.dropShaderCache() para que ya no falle. Para ello, se modificó el registro de transmisión en el manifiesto de profileinstaller (I5c728, b/258619948).

Versión 1.3.0-alpha02

9 de noviembre de 2022

Lanzamiento de androidx.profileinstaller:profileinstaller:1.3.0-alpha02. La versión 1.3.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Se agregó un hook para las comparativas para descartar la caché del sombreador y garantizar un rendimiento coherente para los inicios en frío, en especial cuando se compilan con perfiles a partir de iteraciones de preparación. Esta actualización es necesaria para medir los inicios en frío que usan benchmark-macro-junit4:1.2.0-alpha05 o versiones posteriores. Para conocer los cambios en la API de la biblioteca Benchmark, consulta la página Benchmark 1.2.0-alpha07. (Ia5171, b/231455742)

Versión 1.3.0-alpha01

24 de octubre de 2022

Lanzamiento de androidx.profileinstaller:profileinstaller:1.3.0-alpha01. La versión 1.3.0-alpha01 contiene estas confirmaciones.

Cambios en la API

  • Se agregó la API de ProfileVerifier para comprobar desde la app si se compiló, programó o falta un perfil de referencia (I263a4, b/246653809).
  • Se agregó una nueva emisión de shell que permite que Macrobenchmark vacíe por completo los datos del perfil de la memoria al disco, para incluirlos en la generación del perfil de referencia. Esto es necesario para usar la biblioteca de macrocomparativas a fin de capturar perfiles de referencia con BaselineProfileRule y evaluar el rendimiento del perfil con CompilationMode.Partial(warmupIterations). (Ie0a7d, b/250083467, b/253094958).

Versión 1.2.2

Versión 1.2.2

11 de enero de 2023

Lanzamiento de androidx.profileinstaller:profileinstaller:1.2.2. La versión 1.2.2 contiene estas confirmaciones.

Correcciones de errores

  • Se habilita el manejo de perfiles de Baseline comprimidos o sin comprimir (Ic61a0).

Versión 1.2.1

Versión 1.2.1

7 de diciembre de 2022

Lanzamiento de androidx.profileinstaller:profileinstaller:1.2.1. La versión 1.2.1 contiene estas confirmaciones.

Nuevas funciones

  • Se habilitó profileinstaller para S_V2 (API 32) y TIRAMISU (API 33) (b/254900303).

Versión 1.2.0

Versión 1.2.0

27 de julio de 2022

Lanzamiento de androidx.profileinstaller:profileinstaller:1.2.0. La versión 1.2.0 contiene estas confirmaciones.

Cambios importantes desde la versión 1.1.0

  • Se agregó compatibilidad con el formato de perfil de ART que se usa en Android 12 y versiones posteriores.
  • Se agregaron nuevas APIs en ProfileInstallReceiver para obtener resultados más coherentes con Macrobenchmarks cuando se usan perfiles de referencia.

Versión 1.2.0-rc01

15 de junio de 2022

Lanzamiento de androidx.profileinstaller:profileinstaller:1.2.0-rc01. La versión 1.2.0-rc01 contiene estas confirmaciones.

  • Esta versión es idéntica a androidx.profileinstaller:profileinstaller:1.2.0-beta03.

Versión 1.2.0-beta03

1 de junio de 2022

Lanzamiento de androidx.profileinstaller:profileinstaller:1.2.0-beta03. La versión 1.2.0-beta03 contiene estas confirmaciones.

Versión 1.2.0-beta02

18 de mayo de 2022

Lanzamiento de androidx.profileinstaller:profileinstaller:1.2.0-beta02. La versión 1.2.0-beta02 contiene estas confirmaciones.

  • No se requieren cambios para admitir las versiones Compose 1.2.0-beta02.

Versión 1.2.0-beta01

11 de mayo de 2022

Lanzamiento de androidx.profileinstaller:profileinstaller:1.2.0-beta01. La versión 1.2.0-beta01 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron nuevas API en ProfileInstallReceiver para obtener resultados más coherentes con Macrobenchmarks cuando se usan perfiles de Baseline (If2ae5, b/215740637).

Correcciones de errores

  • El instalador de perfiles muestra un mensaje útil cuando intenta usar el formato V_001 de metadatos en Android 12 y versiones posteriores (aosp/1978526, b/217502387).
  • El instalador de perfiles ahora usa androidx.startup versión 1.1.1 (aosp/2077099, b/229828376).

Versión 1.2.0-alpha02

26 de enero de 2022

Lanzamiento de androidx.profileinstaller:profileinstaller:1.2.0-alpha02. La versión 1.2.0-alpha02 contiene estas confirmaciones.

Esta versión es idéntica a 1.2.0-alpha01.

Versión 1.2.0-alpha01

12 de enero de 2022

Lanzamiento de androidx.profileinstaller:profileinstaller:1.2.0-alpha01. La versión 1.2.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó compatibilidad con el formato de perfil de ART que se usa en Android 12 y versiones posteriores.

Versión 1.1.0

Versión 1.1.0

9 de febrero de 2022

Lanzamiento de androidx.profileinstaller:profileinstaller:1.1.0. La versión 1.1.0 contiene estas confirmaciones.

Versión 1.1.0-rc01

15 de diciembre de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.1.0-rc01 sin actualizaciones desde la versión 1.1.0-beta04. La versión 1.1.0-rc01 contiene estas confirmaciones.

Versión 1.1.0-beta04

1 de diciembre de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.1.0-beta04. La versión 1.1.0-beta04 contiene estas confirmaciones.

Versión 1.1.0-beta03

17 de noviembre de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.1.0-beta03. La versión 1.1.0-beta03 contiene estas confirmaciones.

Correcciones de errores

  • Se actualizó para admitir Compose 1.1.0-beta03.

Versión 1.1.0-beta02

3 de noviembre de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.1.0-beta02. La versión 1.1.0-beta02 contiene estas confirmaciones.

Correcciones de errores

  • Se actualizó para admitir Compose 1.1.0-beta02.

Versión 1.1.0-beta01

27 de octubre de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.1.0-beta01. La versión 1.1.0-beta01 contiene estas confirmaciones.

  • No hay cambios desde la versión 1.1.0-alpha07.

Versión 1.1.0-alpha07

13 de octubre de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.1.0-alpha07. La versión 1.1.0-alpha07 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó compatibilidad con profm en Android N.

Versión 1.1.0-alpha06

29 de septiembre de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.1.0-alpha06. La versión 1.1.0-alpha06 contiene estas confirmaciones.

Correcciones de errores

  • Se solucionaron los problemas de transcodificación del instalador de perfiles en N, O y O_MR1. (I12d75)

Versión 1.1.0-alpha05

15 de septiembre de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.1.0-alpha05. La versión 1.1.0-alpha05 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió la transcodificación de perfiles de Android Nougat y Android Oreo para APK de multidex.

Versión 1.1.0-alpha04

1 de septiembre de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.1.0-alpha04. La versión 1.1.0-alpha04 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió ProfileInstaller para facilitar que las apps que usan perfiles de referencia puedan ejecutar MacroBenchmarks mediante CompilationMode.BaselineProfile. (I42657, b/196074999)

Versión 1.1.0-alpha03

18 de agosto de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.1.0-alpha03. La versión 1.1.0-alpha03 contiene estas confirmaciones.

Correcciones de errores

  • Cambia el comportamiento de omisión de profileinstaller para registrar PackageInfo.lastUpdatedTime en un archivo en el directorio de archivos de la app y compáralo antes de instalar el perfil en la próxima ejecución. (Ib93d1)
  • Se ajustó el formato de perfil en dispositivos P, Q, R para cumplir con los requisitos de ART. (I84e89)

Versión 1.1.0-alpha02

4 de agosto de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.1.0-alpha02. La versión 1.1.0-alpha02 contiene estas confirmaciones.

Se actualizó para que sea compatible con Compose 1.1.0-alpha01.

Versión 1.1.0-alpha01

21 de julio de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.1.0-alpha01. La versión 1.1.0-alpha01 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió el error que activaba el modo estricto en algunas circunstancias.

Versión 1.0

Versión 1.0.4

13 de octubre de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.0.4. La versión 1.0.4 contiene estas confirmaciones.

  • Se actualizó para admitir Compose 1.0.4.

Versión 1.0.3

29 de septiembre de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.0.3. La versión 1.0.3 contiene estas confirmaciones.

  • Se actualizó para admitir Compose 1.0.3

Versión 1.0.2

1 de septiembre de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.0.2. La versión 1.0.2 contiene estas confirmaciones.

Correcciones de errores

  • Se agregó la transcodificación de perfiles para dispositivos P, Q y R. Este cambio implica que estos dispositivos transcodificarán el perfil, lo que garantiza que ART pueda usar siempre el perfil escrito. Anteriormente, se omitía la transcodificación en estas plataformas, lo que a veces hacía que ART no pudiera procesar el perfil fuente. No hay cambios en las API para desarrolladores.

Versión 1.0.1

4 de agosto de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.0.1. La versión 1.0.1 contiene estas confirmaciones.

Se actualizó para que sea compatible con Compose 1.0.1.

Versión 1.0.0

28 de julio de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.0.0. La versión 1.0.0 contiene estas confirmaciones.

Funciones principales de la versión 1.0.0

El instalador de perfiles es una nueva biblioteca que permite que las bibliotecas y las aplicaciones definan "reglas de perfiles" y agrupen información de perfiles de ART con un APK. Esta biblioteca instalará esos perfiles después del inicio de la app. Esto se puede usar para mejorar el rendimiento de una aplicación.

Consulta las notas detalladas de la versión 1.0.0-beta01 para obtener más información sobre estas reglas de perfil y el modo en el que funcionan.

Versión 1.0.0-rc02

14 de julio de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.0.0-rc02. La versión 1.0.0-rc02 contiene estas confirmaciones.

Versión 1.0.0-rc01

1 de julio de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.0.0-rc01. La versión 1.0.0-rc01 contiene estas confirmaciones.

Esta es una versión RC (candidata para el lanzamiento) sin cambios desde la versión beta.

Versión 1.0.0-beta01

16 de junio de 2021

Lanzamiento de androidx.profileinstaller:profileinstaller:1.0.0-beta01. La versión 1.0.0-beta01 contiene estas confirmaciones.

Propósito de la biblioteca

El instalador de perfiles es una nueva biblioteca que permite que las bibliotecas y las aplicaciones definan "reglas de perfiles" y agrupen información de perfiles de ART con un APK. Esta biblioteca instalará esos perfiles después del inicio de la app. Esto se puede usar para mejorar el rendimiento de una aplicación.

Esta instalación de perfiles se realiza con la biblioteca androidx.startup. Si por algún motivo quieres inhabilitar la instalación de perfiles, puedes modificar el manifiesto para quitarla:


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

Esto es muy útil si tu app tiene requisitos de inicio no triviales y quieres activar la instalación de perfiles manualmente con la API ProfileInstaller.writeProfile.

¿Qué son las reglas de perfiles?

  • Las reglas de perfiles de una biblioteca se especifican en un archivo de texto baseline-prof.txt, ubicado en src/main o el directorio equivalente. El archivo especifica una regla por línea, donde una regla en este caso es un patrón para la coincidencia con métodos o clases de la biblioteca. La sintaxis de estas reglas es un superconjunto del formato de perfil ART legible que se usa cuando se implementa adb shell profman --dump-classes-and-methods .... Estas reglas adoptan una de dos formas para segmentar métodos o clases.

  • Una regla de métodos tendrá el siguiente patrón:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • Una regla de clases tendrá el siguiente patrón:

    <CLASS_DESCRIPTOR>
    
  • Aquí, <FLAGS> es uno o más caracteres H, S y P, los cuales indican si este método debe marcarse como "Hot" (caliente), "Startup" (inicio) o "Post Startup" (posterior al inicio).

  • El <CLASS_DESCRIPTOR> es el descriptor de la clase a la que pertenece el método segmentado. Por ejemplo, la clase androidx.compose.runtime.SlotTable tendría un descriptor de Landroidx/compose/runtime/SlotTable;.

  • El <METHOD_SIGNATURE> es la firma del método y, además, incluye el nombre, los tipos de parámetros y los tipos de datos que muestra. Por ejemplo, el método fun isPlaced(): Boolean en LayoutNode tiene la firma isPlaced()Z.

  • Estos patrones pueden tener comodines (**, * y ?) para tener una sola regla que abarque varios métodos o clases.

¿Para qué sirven las reglas?

  • Un método con la marca H indica que es "hot" y debe compilarse con anticipación.

  • Un método con la marca S indica que se llama durante el inicio y debe compilarse con anticipación para evitar el costo de interpretarlo y compilarlo en el momento del inicio.

  • Un método que tiene la marca P indica que es un método que se llama después del inicio.

  • Una clase presente en este archivo indica que se usa durante el inicio y debe asignarse previamente en el montón para evitar el costo de cargarla.

¿Cómo funciona esto?

  • Las bibliotecas pueden definir estas reglas que se empaquetarán en artefactos de AAR. Luego, cuando se compila un APK que incluye esos artefactos, esas reglas se combinan y se usan para compilar un perfil de ART binario compacto específico para el APK. De esta manera, ART puede tomar este perfil cuando se instala el APK en dispositivos para compilar con anticipación un subconjunto específico de la aplicación a fin de mejorar su rendimiento, especialmente en la primera ejecución. Ten en cuenta que esta acción no tendrá efecto en las aplicaciones depurables.

  • Los archivos de reglas deben llamarse baseline-prof.txt y ubicarse en el directorio raíz del conjunto de orígenes principal (debe ser un archivo del mismo nivel que el archivo AndroidManifset.xml).

  • Actualmente, estos archivos solo se usarán si usas el complemento de Android para Gradle 7.0 o una versión posterior y, por ahora, solo están habilitados con una marca en tu gradle.properties:

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

Los perfiles requieren un saldo

  • Los perfiles creados de manera adecuada, que priorizan correctamente los métodos y las clases que estarán en la ruta de inicio y son fundamentales para el rendimiento, brindarán los mejores resultados. Sin embargo, incluir demasiados métodos o clases en los perfiles puede terminar teniendo un efecto negativo en el consumo de memoria y el uso del disco, por lo que te recomendamos que comiences con un ritmo conservador si vas a definir tus propias reglas de perfiles.