Déboguer les APK précompilés

Android Studio 3.0 (ou version ultérieure) vous permet de profiler et de déboguer des APK pour lesquels le débogage est activé, sans avoir à les compiler à partir d'un projet Android Studio.

Pour commencer à déboguer un APK, procédez comme suit :

  1. Sur l'écran d'accueil d'Android Studio, cliquez sur Profile or debug APK (Profiler ou déboguer l'APK).

    Si vous avez déjà ouvert un projet, cliquez sur File > Profile or Debug APK (Fichier > Profiler ou déboguer l'APK) dans la barre de menu.

  2. Dans la boîte de dialogue qui s'ouvre, sélectionnez l'APK que vous voulez importer dans Android Studio.

  3. Cliquez sur OK.

Si cette option ne s'affiche pas, assurez-vous que le plug-in "Android APK Support" est activé.

Android Studio affiche ensuite les fichiers APK non empaquetés, comme sur la figure 1. Il ne s'agit pas d'un ensemble de fichiers entièrement décompilé. Il fournit toutefois des fichiers SMALI pour une version plus lisible des fichiers DEX.

Importer un APK précompilé dans Android Studio

Figure 1 : Importer un APK précompilé dans Android Studio

La vue Android dans le volet Project (Projet) vous permet d'inspecter les contenus suivants de votre APK :

  • Fichier APK : double-cliquez dessus pour ouvrir l'analyseur d'APK.
  • manifests : contient les fichiers manifestes extraits de l'APK.
  • java : contient le code Kotlin ou Java qu'Android Studio désassemble (en fichiers SMALI) depuis les fichiers DEX de votre APK. Chaque fichier SMALI de ce répertoire correspond à une classe Kotlin ou Java.
  • cpp : si votre application inclut du code natif, ce répertoire contient les bibliothèques natives de votre APK (fichiers SO).
  • External Libraries (Bibliothèques externes) : contient le SDK Android.

Vous pouvez utiliser le profileur Android pour commencer à tester les performances de votre application.

Pour déboguer le code Kotlin ou Java de votre application, vous devez joindre les sources Kotlin ou Java et ajouter des points d'arrêt dans les fichiers sources Kotlin ou Java. De même, pour déboguer votre code natif, vous devez joindre des symboles de débogage natifs.

Joindre des sources Kotlin ou Java

Par défaut, Android Studio extrait le code Kotlin ou Java de votre APK et l'enregistre en tant que fichier SMALI. Pour déboguer le code Kotlin ou Java à l'aide de points d'arrêt, vous devez faire pointer l'IDE vers les fichiers sources Kotlin ou Java qui correspondent aux fichiers SMALI que vous souhaitez déboguer.

Pour joindre des sources Kotlin ou Java, procédez comme suit :

  1. Double-cliquez sur un fichier SMALI dans le volet Project (Projet) de la vue Android. Une fois le fichier ouvert, l'éditeur affiche une bannière vous demandant de sélectionner les sources Kotlin ou Java : Bannière permettant de joindre des sources
  2. Cliquez sur Attach Kotlin/Jave Sources… (Joindre des sources Kotlin/Java) dans la bannière de la fenêtre de l'éditeur.
  3. Accédez au répertoire contenant les fichiers sources Kotlin ou Java de l'application, puis cliquez sur Open (Ouvrir).

Dans la fenêtre Project (Projet), Android Studio remplace les fichiers SMALI par les fichiers sources Kotlin ou Java correspondants. Android Studio inclut aussi automatiquement les classes internes. Vous pouvez maintenant ajouter des points d'arrêt et déboguer votre application.

Joindre des symboles de débogage natifs

Si votre APK contient des bibliothèques natives (fichiers SO) qui n'incluent pas de symboles de débogage, Android Studio affiche une bannière semblable à celle illustrée à la figure 1. Vous ne pouvez pas déboguer le code natif de l'APK ni utiliser de points d'arrêt sans joindre de bibliothèques natives débogables.

Pour joindre des bibliothèques natives débogables, procédez comme suit :

  1. Si vous ne l'avez pas déjà fait, téléchargez le NDK et les outils.
  2. Dans la vue Android, sous le répertoire cpp de la fenêtre Project (Projet), double-cliquez sur un fichier de bibliothèque native qui ne contient pas de symboles de débogage.

    L'éditeur affiche un tableau de tous les ABI compatibles avec votre APK.

  3. Cliquez sur Add (Ajouter) en haut à droite de la fenêtre de l'éditeur.

  4. Accédez au répertoire qui contient les bibliothèques natives débogables que vous souhaitez joindre, puis cliquez sur OK.

Si les APK et les bibliothèques natives débogables ont été créés à l'aide d'une autre station de travail, vous devez également spécifier les chemins d'accès aux symboles de débogage locaux en procédant comme suit :

  1. Ajoutez les chemins d'accès locaux aux symboles de débogage manquants en modifiant le champ sous la colonne Local Paths (Chemins d'accès locaux) dans la section Path Mappings (Mappages de chemins) de la fenêtre de l'éditeur, comme illustré à la figure 2.

    Dans la plupart des cas, il vous suffit de fournir le chemin d'accès à un dossier racine pour qu'Android Studio inspecte automatiquement les sous-répertoires pour mapper les sources supplémentaires. Android Studio mappe aussi automatiquement les chemins d'accès vers un NDK distant dans votre téléchargement de NDK local.

  2. Cliquez sur Apply Changes (Appliquer les modifications) dans la section Path Mappings (Mappages de chemins) de la fenêtre de l'éditeur.

Indication des chemins vers les symboles de débogage locaux

Figure 2. Chemins d'accès locaux vers les symboles de débogage

Les fichiers sources natifs sont affichés dans la fenêtre Project (Projet). Ouvrez-les pour ajouter des points d'arrêt et déboguez votre application. Pour retirer les mappages, cliquez sur Clear (Effacer) dans la section Path Mappings (Mappages de chemins) de la fenêtre de l'éditeur.

Problème connu : Lorsque vous joignez des symboles de débogage à un APK, l'APK et les fichiers SO débogables doivent être créés à l'aide de la même station de travail ou du même serveur de compilation.

Dans Android Studio 3.6 (ou version ultérieure), vous n'avez pas besoin de créer un projet lorsque l'APK est mis à jour en dehors de l'IDE. Android Studio détecte les modifications dans l'APK et vous permet de le réimporter.

Importer l'APK mis à jour

Figure 3 : Les APK mis à jour en dehors d'Android Studio peuvent être réimportés.