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.
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'
Application
ClasseLe 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); "
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
"
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.
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:
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:
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..
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..
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:
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é.
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
"
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
// 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 ());
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:
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..