Stetho è una piattaforma di debug open source, sviluppata da Facebook, che offre agli sviluppatori Android un'esperienza di debug ricca e altamente interattiva. Con Stetho, il debugging delle app Android native diventa semplice come eseguire il debug di una pagina Web, perché consente di utilizzare gli strumenti di sviluppo di Google Chrome per eseguire varie attività di debug, come ispezione della gerarchia delle viste, ispezione della rete, gestione dei database SQLite e altro.
In questo tutorial, imparerai come aggiungere Stetho a un progetto Android e utilizzare sia gli strumenti di sviluppo di Google Chrome sia l'utilità della riga di comando di Stetho, dumpapp, per eseguire il debug.
Per aggiungere la libreria Stetho al tuo progetto, aggiungi com.facebook.stetho: Stetho
come un compilare
dipendenza nel App
modulo di build.gradle file:
java compile 'com.facebook.stetho: stetho: 1.1.1'
In questo tutorial, userai OkHttp, una popolare libreria di rete di Square, per gestire tutte le connessioni di rete, perché funziona molto bene con Stetho. Aggiungilo come un altro compilare
dipendenza:
java compile 'com.facebook.stetho: stetho-okhttp: 1.1.1'
Applicazione
ClasseIl momento migliore per inizializzare Stetho è quando la tua applicazione sta iniziando. Pertanto, devi creare una nuova classe che si estende Applicazione
e inizializza lo Stetho al suo interno onCreate
metodo.
Crea una nuova classe chiamata La mia applicazione e scavalca il suo onCreate
metodo:
"java public class MyApplication estende l'applicazione
@Override public void onCreate () super.onCreate (); "
Per inizializzare Stetho, devi prima creare un'istanza di Stetho.InitializerBuilder
, usando il Stetho.newInitializerBuilder
metodo. Quindi, per consentire a Stetho di funzionare con gli strumenti di sviluppo di Chrome, devi chiamare enableWebKitInspector
. Se si desidera abilitare anche dumpapp, è necessario chiamare enableDumpapp
. Una volta Stetho.InitializerBuilder
è pronto, puoi chiamarlo costruire
metodo per generare un initializer
oggetto e passalo al Stetho.initialize
metodo.
Per ora, abilitiamo la funzionalità predefinita usando l'impostazione predefinita InspectorModulesProvider
e DumperPluginsProvider
. Aggiungi il seguente codice al onCreate
metodo:
"java // Crea un InitializerBuilder Stetho.InitializerBuilder initializerBuilder = Stetho.newInitializerBuilder (this);
// Abilita inizializzatore Chrome DevToolsBuilder.enableWebKitInspector (Stetho.defaultInspectorModulesProvider (this));
// Abilita l'interfaccia della riga di comando initializerBuilder.enableDumpapp (Stetho.defaultDumperPluginsProvider (context));
// Usa InitializerBuilder per generare un inizializzatore Stetho.Initializer initializer = initializerBuilder.build ();
// Inizializza Stetho con Initializer Stetho.initialize (initializer); "
Per far sapere al sistema operativo Android che hai un'abitudine Applicazione
classe, aggiungi un attributo chiamato Android: nome
a quello del manifest applicazione
tag e imposta il valore sul nome della tua abitudine Applicazione
classe.
"xml
"
Dopo aver compilato e installato la tua app su un dispositivo Android (o sull'emulatore), avvia Google Chrome e digita chrome: // ispezionare nella barra degli indirizzi. Vedrai una schermata simile a questa:
Clicca il ispezionare link per aprire il Strumenti di sviluppo.
Stetho ti consente di ispezionare, in tempo reale, le connessioni di rete effettuate dall'app. Tuttavia, in Stetho versione 1.1.1, funziona solo con la libreria di rete OkHttp. Quando usi OkHttp con Stetho, dovresti ricordare di aggiungere un StethoInterceptor
al OkHttpClient
oggetto di Elenco
di intercettori di rete.
Ecco un codice di esempio che si collega a HttpBin e recupera un documento JSON:
"java // Crea un'istanza di OkHttpClient OkHttpClient httpClient = new OkHttpClient ();
// Aggiungi Stetho interceptor httpClient.networkInterceptors (). Add (new StethoInterceptor ());
prova // Recupera i contenuti di http://httpbin.org/ip Response response = httpClient.newCall (new Request.Builder (). url ("http://httpbin.org/ip") .build ()) .eseguire();
catch (IOException ioe) Log.d ("StethoTut", ioe.getMessage ()); "
Quando il codice viene eseguito, vedrai quanto segue in Rete scheda del Strumenti di sviluppo finestra:
Se fai clic sull'URL nella prima colonna, verrai indirizzato a una schermata che visualizza ulteriori informazioni sulla risposta:
Con Stetho, puoi eseguire molte operazioni sui database SQLite della tua app. Clicca il risorse scheda e selezionare SQL Web. Se la tua app ha database SQLite, saranno elencati qui. La selezione di un database mostra un elenco delle tabelle nel database. Infine, facendo clic su una tabella vengono visualizzati i record della tabella:
È anche possibile eseguire query SQL dopo aver selezionato un database SQLite:
Per visualizzare le tue app SharedPreferences
, apri il risorse scheda del Strumenti di sviluppo finestra e selezionare Memoria locale. Vedrai i nomi dei file utilizzati dalla tua app per memorizzare le preferenze. Facendo clic su un file vengono visualizzate le coppie chiave-valore memorizzate in quel file:
Puoi persino modificare i valori memorizzati in un file:
Nota che qualsiasi modifica apportata ai valori è permanente.
dumpapp è una potente utility che ti permette di manipolare la tua app Android dalla riga di comando. Puoi ottenerlo clonando il repository di Stetho:
bash git clone https://github.com/facebook/stetho
Dato che dumpapp è uno script Python, dovresti avere l'ultima versione di Python installata sul tuo computer per usarla.
Per visualizzare un elenco di plug-in disponibili, immettere Stetho / scripts directory ed eseguire il seguente comando:
bash ./dumpapp -l
L'output è simile a questo:
Usiamo il plugin chiamato prefs. Questo plugin è utilizzato per visualizzare e modificare i valori memorizzati nella tua app SharedPreferences
. Ad esempio, il seguente comando elenca tutte le coppie chiave-valore memorizzate nella tua app SharedPreferences
:
bash ./dumpapp stampa prefs
L'output è simile a questo:
I plugin dumpapp personalizzati sono semplicemente classi Java che implementano il DumperPlugin
interfaccia. Creiamo un semplice plug-in che stampa il nome del pacchetto dell'app in prova.
Crea una nuova classe all'interno di La mia applicazione
classe chiamata MyDumperPlugin. Dopo aver scavalcato i metodi di DumperPlugin
interfaccia, la tua classe dovrebbe assomigliare a questa:
"classe java MyDumperPlugin implementa DumperPlugin @Override public String getName ()
@Override public void dump (DumperContext dumpContext) genera DumpException "
Il getName
il metodo dovrebbe restituire il nome del plugin. Per restituire il valore my_plugin, aggiungi il seguente codice al getName
metodo:
java return "my_plugin";
Il cumulo di rifiuti
metodo è il metodo che viene chiamato quando si esegue il plug-in dalla riga di comando. Il DumperContext
fornisce vari flussi I / O, che consentono di leggere dalla riga di comando o scrivere su di esso. Per ora, useremo solo l'output standard. Aggiungi il seguente codice al cumulo di rifiuti
metodo per ottenere un riferimento al flusso di output standard:
java PrintStream out = dumpContext.getStdout ();
Perché questo plugin fa parte del La mia applicazione
classe, per ottenere il nome del pacchetto dell'app, è possibile chiamare direttamente il getPackageName
metodo. Una volta che hai il nome del pacchetto, stampalo usando il PrintStream
oggetto di println
metodo:
java out.println (MyApplication.this.getPackageName ());
Il tuo plugin personalizzato è ora pronto per l'uso.
Il plug-in che hai creato nel passaggio precedente non sarà disponibile su Stetho a meno che non crei un provider di plug-in personalizzati e lo usi durante l'inizializzazione di Stetho. Un fornitore di plug-in personalizzato è una classe che implementa il DumperPluginsProvider
interfaccia.
Creiamo un fornitore di plugin personalizzato chiamato MyDumperPluginsProvider. Crea questa classe dentro il La mia applicazione
classe. Dopo aver scavalcato l'unico metodo di DumperPluginsProvider
interfaccia, la tua classe dovrebbe assomigliare a questa:
"classe java MyDumperPluginsProvider implementa DumperPluginsProvider @Override public Iterable
"
Perché il ottenere
metodo restituisce un iterable
, tutto ciò che devi fare è creare un elenco, aggiungere il tuo plug-in personalizzato all'elenco e restituire l'elenco. Il codice per farlo sarebbe simile a questo:
"java // Crea una lista ArrayList
// Aggiungi uno o più plugin personalizzati plugins.add (new MyDumperPlugin ());
// Restituisce i plugin di restituzione della lista; "
Tuttavia, poiché il tuo provider di plug-in personalizzati iterable
non include i plug-in predefiniti, non sarà possibile utilizzarli durante l'esecuzione di dumpapp. Se si desidera utilizzare sia i plug-in personalizzati che quelli predefiniti, è necessario aggiungere i plug-in predefiniti al proprio Lista di array
. Per ottenere l'elenco dei plugin predefiniti, devi chiamare il ottenere
metodo del provider di plug-in restituito da defaultDumperPluginsProvider
metodo.
"java // Aggiungi plug-in predefiniti per conservare la funzionalità originale
for (DumperPlugin plugin: Stetho.defaultDumperPluginsProvider (MyApplication.this) .get ()) plugins.add (plugin); "
Il tuo fornitore di plug-in personalizzati è ora pronto. Per usarlo, vai al onCreate
metodo e passare un'istanza di esso al enableDumpapp
chiamata:
java initializerBuilder.enableDumpapp (new MyDumperPluginProvider ());
Elenca di nuovo tutti i plugin disponibili usando il dumpapp -l
chiamata. Vedrai il nome del tuo plugin personalizzato nell'elenco:
Per eseguirlo, eseguire il seguente comando:
bash ./dumpapp my_plugin
Dovrebbe stampare il nome del pacchetto della tua app:
In questo tutorial, hai imparato a usare Stetho nei tuoi progetti Android. Hai anche imparato a utilizzare sia l'interfaccia a riga di comando, dumpapp e gli strumenti di sviluppo di Google Chrome per eseguire il debug delle tue app. Ormai, devi aver capito che, sebbene Stetho non possa ancora sostituire completamente il debugger di Android Studio, offre sicuramente funzionalità che possono migliorare significativamente la tua esperienza di debug.
Per ulteriori informazioni su Stetho, consultare il codice e la documentazione disponibili sul repository GitHub.