L’outil APK Analyzer d’Android Studio
L’IDE Android Studio inclut un outil qui permet d’examiner le contenu d’un fichier APK. Découvrons comment utiliser l’APK Analyzer pour examiner l’APK d’une application Android.
Comment ouvrir l’APK Analyzer
Voici trois façons d’accéder à l’outil APK Analyzer dans Android Studio. Selon que l’APK que l’on veut ouvrir est celui du projet sur lequel on travaille dans Android Studio ou non, la méthode pourra être différente.
- Via le menu Build > Analyze APK, et choisir un fichier APK
- En vue « Project », sur un projet où on a déjà complété un build, aller dans le dossier app > build > outputs > apk
- Glisser-déposer un fichier APK sur l’IDE l’ouvrira directement dans l’APK Analyzer


Description des fonctionalités de l’APK Analyzer
Maintenant que l’on sait comment accéder à l’APK Analyzer dans Android Studio, parlons des fonctionalités de cet outil. L’APK Analyzer permet de :
- Décompiler et visualiser le contenu d’un fichier APK
- Accéder au fichier Manifest.XML final constitué pour l’application
- Vérifier le résultat de l’obfuscation de code
- Comparer la taille de l’APK entre deux versions de l’application (avec une granularité au niveau du fichier DEX)
- Générer des snippets de règles Proguard pour configurer l’obfuscation en conservant du code ou des noms d’éléments
À premier abords, trouver un package Java/Kotlin n’est pas immédiat: il faut examiner les fichiers classes<NN>.dex un par un.
Regarder les détails d’un fichier DEX
Quand on clique sur un fichier de l’APK, on accède aux détails de ce fichier dans le panneau de détails en bas à droite.
Pour chacun des fichiers DEX, le contenu en bytecode et les ressources est détaillé dans le panneau de détails, trié par défaut par taille (« Download size » / « Raw file size »).
Personnellement, je trouve plus utile de retrier par Nom de fichier (« File ») initialement pour faciliter la recherche dans l’arborescence de packages de code. Cela permet de comprendre ce qui se trouve dans l’APK en faisant le lien avec le projet et ses dépendances.
Le tri par taille devient utile quand on est dans une démarche de réduction de taille de l’APK. On peut ainsi cibler les ressources les plus volumineuses en priorité pour les efforts de réduction.
Il faut inspecter chaque fichier classes<NN>.dex pour retrouver les classes du projet. Dans mon exemple, les classes du projet sont dans le classes3.dex

Utiliser les fonctionalités de l’APK Analyzer
L’APK manager permet de générer les règles Proguard pour exclure un un élément de l’obfuscation. On peut copier-coller ce snippet dans le fichier Rules approprié. Pour cela, il faut sélectionner un fichier et faire un clic-droit pour accéder au menu « Generate Proguard keep rules ».
Par rapport aux actions de R8, il est possible de fournir à l’APK Analyzer les fichiers de mapping, de seeds, et d’usage pour enrichir ses informations sur chaque DEX.
Pour la présentation, on remarquera que les éléments peuvent être représentés avec plusieurs styles typographiques. Les clés d’affichage dans la vue de détails d’un DEX de l’APK Analyzer sont :
- les éléments en gras, les noeuds (classe, méthodes..) que la configuration ProGuard empêche de supprimer lors de la phase de code shrinking (suppression de code inutilisé)
- les points
en texte barré, infos provenant de usage.txt, identifie les noeuds supprimés lors de R8 shrinking - le texte en italique, les noeuds qui sont référencés mais n’ont pas leur définition dans le fichier DEX sélectionné (i.e. leur définition est dans un autre DEX)
Conclusion
En conclusion, cet outil permet de mieux comprendre le contenu du fichier APK que l’on confie à un distributeur. Il peut servir à éventuellement retirer des éléments inutiles ou réduire la taille, voire chercher à obfusquer le code pour le rendre moins facile à décompiler, ce que l’on verra dans un autre article.