Débogage d'applications Android avec le Stetho de Facebook

introduction

Stetho est une plate-forme de débogage open source, développée par Facebook, qui offre aux développeurs Android une expérience de débogage riche et hautement interactive. Avec Stetho, le débogage d'applications Android natives devient aussi simple que le débogage d'une page Web, car il vous permet d'utiliser les outils de développement de Google Chrome pour effectuer diverses activités de débogage, telles que l'inspection de la hiérarchie des vues, l'inspection du réseau, la gestion de bases de données SQLite, etc..

Dans ce didacticiel, vous allez apprendre à ajouter Stetho à un projet Android et à utiliser les outils de développement de Google Chrome et l'utilitaire de ligne de commande de Stetho., Dumpapp, pour le déboguer.

1. Ajouter des dépendances de Gradle

Pour ajouter la bibliothèque Stetho à votre projet, ajoutez com.facebook.stetho: stetho comme un compiler dépendance dans le app modules build.gradle fichier:

java compile 'com.facebook.stetho: stetho: 1.1.1'

Dans ce tutoriel, vous allez utiliser OkHttp, une bibliothèque réseau populaire de Square, pour gérer toutes les connexions réseau, car elle fonctionne très bien avec Stetho. Ajouter comme un autre compiler dépendance:

java compile 'com.facebook.stetho: stetho-okhttp: 1.1.1'

2. Initialisation de Stetho

Étape 1: Créer une coutume Application Classe

Le meilleur moment pour initialiser Stetho est le démarrage de votre application. Par conséquent, vous devez créer une nouvelle classe qui s'étend Application et initialiser Stetho dans son onCreate méthode.

Créez une nouvelle classe appelée Mon application et remplacer sa onCreate méthode:

"java public class MyApplication s étend Application

@Override public void onCreate () super.onCreate ();  "

Pour initialiser Stetho, vous devez d’abord créer une instance de Stetho.InitializerBuilder, en utilisant le Stetho.newInitializerBuilder méthode. Ensuite, pour permettre à Stetho de fonctionner avec les outils de développement de Chrome, vous devez appeler enableWebKitInspector. Si vous souhaitez également activer dumpapp, vous devez appeler enableDumpapp. Une fois que Stetho.InitializerBuilder est prêt, vous pouvez appeler son construire méthode pour générer un Initialiseur objet et le passer à la Stetho.initialize méthode.

Pour le moment, activons la fonctionnalité par défaut en utilisant le paramètre par défaut. InspectorModulesProvider et DumperPluginsProvider. Ajoutez le code suivant au onCreate méthode:

"java // Créer un InitializerBuilder Stetho.InitializerBuilder initializerBuilder = Stetho.newInitializerBuilder (this);

// Activer Chrome DevTools initializerBuilder.enableWebKitInspector (Stetho.defaultInspectorModulesProvider (this));

// Activer l'interface de ligne de commande initializerBuilder.enableDumpapp (Stetho.defaultDumperPluginsProvider (context));

// Utilisez InitializerBuilder pour générer un initializer Stetho.Initializer initializer = initializerBuilder.build ();

// Initialise Stetho avec l'initialiseur Stetho.initialize (initializer); "

Étape 2: édition du manifeste

Pour que le système d’exploitation Android sache que vous avez un Application classe, ajouter un attribut appelé Android: nom au manifeste application tag et définissez la valeur sur le nom de votre custom Application classe.

"xml

"

3. Utiliser les outils de développement de Chrome

Après avoir compilé et installé votre application sur un appareil Android (ou l'émulateur), démarrez Google Chrome et saisissez chrome: // inspecter dans la barre d'adresse. Vous verrez un écran qui ressemble à ceci:

Clique le inspecter lien pour ouvrir le Outils de développement.

Étape 1: Inspection des connexions réseau

Stetho vous permet d'inspecter en temps réel les connexions réseau établies par votre application. Toutefois, dans Stetho version 1.1.1, cela ne fonctionne qu'avec la bibliothèque réseau OkHttp. Lorsque vous utilisez OkHttp avec Stetho, vous devez vous rappeler d’ajouter un StethoInterceptor au OkHttpClient objets liste des intercepteurs de réseau.

Voici un exemple de code qui se connecte à HttpBin et récupère un document JSON:

"java // Créer une instance de OkHttpClient OkHttpClient httpClient = new OkHttpClient ();

// Ajout de l'intercepteur Stetho httpClient.networkInterceptors (). Add (new StethoInterceptor ());

try // Récupère le contenu de http://httpbin.org/ip Response response = httpClient.newCall (new Request.Builder (). url («http://httpbin.org/ip») .build ()) .exécuter();

catch (IOException ioe) Log.d (“StethoTut”, ioe.getMessage ()); "

Lorsque le code est exécuté, vous verrez ce qui suit dans la liste Réseau onglet du Outils de développement la fenêtre:

Si vous cliquez sur l'URL dans la première colonne, vous accédez à un écran affichant plus d'informations sur la réponse:

Étape 2: Interrogation des bases de données SQLite

Avec Stetho, vous pouvez effectuer de nombreuses opérations sur les bases de données SQLite de votre application. Clique le Ressources onglet et sélectionnez Web SQL. Si votre application possède des bases de données SQLite, elles seront répertoriées ici. La sélection d'une base de données affiche une liste des tables de la base de données. Enfin, un clic sur une table affiche les enregistrements de la table:

Vous pouvez également exécuter des requêtes SQL après avoir sélectionné une base de données SQLite:

Étape 3: Manipulation des préférences de votre application

Pour afficher votre application Préférences partagées, ouvrir le Ressources onglet du Outils de développement fenêtre et sélectionnez Stockage local. Vous verrez les noms des fichiers que votre application utilise pour stocker les préférences. Un clic sur un fichier affiche les paires clé-valeur stockées dans ce fichier:

Vous pouvez même éditer les valeurs stockées dans un fichier:

Notez que toutes les modifications que vous apportez aux valeurs sont permanentes..

4. Utiliser dumpapp

Étape 1: téléchargement de dumpapp

dumpapp est un utilitaire puissant qui vous permet de manipuler votre application Android à partir de la ligne de commande. Vous pouvez l'obtenir en clonant le référentiel de Stetho:

bash git clone https://github.com/facebook/stetho

Dumpapp étant un script Python, vous devez avoir la dernière version de Python installée sur votre ordinateur pour pouvoir l'utiliser..

Étape 2: Utiliser les plugins

Pour afficher une liste des plugins disponibles, entrez le stetho / scripts répertoire et exécutez la commande suivante:

bash ./dumpapp -l

La sortie ressemble à ceci:

Utilisons le plugin appelé prefs. Ce plugin est utilisé pour afficher et éditer les valeurs stockées dans votre application. Préférences partagées. Par exemple, la commande suivante répertorie toutes les paires clé-valeur stockées dans le répertoire de votre application. Préférences partagées:

bash ./dumpapp prefs print

La sortie ressemble à ceci:

Étape 3: Créer un plugin personnalisé

Les plugins de vidage personnalisé sont simplement des classes Java qui implémentent la DumperPlugin interface. Créons un plugin simple qui affiche le nom du package de l'application testée.

Créer une nouvelle classe à l'intérieur du Mon application classe appelée MyDumperPlugin. Après avoir annulé les méthodes du DumperPlugin interface, votre classe devrait ressembler à ceci:

"La classe java MyDumperPlugin implémente DumperPlugin @Override public String getName ()

@Override public void dump (DumperContext dumpContext) lève DumpException  "

le getName La méthode devrait renvoyer le nom du plugin. Pour retourner la valeur mon_plugin, ajoutez le code suivant à la getName méthode:

Java retour "mon_plugin";

le déverser méthode est la méthode appelée lorsque vous exécutez le plug-in à partir de la ligne de commande. le DumperContext fournit divers flux d'E / S, qui vous permettent de lire ou d'écrire à partir de la ligne de commande. Pour le moment, nous allons simplement utiliser la sortie standard. Ajoutez le code suivant au déverser méthode pour obtenir une référence au flux de sortie standard:

java PrintStream out = dumpContext.getStdout ();

Parce que ce plugin fait partie de la Mon application classe, pour obtenir le nom du package de l'application, vous pouvez appeler directement le getPackageName méthode. Une fois que vous avez le nom du paquet, imprimez-le en utilisant le PrintStream objets imprimer méthode:

java out.println (MyApplication.this.getPackageName ());

Votre plugin personnalisé est maintenant prêt à être utilisé.

Étape 4: Création d'un fournisseur de plugins personnalisé

Le plug-in que vous avez créé à l'étape précédente ne sera pas disponible pour Stetho à moins que vous ne créiez un fournisseur de plug-ins personnalisé et que vous l'utilisiez lors de l'initialisation de Stetho. Un fournisseur de plugins personnalisé est une classe qui implémente le DumperPluginsProvider interface.

Créons un fournisseur de plugins personnalisé appelé MyDumperPluginsProvider. Créer cette classe à l'intérieur du Mon application classe. Après avoir annulé la seule méthode de la DumperPluginsProvider interface, votre classe devrait ressembler à ceci:

"La classe java MyDumperPluginsProvider implémente DumperPluginsProvider @Override public Iterable get ()

 "

Parce que le obtenir méthode retourne un Iterable, tout ce que vous avez à faire est de créer une liste, d'ajouter votre plugin personnalisé à la liste et de la renvoyer. Le code pour le faire ressemblerait à ceci:

"java // Créer une liste ArrayList plugins = new ArrayList <> ();

// Ajouter un ou plusieurs plugins personnalisés plugins.add (new MyDumperPlugin ());

// retourne la liste retour plugins; "

Cependant, parce que votre fournisseur de plugins personnalisés Iterable n'inclut pas les plugins par défaut, vous ne pourrez pas les utiliser lors de l'exécution de dumpapp. Si vous voulez utiliser les plugins personnalisé et par défaut ensemble, vous devez ajouter les plugins par défaut à votre ArrayList. Pour obtenir la liste des plugins par défaut, vous devez appeler le obtenir méthode du fournisseur de plugins renvoyée par le defaultDumperPluginsProvider méthode.

"java // Ajout de plugins par défaut pour conserver les fonctionnalités d'origine

for (plugin DumperPlugin: Stetho.defaultDumperPluginsProvider (MyApplication.this) .get ()) plugins.add (plugin); "

Votre fournisseur de plugins personnalisés est maintenant prêt. Pour l'utiliser, allez au onCreate méthode et passer une instance de celui-ci à la enableDumpapp appel:

java initializerBuilder.enableDumpapp (new MyDumperPluginProvider ());

Étape 5: Utiliser le plugin personnalisé

Répertoriez tous les plugins disponibles en utilisant le bouton Dumpapp -l appel. Vous verrez le nom de votre plugin personnalisé dans la liste:

Pour l'exécuter, exécutez la commande suivante:

bash ./dumpapp my_plugin

Il devrait imprimer le nom du paquet de votre application:

Conclusion

Dans ce tutoriel, vous avez appris à utiliser Stetho dans vos projets Android. Vous avez également appris à utiliser l'interface de ligne de commande, dumpapp et les outils de développement de Google Chrome pour déboguer vos applications. A présent, vous devez avoir compris que, bien que Stetho ne puisse pas encore remplacer complètement le débogueur d’Android Studio, il offre des fonctionnalités qui peuvent améliorer considérablement votre expérience de débogage..

Pour en savoir plus sur Stetho, reportez-vous au code et à la documentation disponibles sur le référentiel GitHub..