Activer l'optimisation de l'application

Pour offrir la meilleure expérience utilisateur possible, vous devez optimiser votre application pour qu'elle soit aussi petite et rapide que possible. Notre outil d'optimisation d'applications, appelé R8, simplifie votre application en supprimant le code et les ressources inutilisés, en réécrivant le code pour optimiser les performances d'exécution, et plus encore. Pour vos utilisateurs, cela signifie :

  • accélérer le démarrage ;
  • Amélioration des performances de rendu et d'exécution
  • Moins d'erreurs ANR

Pour activer l'optimisation de l'application, définissez isMinifyEnabled = true (pour l'optimisation du code) et isShrinkResources = true (pour l'optimisation des ressources) dans le script de compilation au niveau de l'application de votre compilation de version finale, comme indiqué dans le code suivant. Nous vous recommandons d'activer systématiquement les deux paramètres. Nous vous recommandons également d'activer l'optimisation de l'application uniquement dans la version finale de votre application que vous testez avant de la publier (généralement votre build de version), car les optimisations augmentent le temps de compilation de votre projet et peuvent rendre le débogage plus difficile en raison de la façon dont elles modifient le code.

Kotlin

android {
    buildTypes {
        release {

            // Enables code-related app optimization.
            isMinifyEnabled = true

            // Enables resource shrinking.
            isShrinkResources = true

            proguardFiles(
                // Default file with automatically generated optimization rules.
                getDefaultProguardFile("proguard-android-optimize.txt"),

                ...
            )
            ...
        }
    }
    ...
}

Groovy

android {
    buildTypes {
        release {

            // Enables code-related app optimization.
            minifyEnabled true

            // Enables resource shrinking.
            shrinkResources true

            // Default file with automatically generated optimization rules.
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')

            ...
        }
    }
}

Optimiser la réduction des ressources pour des applications encore plus petites

La version 8.12.0 du plug-in Android Gradle (AGP) introduit la minification optimisée des ressources, qui vise à intégrer l'optimisation des ressources et du code pour créer des applications encore plus petites et plus rapides.

Activer la minification optimisée des ressources

Pour activer le nouveau pipeline de minification des ressources optimisé pour une version d'AGP antérieure à 9.0.0, ajoutez le code suivant au fichier gradle.properties de votre projet :

android.r8.optimizedResourceShrinking=true

Si vous utilisez AGP 9.0.0 ou une version ultérieure, vous n'avez pas besoin de définir android.r8.optimizedResourceShrinking=true. La réduction optimisée des ressources est automatiquement appliquée lorsque isShrinkResources = true est activé dans la configuration de votre build.

Vérifier et configurer les paramètres d'optimisation R8

Pour permettre à R8 d'utiliser ses capacités d'optimisation complètes, supprimez la ligne suivante du fichier gradle.properties de votre projet, le cas échéant :

android.enableR8.fullMode=false # Remove this line from your codebase.

Notez que l'activation de l'optimisation de l'application rend les traces de pile difficiles à comprendre, en particulier si R8 renomme les noms de classes ou de méthodes. Pour obtenir des traces de pile qui correspondent correctement à votre code source, consultez Récupérer la trace de pile d'origine.

Si R8 est activé, vous devez également créer des profils de démarrage pour améliorer encore les performances de démarrage.

Si vous activez l'optimisation des applications et que cela entraîne des erreurs, voici quelques stratégies pour les résoudre :

Si vous souhaitez optimiser la vitesse de compilation, consultez Configurer l'exécution de R8 pour savoir comment configurer R8 en fonction de votre environnement.

Modifications du comportement des versions d'AGP et de R8

Le tableau suivant décrit les principales fonctionnalités introduites dans différentes versions du plug-in Android Gradle (AGP) et du compilateur R8.

Version de l'AGP Fonctionnalités introduites
9.0 Réduction optimisée des ressources : activée par défaut (contrôlée à l'aide de android.r8.optimizedResourceShrinking). La réduction optimisée des ressources permet d'intégrer la réduction des ressources au pipeline d'optimisation du code, ce qui permet d'obtenir des applications plus petites et plus rapides. En optimisant simultanément les références de code et de ressources, il identifie et supprime les ressources référencées exclusivement à partir de code inutilisé. Il s'agit d'une amélioration significative par rapport aux processus d'optimisation distincts précédents.

Cela est particulièrement utile pour les applications qui partagent des ressources et du code importants sur différents facteurs de forme verticaux, avec des améliorations mesurées de plus de 50 % de la taille de l'application. La réduction de la taille qui en résulte permet de réduire la taille des téléchargements, d'accélérer les installations et d'améliorer l'expérience utilisateur en accélérant le démarrage, en améliorant le rendu et en réduisant le nombre d'erreurs ANR.

Filtrage des règles de bibliothèque : la prise en charge des options globales (par exemple, -dontobfuscate) dans les règles de bibliothèque pour les consommateurs a été supprimée, et les applications les filtreront. Pour en savoir plus, consultez Ajouter des options globales.

Vérification des valeurs nulles Kotlin : optimisée par défaut (contrôlée à l'aide de -processkotlinnullchecks). Cette version a également apporté des améliorations importantes en termes de vitesse de compilation. Pour en savoir plus, consultez Options globales pour une optimisation supplémentaire.

Optimiser des packages spécifiques : vous pouvez utiliser packageScope pour optimiser des packages spécifiques. Cette fonctionnalité est expérimentale. Pour en savoir plus, consultez Optimiser les packages spécifiés avec packageScope.

Optimisé par défaut : la compatibilité avec getDefaultProguardFile("proguard-android.txt") a été supprimée, car elle inclut -dontoptimize, qui doit être évité. Utilisez plutôt "proguard-android-optimize.txt". Si vous devez désactiver l'optimisation de manière globale dans votre application, ajoutez manuellement l'indicateur à un fichier ProGuard.
8.12 Réduction des ressources : prise en charge initiale ajoutée (désactivée par défaut). Activez-le à l'aide de isShrinkResources. La réduction des ressources fonctionne de concert avec R8 pour identifier et supprimer efficacement les ressources inutilisées.

Retracement Logcat : compatibilité avec le retracement automatique dans la fenêtre Logcat d'Android Studio.
8.6 Amélioration du traçage inverse : inclut par défaut le traçage inverse du nom de fichier et du numéro de ligne pour tous les niveaux minSdk (auparavant requis pour minSdk 26+ dans la version 8.2).

La mise à jour de R8 permet de s'assurer que les traces de pile des versions obscurcies sont facilement et clairement lisibles. Cette version améliore la façon dont les numéros de ligne et les fichiers sources sont mappés, ce qui permet aux outils tels que Logcat d'Android Studio de retracer automatiquement les plantages jusqu'au code source d'origine.
8.0 Mode complet par défaut : le mode complet R8 offre une optimisation beaucoup plus puissante. Il est activé par défaut. Vous pouvez vous désabonner à l'aide de android.enableR8.fullMode=false.
7.0 Mode complet disponible : introduit en tant que fonctionnalité à activer à l'aide de android.enableR8.fullMode=true. Le mode complet applique des optimisations plus puissantes en émettant des hypothèses plus strictes sur la façon dont votre code utilise la réflexion et d'autres fonctionnalités dynamiques. Bien que cela réduise la taille de l'application et améliore ses performances, cela peut nécessiter des règles de conservation supplémentaires pour empêcher la suppression du code nécessaire.