Créer des profils de démarrage

Les profils de démarrage sont un sous-ensemble des profils de référence. Le système de compilation utilise les profils de démarrage pour 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 généralement entre 15% et 30% plus rapide qu'avec les profils de référence uniquement.

Figure 1. Amélioration de la localité du code grâce à l'optimisation de mise en page DEX

Conditions requises

Nous vous recommandons d'utiliser des 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

De plus, vous devez inclure les paramètres suivants dans votre application:

  • R8 activé. Pour votre build de publication, 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 en plus d'un profil de référence lorsque vous utilisez le modèle de générateur de profils de référence par défaut.

La procédure générale à suivre pour créer et générer un profil de démarrage est la même que celle pour 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 de générateur de profils de référence dans Android Studio. Cela inclut les interactions de démarrage qui constituent un profil de démarrage de base. Pour enrichir ce profil de démarrage avec d'autres critical user journeys (CUJ), ajoutez les CUJ de démarrage de votre application à un bloc rule avec includeInStartupProfile défini sur true. Pour les applications simples, le lancement de la MainActivity de l'application peut suffire. Pour les applications plus complexes, envisagez d'ajouter les points d'entrée les plus courants, par exemple en démarrant l'application depuis l'écran d'accueil ou en la lançant via un lien profond.

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

@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) et recherchez les règles du profil de démarrage à l'emplacement src/<variant>/generated/baselineProfiles/startup-prof.txt.

Considérations à prendre en compte lors de la création de profils de démarrage

La sortie des classes et des méthodes d'un profil de démarrage est limitée par la taille du premier fichier classes.dex. Cela signifie que tous les parcours de profil de référence ne doivent pas non plus être des parcours de profil de démarrage.

Pour déterminer les parcours utilisateur à couvrir lors de la création d'un profil de démarrage, réfléchissez à l'endroit où la plupart des utilisateurs lancent l'application. En général, il s'agit du lanceur d'applications et après la connexion. Il s'agit également du parcours de profil de référence le plus basique.

Une fois le premier cas d'utilisation couvert, suivez l'entonnoir utilisateur pour le démarrage de l'application. Dans de nombreux cas, les entonnoirs de démarrage des applications suivent cette liste:

  1. Activité du lanceur d'applications principale
  2. Notifications qui déclenchent le démarrage de l'application
  3. Activités du lanceur d'applications facultatives

Parcourez cette liste de haut en bas et arrêtez-vous avant que classes.dex ne soit saturé. Pour couvrir d'autres parcours par la suite, déplacez le code du chemin de démarrage et ajoutez d'autres parcours. Pour déplacer du code hors du chemin de démarrage, inspectez les traces Perfetto au démarrage de l'application et recherchez les opérations de longue durée. Vous pouvez également utiliser un macrobenchmark avec le traçage de méthode activé pour obtenir une vue complète et automatisable des appels de méthode lors du démarrage de l'application.