Debugging Apps Android cu Stetho Facebook

Introducere

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.

1. Adăugarea dependențelor Gradului

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'

2. Inițierea lui Stetho

Pasul 1: Crearea unui personalizat 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); "

Pasul 2: Editarea Manifestului

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

...

"

3. Folosind DevTools-ul Chrome

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.

Pasul 1: Inspectarea conexiunilor în rețea

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:

Pasul 2: Interogarea bazelor de date SQLite

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:

Pasul 3: Manipularea preferințelor aplicației dvs.

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.

4. Folosind dumpapp

Pasul 1: Descărcarea dumpapp

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.

Pasul 2: Utilizarea pluginurilor

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:

Pasul 3: Crearea unui plugin particularizat

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.

Pasul 4: Crearea unui furnizor de pluginuri personalizate

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 obține()

 "

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 plugins = noul 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 ());

Pasul 5: Utilizarea pluginului personalizat

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:

Concluzie

Î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.

Cod