Créer des profils de démarrage

Les profils de démarrage sont un sous-ensemble des profils de référence. Les profils de démarrage permettent au système de compilation d'optimiser davantage les classes et les méthodes qu'ils contiennent en améliorant la mise en page du code dans les fichiers DEX de votre APK. Avec les profils de démarrage, le démarrage de votre application est au moins 15% plus rapide qu'avec les profils de référence seuls.

Figure 1. Amélioration de la localité du code par rapport à l'optimisation de mise en page DEX

Exigences

Nous vous recommandons d'utiliser les profils de démarrage avec les outils suivants:

  • Jetpack Macrobenchmark 1.2.0 ou version ultérieure
  • Plug-in Android Gradle 8.2 ou version ultérieure
  • Android Studio Iguana ou version ultérieure

Vous avez également besoin des paramètres suivants dans votre application:

  • R8 activé. Pour votre build, définissez isMinifyEnabled = true.
  • Optimisations de mise en page DEX activées. Dans le bloc baselineProfile {} du fichier de compilation du module d'application, définissez dexLayoutOptimization = true.

Créer un profil de démarrage

Android Studio crée un profil de démarrage avec un profil de référence lorsque vous utilisez le modèle par défaut du générateur de profils de référence.

Les étapes générales pour créer et générer un profil de démarrage sont les mêmes que celles permettant de créer un profil de référence.

La méthode par défaut pour créer un profil de démarrage consiste à utiliser le modèle du module du générateur de profils de référence depuis Android Studio. Cela inclut les interactions de démarrage qui forment un profil de démarrage de base. Pour enrichir ce profil de démarrage avec davantage de parcours utilisateur critiques (CUJ, Critical User Journeys), ajoutez les CUJ de démarrage de votre application à un bloc rule avec includeInStartupProfile défini sur true. Pour les applications simples, lancer la MainActivity de l'application peut être suffisant. Pour les applications plus complexes, envisagez d'ajouter les points d'entrée les plus courants à votre application, tels que le démarrage de l'application à partir de l'écran d'accueil ou le lancement via un lien profond.

L'extrait de code suivant montre un générateur de profils de référence (par défaut, le fichier BaselineProfileGenerator.kt) qui inclut le démarrage de votre application à partir de l'écran d'accueil et son lancement dans un lien profond. Le lien profond redirige directement vers le flux d'actualités de l'application, et non vers l'écran d'accueil de l'application.

@RunWith(AndroidJUnit4::class)
@LargeTest
class BaselineProfileGenerator {

    @get:Rule
    val rule = BaselineProfileRule()

    @Test
    fun generate() {
        rule.collect(
            packageName = "com.example.app",
            includeInStartupProfile = true
        ) {
            // Launch directly into the NEWS_FEED.
            startActivityAndWait(Intent().apply {
                setPackage(packageName)
                setAction("com.example.app.NEWS_FEED")
            })
        }
    }
}

Exécutez la configuration Generate Baseline Profile for app (Générer un profil de référence pour l'application), puis recherchez les règles du profil de démarrage sur src/<variant>/generated/baselineProfiles/startup-prof.txt.

Confirmer l'optimisation des profils de démarrage

Pour confirmer l'optimisation de la mise en page DEX, utilisez Android Studio pour ouvrir l'APK et vérifiez les classes dans les fichiers DEX. Assurez-vous que le champ classes.dex principal n'est pas entièrement renseigné. Si votre application se compose d'un seul fichier DEX, vous pouvez vérifier si elle contient deux fichiers DEX après avoir activé le profil de démarrage.

Android Studio vous avertit si les classes de démarrage ne rentrent pas dans un seul fichier DEX. Pour obtenir des informations de diagnostic qui incluent le nombre de méthodes autres que le démarrage dans les classes de démarrage, assurez-vous que le compilateur R8 est mis à jour vers la version 8.3.36-dev au minimum en apportant les modifications suivantes au fichier settings.gradle lorsque vous appliquez le profil de démarrage:

Kotlin

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url = uri("https://storage.googleapis.com/r8-releases/raw")
            }
        }
        dependencies {
            classpath("com.android.tools:r8:8.3.6-dev")
        }
    }
}

Groovy

pluginManagement {
    buildscript {
        repositories {
            mavenCentral()
            maven {
                url uri('https://storage.googleapis.com/r8-releases/raw')
            }
        }
        dependencies {
            classpath 'com.android.tools:r8:8.3.6-dev"
        }
    }
}

Veillez à ajouter --info après assembleRelease dans la commande suivante lorsque vous compilez avec Gradle.

./gradlew assembleRelease --info

Le diagnostic est ensuite affiché sur le terminal.

Si votre application ou des bibliothèques font référence à des API désucrées, les implémentations de compatibilité groupées de ces classes sont toujours contenues dans le dernier fichier DEX. Ce dernier fichier DEX désucré ne participe pas aux optimisations de mise en page DEX.