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 actual Próxima versión potencial Versión beta Versión alfa
14 de julio de 2021 - 1.0.0-rc02 - -

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.1.0-alpha01"
}

Kotlin

dependencies {
    implementation("androidx.profileinstaller:profileinstaller:1.1.0-alpha01")
}

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 en esta biblioteca antes de crear uno nuevo. Para agregar tu voto a un error existente, haz clic en el botón de la estrella.

Cómo crear un error nuevo

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

Versión 1.0.0

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.