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 sont utilisés par le système de compilation pour optimiser davantage les classes et les méthodes qu'elles 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 15% à 30% plus rapide qu'avec la version de référence Les profils uniquement.

<ph type="x-smartling-placeholder">
</ph>
Figure 1 : Amélioration de la localité du code à partir d'une mise en page DEX optimisation
.

Conditions requises

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

De plus, vous devez disposer des 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 {} de 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 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 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 profil de référence. Modèle de module du générateur depuis Android Studio. Cela inclut le démarrage interactions qui forment un profil de démarrage de base. Pour enrichir ce profil de start-up avec d'autres CUJ (Critical User Journeys), ajoutez ceux de démarrage de votre appli à un ruleincludeInStartupProfile est défini sur true. Pour les applications simples, le lancement l'MainActivity de l'application peut suffire. Pour les applications plus complexes, envisagez en ajoutant les points d'entrée les plus courants à votre application, comme démarrer l'application à partir de l'écran d'accueil ou le lancement d'un lien profond.

L'extrait de code suivant montre un générateur de profils de référence (par défaut, BaselineProfileGenerator.kt), ce qui implique de démarrer votre application à partir du l'écran d'accueil et le lancement d'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), puis recherchez les les règles du profil de démarrage à l'adresse 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érifier les classes dans les fichiers DEX. Assurez-vous que le classes.dex principal n'est pas complètement remplis. Si votre application se compose d'un seul fichier DEX, vous pouvez vérifier Indique si l'application contient deux fichiers DEX après avoir activé le profil de démarrage

Android Studio vous avertit si les classes de démarrage ne tiennent pas dans un seul fichier DEX. Pour obtenir des informations de diagnostic incluant le nombre de méthodes non de démarrage dans les classes de démarrage, assurez-vous que le compilateur R8 est mis à jour vers la version 8.3.36-dev ou une version ultérieure 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"
        }
    }
}

N'oubliez pas d'ajouter --info après assembleRelease dans la commande suivante lors de la compilation 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, le package les implémentations de compatibilité de ces classes sont toujours contenues dans la dernière fichier DEX. Le dernier fichier DEX désucré ne participe pas à la mise en page DEX et des optimisations.

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 de le 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 choisir 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.

Après avoir abordé le premier cas d'utilisation, suivez l'entonnoir de conversion pour les applications démarrage. Dans de nombreux cas, les entonnoirs de démarrage d'une application suivent cette liste:

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

Travaillez cette liste en partant du haut et arrêtez-vous avant que le fichier classes.dex soit plein. Pour couvrir d'autres parcours par la suite, déplacez le code hors du chemin de démarrage et ajoutez d'autres parcours. Pour déplacer le code en dehors du chemin de démarrage, inspectez les traces de Perfetto au démarrage de l'application et rechercher 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 automatisable et complète des appels de méthode au démarrage de l'application.