Android Studio inclut un analyseur d'APK qui fournit un aperçu immédiat de la composition de votre APK ou de votre Android App Bundle une fois le processus de compilation terminé.
L'analyseur d'APK peut vous aider à réduire le temps passé à déboguer les problèmes liés aux fichiers et aux ressources DEX dans votre application, et à réduire la taille de votre APK. L'analyseur d'APK est également disponible à partir de la ligne de commande avec apkanalyzer
.
Avec l'analyseur d'APK, vous pouvez :
- afficher la taille absolue et relative des fichiers de l'application, tels que les fichiers de ressources DEX et Android ;
- comprendre la composition des fichiers DEX ;
- afficher rapidement les versions finales des fichiers dans l'application, par exemple le fichier
AndroidManifest.xml
; - comparer deux APK ou app bundles en parallèle.
Vous pouvez accéder à l'analyseur d'APK de trois manières différentes lorsqu'un projet est ouvert :
- Faites glisser un APK ou un app bundle dans la fenêtre Editor (Éditeur) d'Android Studio.
- Accédez à la vue Project (Projet) dans la fenêtre Project (Projet), puis double-cliquez sur le fichier APK dans le répertoire
build/output/apks/
par défaut. - Sélectionnez Build > Analyze APK (Build > Analyser l'APK) dans la barre de menu, puis sélectionnez votre APK ou app bundle.
Afficher les informations sur les fichiers et les tailles
Les APK sont des fichiers au format ZIP. L'analyseur d'APK affiche chaque fichier ou dossier en tant qu'entité que vous pouvez développer pour accéder aux dossiers. La hiérarchie des entités reflète la structure des fichiers et des dossiers contenus dans le fichier APK.
L'analyseur d'APK affiche la taille du fichier compressé (ou "taille du fichier brut") et la taille du fichier téléchargé pour chaque entité, comme illustré dans la figure 1. Raw File Size (Taille du fichier brut) représente la contribution de l'entité à la taille totale de l'APK. La taille de téléchargement correspond à la taille compressée estimée de l'entité telle qu'elle serait fournie par Google Play. Le % de la taille de téléchargement totale indique le pourcentage de la taille de téléchargement totale de l'APK représentée par l'entité.
Afficher le fichier AndroidManifest.xml
Si votre projet comprend plusieurs fichiers AndroidManifest.xml
(pour différents types de produit, par exemple) ou des bibliothèques qui fournissent également un fichier manifeste, ils sont fusionnés en un seul fichier dans votre application. Ce fichier manifeste est normalement un fichier binaire dans l'APK ou l'app bundle, mais sa forme XML est reconstruite et présentée lorsqu'il est sélectionné dans l'analyseur d'APK.
Cette visionneuse vous permet de comprendre toutes les modifications qui ont pu être apportées à votre application pendant la compilation. Par exemple, vous pouvez voir comment le fichier AndroidManifest.xml
d'une bibliothèque dont dépend votre application est fusionné dans le fichier AndroidManifest.xml
final.
En outre, cette visionneuse offre des fonctionnalités lint. Les avertissements ou les erreurs potentiels s'affichent en haut à droite. La figure 2 illustre une erreur signalée pour le fichier manifeste sélectionné.
Afficher les fichiers DEX
La visionneuse de fichiers DEX de l'analyseur d'APK vous permet d'accéder immédiatement aux informations sous-jacentes du ou des fichiers DEX de votre application. Le nombre de classes, de packages, de références totales et de déclarations est indiqué dans la visionneuse, ce qui permet de déterminer s'il faut utiliser multidex ou supprimer les dépendances pour respecter le plafond de 64 000 DEX.
La figure 3 illustre une application de taille moyenne qui respecte le plafond de 64 000 DEX. Chaque package, classe et méthode du fichier DEX est répertorié dans les colonnes Defined Method (Méthodes définies) et Referenced Methods (Méthodes référencées).
La colonne Referenced Methods (Méthodes référencées) comprend toutes les méthodes référencées par le fichier DEX. Sont généralement incluses les méthodes définies dans votre code, les bibliothèques de dépendances et les méthodes définies dans les packages Java et Android standard utilisés par le code. Ces méthodes sont comptabilisées dans la limite de 64 000 méthodes par fichier DEX.
La colonne Referenced Methods (Méthodes définies) ne compte que les méthodes définies dans l'un de vos fichiers DEX. Ce nombre constitue donc un sous-ensemble de Referenced Methods (Méthodes référencées).
Filtrer l'arborescence de fichiers DEX
Juste au-dessus de la liste Class (Classe), l'analyseur d'APK propose des filtres pour afficher le contenu du fichier DEX sélectionné, comme l'illustre la figure 4.
Pour afficher toutes les méthodes et tous les champs d'une classe à l'aide des filtres, procédez comme suit :
- Dans la liste File (Fichier), sélectionnez le fichier
classes.dex
. - Dans la liste Class (Classe), sélectionnez une classe.
- Développez la classe que vous avez sélectionnée.
- Cliquez sur Show fields (Afficher les champs) pour afficher ou masquer les champs de la classe.
- Cliquez sur Show methods (Afficher les méthodes) pour afficher ou masquer les méthodes de la classe.
Activez ou désactivez Show all referenced methods or fields (Afficher tous les champs ou méthodes référencés) pour afficher ou masquer les packages, classes, méthodes et champs référencés.
Dans l'arborescence, les nœuds en italique sont des références qui ne sont pas définis dans le fichier DEX sélectionné. Un fichier DEX peut faire référence à des méthodes et à des champs définis dans un autre fichier. Par exemple,
System.out.println()
est une référence à la méthodeprintln()
dans le framework Android.
Charger les mappages ProGuard
Les icônes de mappage ProGuard s'affichent à côté des icônes de filtrage. Elles sont grisées jusqu'à ce que vous chargiez un ensemble de fichiers de mappage ProGuard qui ajoutent des fonctionnalités à la visionneuse DEX, telles que le désobscurcissement des noms (mapping.txt
), l'affichage des nœuds supprimés (usage.txt
) et l'identification des nœuds qui ne peuvent pas être supprimés (seeds.txt
).
Le fichier de mappage ProGuard que vous importez doit provenir du même build que celui qui a généré les fichiers DEX, avec activation de la minification du code.
Pour charger les fichiers de mappage ProGuard, procédez comme suit :
- Cliquez sur Load Proguard Mappings (Charger des mappages ProGuard).
Accédez au dossier du projet qui contient les fichiers de mappage, puis chargez tous les fichiers, toute combinaison de ces fichiers ou le dossier contenant les fichiers.
Les fichiers de mappage se trouvent en principe dans
project/app/build/outputs/mappings/release/
. Le sélecteur de fichier utilise par défaut le dossier Release (Version) s'il détecte la structure de ce projet.Tout d'abord, le sélecteur de fichier recherche les noms de fichiers correspondant exactement à
mapping.txt
,seeds.txt
etusage.txt
. Ensuite, il recherche les noms de fichiers contenant le textemapping
,usage
ouseeds
et se terminant par.txt
(par exemple,release-seeds-1.10.15.txt
).
La liste suivante décrit les fichiers de mappage :
seeds.txt
: les nœuds que la configuration ProGuard empêche de supprimer lors du rétrécissement sont affichés en gras.mapping.txt
: active le désobscurcissement des noms , ce qui vous permet de restaurer les noms d'origine des nœuds obscurcis par R8. Par exemple, vous pouvez restaurer des noms de nœuds obscurcis tels quea
,b
,c
versMyClass
,MainActivity
etmyMethod()
.usage.txt
: active l'option Afficher les nœuds supprimés pour que vous puissiez afficher les classes, les méthodes et les champs supprimés par R8 lors du rétrécissement. Les nœuds restaurés sont barrés.Pour en savoir plus sur l'utilisation de R8 pour obscurcir et minimiser votre code, consultez la section Réduire, obscurcir et optimiser votre application.
Afficher le bytecode, rechercher des utilisations et générer une règle Keep
Les nœuds de la liste Class (Classe) disposent d'un menu contextuel proposant les options suivantes, qui vous permettent d'afficher le bytecode, de connaître les utilisations et d'afficher une boîte de dialogue avec les règles ProGuard que vous pouvez copier et coller pour le nœud sélectionné. Faites un clic droit sur un nœud de la liste Class (Classe) pour afficher son menu contextuel.
Show bytecode (Afficher le bytecode) : décompile la classe, la méthode ou le champ sélectionné, et affiche la représentation du bytecode Smali (plutôt qu'en code Java) dans une boîte de dialogue comme ceci :
Find usages (Trouver des utilisations) : indique les autres parties du code DEX qui font référence à la classe ou à la méthode sélectionnée (figure 7).
Si vous avez chargé seeds.txt
, les nœuds en gras indiquent que la configuration ProGuard empêche leur suppression lors de la minification :
Generate Proguard Keep rule (Générer la règle ProGuard Keep) : affiche les règles ProGuard que vous pouvez copier et coller dans le fichier de configuration ProGuard de votre projet. Cela empêche la suppression d'un package, d'une classe, d'une méthode ou d'un champ spécifique pendant la phase de minification de code. Pour en savoir plus, consultez Personnaliser le code à conserver.
Afficher les entités de code et de ressources
Plusieurs tâches de compilation modifient les entités finales dans une application. Par exemple, les règles de réduction de ProGuard peuvent modifier votre code final et les ressources images peuvent être remplacées par des ressources dans un type de produit.
Pour afficher la version finale de vos fichiers avec l'analyseur d'APK, cliquez sur l'entité afin de générer un aperçu de l'entité de texte ou d'image, comme illustré à la figure 9.
L'analyseur d'APK peut également afficher différents fichiers texte et binaires.
Par exemple, le lecteur d'entité resources.arsc
vous permet d'afficher les valeurs spécifiques à la configuration, telles que les traductions pour une ressource de chaîne. La figure 10 expose les traductions pour chaque ressource de chaîne.
Comparer des fichiers
L'analyseur d'APK peut comparer la taille des entités dans deux fichiers APK ou app bundles différents. C'est utile lorsque vous devez comprendre pourquoi la taille de votre application a augmenté par rapport à une version précédente.
Avant de publier une application mise à jour, procédez comme suit :
- Chargez la version de l'application que vous allez publier dans l'analyseur d'APK.
- Dans l'angle supérieur droit de l'analyseur d'APK, cliquez sur Compare with previous APK (Comparer à un fichier APK précédent).
Dans la boîte de dialogue de sélection, recherchez l'artefact publié en dernier, puis cliquez sur OK.
Une boîte de dialogue semblable à celle de l'image 11 s'affiche pour vous aider à évaluer l'effet que la mise à jour peut avoir sur les utilisateurs.
L'image 11 montre la différence entre le build de débogage et le build final d'une application spécifique. Différentes options de build sont utilisées entre ces types de compilation, avec des répercussions différentes sur les entités sous-jacentes.