Stetho este o platformă de depanare open source, dezvoltată de Facebook, care oferă dezvoltatorilor Android o experiență bogată și extrem de interactivă de depanare. Cu Stetho, depanarea aplicațiilor native Android devine la fel de simplă ca depanarea unei pagini Web, deoarece vă permite să utilizați instrumentele de dezvoltare ale Google Chrome pentru a efectua diverse activități de depanare, cum ar fi inspecția ierarhiei de vizualizare, inspecția rețelei, gestionarea bazei de date SQLite și multe altele.
În acest tutorial, veți afla cum să adăugați Stetho la un proiect Android și să utilizați atât instrumentele de dezvoltare Google Chrome, cât și utilitarul de comandă al lui Stetho, dumpapp, pentru ao depana.
Pentru a adăuga biblioteca Stetho la proiectul dvs., adăugați com.facebook.stetho: stetho
ca compila
dependența în aplicaţia
ale modulului build.gradle fişier:
java compile 'com.facebook.stetho: stetho: 1.1.1'
În acest tutorial, veți folosi OkHttp, o bibliotecă de rețea populară de la Square, pentru a gestiona toate conexiunile de rețea, deoarece se joacă foarte bine cu Stetho. Adăugați-l ca pe un altul compila
dependenţă:
java compile 'com.facebook.stetho: stetho-okhttp: 1.1.1'
cerere
ClasăCel mai bun moment pentru a inițializa Stetho este atunci când cererea dvs. începe. Prin urmare, trebuie să creați o nouă clasă care să se extindă cerere
și să-l inițieze pe Stetho în interiorul lui onCreate
metodă.
Creați o nouă clasă numită Aplicatia mea și suprascrie-i onCreate
metodă:
"clasa publica java MyApplication extinde aplicatia
@Override publice void onCreate () super.onCreate (); "
Pentru a inițializa Stetho, trebuie mai întâi să creați o instanță de Stetho.InitializerBuilder
, folosind Stetho.newInitializerBuilder
metodă. În continuare, pentru a permite lui Stetho să lucreze cu instrumentele de dezvoltare ale Chrome, trebuie să apelați enableWebKitInspector
. Dacă doriți, de asemenea, să activați dumpapp, trebuie să apelați enableDumpapp
. O singura data Stetho.InitializerBuilder
este gata, îl puteți numi construi
metoda de a genera un initializatorul
obiecte și să le transmită Stetho.initialize
metodă.
Pentru moment, permiteți funcționalitatea implicită utilizând setarea implicită InspectorModulesProvider
și DumperPluginsProvider
. Adăugați următorul cod la onCreate
metodă:
"java // Creați un inițializator Builder Stetho.InitializerBuilder initializerBuilder = Stetho.newInitializerBuilder (acest);
// Activați Chrome DevTools initializerBuilder.enableWebKitInspector (Stetho.defaultInspectorModulesProvider (acest lucru));
// Activați interfața liniei de comandă initializerBuilder.enableDumpapp (Stetho.defaultDumperPluginsProvider (context));
// Utilizați InitializerBuilder pentru a genera un inițializator Stetho.Initializer initializer = initializerBuilder.build ();
// Initializeaza Stetho cu initializatorul Stetho.initialize (initializer); "
Pentru a lăsa sistemul de operare Android să știe că aveți un personalizat cerere
clasă, adăugați un atribut numit Android: Numele
la manifest cerere
etichetați și setați valoarea la numele personalizat cerere
clasă.
„xml
"
După ce ați compilat și instalat aplicația pe un dispozitiv Android (sau emulatorul), porniți Google Chrome și introduceți-l crom: // inspecta în bara de adrese. Veți vedea un ecran care arată astfel:
Apasă pe inspecta link pentru a deschide Instrumente de dezvoltare.
Stetho vă permite să examinați, în timp real, conexiunile de rețea pe care aplicația dvs. le realizează. Cu toate acestea, în Stetho versiunea 1.1.1, aceasta funcționează numai cu biblioteca de rețea OkHttp. Când utilizați OkHttp cu Stetho, trebuie să vă amintiți să adăugați a StethoInterceptor
la OkHttpClient
obiecte Listă
de interceptori de rețea.
Iată câteva exemple de cod care se conectează la HttpBin și preiau un document JSON:
"java // Creați o instanță a OkHttpClient OkHttpClient httpClient = new OkHttpClient ();
// Adăugați interceptor Stetho httpClient.networkInterceptors () adăugați (noul StethoInterceptor ());
încercați // Returnați conținutul din http://httpbin.org/ip Răspunsul răspunsului = httpClient.newCall (noul Request.Builder (). url ("http://httpbin.org/ip") .build ()) .a executa();
captură (IOException ioe) Log.d ("StethoTut", ioe.getMessage ()); “
Când codul rulează, veți vedea următoarele în Reţea din tabelul Instrumente de dezvoltare fereastră:
Dacă dați clic pe adresa URL din prima coloană, veți ajunge la un ecran care afișează mai multe informații despre răspuns:
Cu Stetho, puteți efectua o mulțime de operații în bazele de date SQLite ale aplicației. Apasă pe Resurse și selectați Web SQL. Dacă aplicația dvs. are baze de date SQLite, acestea vor fi listate aici. Selectarea unei baze de date prezintă o listă a tabelelor din baza de date. În cele din urmă, făcând clic pe un tabel afișează înregistrările din tabel:
De asemenea, puteți executa interogări SQL după selectarea unei baze de date SQLite:
Pentru a vedea aplicațiile SharedPreferences
, deschide Resurse din tabelul Instrumente de dezvoltare fereastră și selectați LocalStorage. Veți vedea numele fișierelor pe care aplicația dvs. le utilizează pentru a stoca preferințele. Dacă faceți clic pe un fișier, se afișează perechile cheie-valoare stocate în acel fișier:
Puteți chiar edita valorile stocate într-un fișier:
Rețineți că toate modificările aduse valorilor sunt permanente.
dumpapp este un utilitar puternic care vă permite să manipulați aplicația Android din linia de comandă. Puteți obține acest lucru prin clonarea depozitului lui Stetho:
bash git clone https://github.com/facebook/stetho
Deoarece dumpapp este un script Python, ar trebui să aveți instalată cea mai recentă versiune de Python pe computerul dvs. pentru al utiliza.
Pentru a vizualiza o listă de pluginuri disponibile, introduceți stetho / script-uri și executați următoarea comandă:
bash. / dumpapp -l
Rezultatul arată astfel:
Să folosim plugin-ul numit prefs. Acest plugin este folosit pentru a vizualiza și edita valorile stocate în aplicațiile dvs. SharedPreferences
. De exemplu, următoarea comandă enumeră toate perechile cheie-valoare stocate în aplicațiile dvs. SharedPreferences
:
bash ./dumpapp prefs print
Rezultatul arată astfel:
Pluginurile personalizate dumpapp sunt pur și simplu clase Java care implementează DumperPlugin
interfață. Să creăm un plugin simplu care imprimă numele pachetului aplicației testate.
Creați o nouă clasă în interiorul Aplicatia mea
clasa numită MyDumperPlugin. După suprimarea metodelor DumperPlugin
interfață, clasa dvs. ar trebui să arate astfel:
"clasa java MyDumperPlugin implementează DumperPlugin @Override public String getName ()
@Override public void dump (DumperContext dumpContext) aruncă DumpException "
getName
metoda ar trebui să returneze numele pluginului. Pentru a returna valoarea my_plugin, adăugați următorul cod la getName
metodă:
java return "my_plugin";
depozit
metoda este metoda numită atunci când executați pluginul din linia de comandă. DumperContext
oferă diverse fluxuri de I / O, care vă permit să citiți de la linia de comandă sau să o scrieți. Pentru moment, vom folosi doar ieșirea standard. Adăugați următorul cod la depozit
pentru a obține o referință la fluxul de ieșire standard:
java ImprimareStream out = dumpContext.getStdout ();
Deoarece acest plugin face parte din Aplicatia mea
clasa, pentru a obține numele pachetului de app, puteți apela direct getPackageName
metodă. Odată ce aveți numele pachetului, imprimați-l folosind PrintStream
obiecte println
metodă:
java out.println (MyApplication.this.getPackageName ());
Plugin-ul dvs. personalizat este acum gata de utilizare.
Pluginul creat în pasul anterior nu va fi disponibil pentru Stetho dacă nu creați un furnizor personalizat de pluginuri și îl veți utiliza în timpul inițializării lui Stetho. Un furnizor personalizat de pluginuri este o clasă care implementează DumperPluginsProvider
interfață.
Să creați un furnizor personalizat de pluginuri numit MyDumperPluginsProvider. Creați această clasă în interiorul Aplicatia mea
clasă. După depășirea singurei metode a DumperPluginsProvider
interfață, clasa dvs. ar trebui să arate astfel:
"clasa java MyDumperPluginsProvider implementează DumperPluginsProvider @Override public Iterable
"
Deoarece obține
metoda returnează un Iterable
, tot ce trebuie să faceți este să creați o listă, să adăugați pluginul personalizat în listă și să returnați lista. Codul pentru acest lucru ar arăta astfel:
"java // Creați o listă ArrayList
// Adăugați unul sau mai multe pluginuri personalizate plugins.add (noul MyDumperPlugin ());
// Returnați pluginurile returnează lista;
Totuși, pentru că furnizorii dvs. personalizați ai pluginurilor Iterable
nu include pluginurile implicite, nu le veți putea utiliza în timp ce executați dumpapp. Dacă doriți să utilizați împreună pluginurile personalizate și cele implicite împreună, trebuie să adăugați pluginurile implicite la dvs. ArrayList
. Pentru a obține lista pluginurilor implicite, trebuie să apelați obține
metoda furnizorului de pluginuri returnat de către defaultDumperPluginsProvider
metodă.
"java // Adăugați pluginuri implicite pentru a păstra funcționalitatea originală
pentru pluginul DumperPlugin: Stetho.defaultDumperPluginsProvider (MyApplication.this) .get ()) plugins.add (plugin); “
Furnizorul personalizat de pluginuri este acum gata. Pentru ao folosi, mergi la onCreate
și să treacă o instanță a acestuia la enableDumpapp
apel:
java initializerBuilder.enableDumpapp (noul MyDumperPluginProvider ());
Afișați din nou toate pluginurile disponibile utilizând dumpapp -l
apel. Veți vedea numele pluginului dvs. personalizat în listă:
Pentru ao executa, executați următoarea comandă:
bash ./dumpapp my_plugin
Ar trebui să imprimați numele pachetului aplicației:
În acest tutorial, ați învățat cum să utilizați Stetho în proiectele Android. De asemenea, ați învățat cum să utilizați atât interfața de linie de comandă, dumpapp, cât și instrumentele de dezvoltare Google Chrome pentru a depana aplicațiile. Până acum, trebuie să fi realizat că, deși Stetho nu poate înlocui complet programul de depanare Android Studio, acesta oferă cu siguranță caracteristici care pot îmbunătăți semnificativ experiența de depanare.
Pentru a afla mai multe despre Stetho, consultați codul și documentația disponibilă în depozitul GitHub.