Debugging Android Apps med Facebooks Stetho
39
Del
21
Del
Dette Cyber mandag Envato Tuts + Kursene vil bli redusert til bare $ 3. Ikke gå glipp av.
Innledning
Stetho er en åpen kildekode-debugging plattform, utviklet av Facebook, som tilbyr et rikt og svært interaktive debugging erfaring til Android-utviklere. Med Stetho, debugging innfødte Android apps blir så enkelt som debugging en nettside, fordi det tillater deg å bruke Google Chrome utviklerverktøy for å utføre ulike avlusings aktiviteter, for eksempel visning hierarki inspeksjon, nettverk inspeksjon, SQLite database management, og mer.
I denne opplæringen, skal du lære hvordan du legger Stetho til en Android-prosjektet og bruke både Google Chrome utviklerverktøy og Stetho kommandolinje verktøyet, dumpapp, å feilsøke det.
1. Legge Gradle Avhengig
Hvis du vil legge til Stetho biblioteket til prosjektet, legger com.facebook.stetho: stetho som kompilere avhengighet i app modulens build.gradle filen:
kompilere 'com.facebook.stetho: stetho: 1.1.1 '
I denne opplæringen, vil du bruke OkHttp, en populær nettverk biblioteket fra Square, for å administrere alle nettverkstilkoblinger, fordi den spiller veldig bra med Stetho. Legg det som en annen kompilere avhengighet:
kompilere 'com.facebook.stetho: stetho-okhttp: 1.1.1'
2. Initialisering Stetho
Trinn 1: Opprette et egendefinert program Class
Den beste tiden å initial Stetho er når søknaden starter. Derfor må du opprette en ny klasse som strekker Søknad og initial Stetho inni sin onCreate metode
Opprett en ny klasse kalt MyApplication og overstyre sin onCreate metode.
Public class MyApplication strekker Application {Override offentlig ugyldig onCreate () {super.onCreate (); }}
For å initial Stetho, må du først opprette en forekomst av Stetho.InitializerBuilder, ved hjelp av Stetho.newInitializerBuilder metoden. Deretter å tillate Stetho å jobbe med Chrome utviklerverktøy, må du ringe enableWebKitInspector. Hvis du også vil aktivere dumpapp, må du ringe enableDumpapp. Når Stetho.InitializerBuilder er klar, kan du ringe sin build metode for å generere en initializer objekt og gi det til Stetho.initialize metoden.
For nå, la oss gjøre det mulig standard funksjonalitet ved hjelp av standard InspectorModulesProvider og DumperPluginsProvider. Legg til følgende kode i onCreate metode:
//Opprett en InitializerBuilderStetho.InitializerBuilder initializerBuilder = Stetho.newInitializerBuilder (denne); //Aktiver Chrome DevToolsinitializerBuilder.enableWebKitInspector (Stetho.defaultInspectorModulesProvider (denne)); //Aktiver kommandolinje interfaceinitializerBuilder .enableDumpapp (Stetho.defaultDumperPluginsProvider (kontekst)); //Bruk InitializerBuilder å generere en InitializerStetho.Initializer initializer = initializerBuilder.build (); //Initial Stetho med InitializerStetho.initialize (initializer);
Trinn 2: Redigering Manifest
Å la operativsystemet Android vet at du har en tilpasset Application klasse, legge til et attributt som heter android. navngi til manifestet søknad tag og sette verdien til navnet på den tilpassede Application klassen
< søknad android: ". MyApplication" name = android: allowBackup = "true" android: label = "@ streng /APP_NAME" android: icon = "@ Mipmap /ic_launcher" android: tema = "@ stil /AppTheme" > ... < /søknad >
3. Ved hjelp av Chrome DevTools
Etter kompilering og installering av appen på en Android-enhet (eller emulator), starter Google Chrome og skriv inn chrome: //inspisere i adressefeltet. Du vil se et skjermbilde som ser slik ut:
Klikk på inspisere linken for å åpne utviklerverktøy
Trinn 1:. Inspeksjon nettverkstilkoblinger
Stetho lar deg kontrollere, i sanntid, nettverkstilkoblingene som appen gjør. Men i Stetho versjon 1.1.1, dette fungerer bare med OkHttp nettverket biblioteket. Ved bruk OkHttp med Stetho, bør du huske å legge en StethoInterceptor til OkHttpClient objektets Liste over nettverks interceptors
Her er noen eksempelkode som kobles til HttpBin og henter en JSON-dokument.
//Opprett en forekomst av OkHttpClientOkHttpClient httpClient = new OkHttpClient (); //Legg Stetho interceptorhttpClient.networkInterceptors () legger (ny StethoInterceptor ());. try {//Hente innholdet http://httpbin.org/ip Response svar = httpClient.newCall (. ny Request.Builder () url ("http://httpbin.org/ip") att bygga ()) .execute ();} catch (IOException IOE) {Log.d ("StethoTut", ioe.getMessage ());}
Når koden kjøres, vil du se følgende i kategorien Nettverk av Developer Tools vinduet:
Hvis du klikker på nettadressen i den første kolonnen, vil du bli ført til et skjerm som viser mer informasjon om responsen:
Trinn 2: Querying SQLite databaser
Med Stetho, kan du utføre en rekke operasjoner på appens SQLite databaser. Klikk på fanen Resources og velg Web SQL. Hvis din app har noen SQLite databaser, vil de bli listet her. Velge en database viser en liste over tabeller i databasen. Endelig klikke en tabell viser registreringer av tabellen:
Du kan også utføre SQL-spørringer etter å ha valgt en SQLite database:
Trinn 3: Manipulere appens Preferences
Å se appens SharedPreferences, åpner Resources kategorien i Developer Tools vinduet og velg localstorage. Du vil se navnene på filene programmet bruker til å lagre innstillingene. Klikke på en fil viser nøkkelverdipar lagret i denne filen:
Du kan også redigere verdiene som er lagret i en fil:
Vær oppmerksom på at eventuelle endringer du gjør på de verdiene som er permanent <. br>
4. Bruke dumpapp
Trinn 1: Nedlasting dumpapp
dumpapp er et kraftig verktøy som lar deg manipulere din Android app fra kommandolinjen. Du kan få det ved å klone Stetho depot:
git clone http://github.com/facebook/stetho
Because dumpapp er et Python-skript, bør du ha den nyeste versjonen av Python installert på datamaskinen for å bruke det .
Trinn 2: Bruke Plugins
Hvis du vil vise en liste over tilgjengelige plugins, angir stetho /scripts mappa og kjør følgende kommando:
./dumpapp -l
resultatet ser omtrent slik ut:
La oss bruke plugin kalt prefs. Denne plugin brukes til å vise og redigere verdiene som er lagret i appens SharedPreferences. For eksempel følgende kommando viser alle nøkkelverdipar lagret i appens SharedPreferences:
./dumpapp prefs ut
Utgangen ser omtrent slik ut:
Trinn 3: Opprette et tilpasset Plugin
Custom dumpapp plugins er rett og slett Java-klasser som implementerer DumperPlugin grensesnittet. La oss lage en enkel plugin som skriver ut navn pakken av programmet som blir testet.
Opprett en ny klasse innenfor MyApplication klasse kalt MyDumperPlugin. Etter overordnede metodene i DumperPlugin grensesnitt, bør klassen din se slik ut:
klassen MyDumperPlugin implementerer DumperPlugin {Override public String getName () {}Override public void dump (DumperContext dumpContext) kaster DumpException {}}
Den getName Metoden skal returnere navnet på plugin. Returnere verdien my_plugin, legge til følgende kode i getName metode:
tilbake "my_plugin";
dump metoden er den metoden som kalles når du kjører plugin fra kommandolinjen. Den DumperContext gir ulike I /O bekker, som lar deg lese fra kommandolinjen eller skrive til den. For nå vil vi bare være å bruke standard ut. Legg til følgende kode i dump metode for å få en henvisning til standard output stream:
Print ut = dumpContext.getStdout ();
Fordi denne plugin er en del av MyApplication klassen, for å få navnet på pakken av app, kan du ringe direkte til getPackageName metoden. Når du har pakkenavnet, skrive det ut med Print objektets println metode:
out.println (MyApplication.this.getPackageName ());
Den egendefinerte plugin er nå klar til bruk
. Trinn 4: Opprette et tilpasset Plugins Provider
plugin du opprettet i forrige trinn vil ikke være tilgjengelig for Stetho med mindre du oppretter en tilpasset plugins leverandør og bruke den under initialisering Stetho. En tilpassede plugins leverandøren er en klasse som implementerer DumperPluginsProvider grensesnittet.
La oss lage en ny tilpasset plugins leverandør kalt MyDumperPluginsProvider. Lag denne klassen inni MyApplication klassen. Etter overstyrer den eneste metoden for DumperPluginsProvider grensesnitt, bør klassen din se slik ut:
klassen MyDumperPluginsProvider implementerer DumperPluginsProvider {Override offentlig Iterable < DumperPlugin > får () {}}
Fordi get metoden returnerer en Iterable, er alt du trenger å gjøre er å lage en liste, legge til egendefinerte plugin til listen, og returnere listen. Koden for å gjøre det ville se slik ut:
//Lag en listArrayList < DumperPlugin > plugins = new Arraylist < > (); //Legg en eller flere egen pluginsplugins.add (ny MyDumperPlugin ()); //Returner listreturn plugins;
Men fordi den tilpassede plugins leverandørens Iterable omfatter ikke standard plugins, vil du ikke kunne bruke dem mens du kjører dumpapp. Hvis du ønsker å bruke både egendefinerte og standard plugins sammen, bør du legge standard plugins til din Arraylist. For å få en liste over standard plugins, må du ringe get metoden av plugins leverandør returneres av defaultDumperPluginsProvider metoden
//Legg standard plugins å beholde opprinnelige functionalityfor (DumperPlugin plugin. Stetho.defaultDumperPluginsProvider (MyApplication.this). får ()) {plugins.add (plugin);}
Din tilpassede plugins leverandøren er nå klar. For å bruke det, gå til onCreate metode og passerer en forekomst av den til enableDumpapp samtale:
initializerBuilder.enableDumpapp (ny MyDumperPluginProvider ());
Trinn 5: Bruke Custom Plugin
List alle tilgjengelige plugins igjen ved hjelp av dumpapp l samtalen. Du vil se navnet på den tilpassede plugin i listen:
For å kjøre den, utføre følgende kommando:
./dumpapp my_plugin
Det bør skrive navn pakken din app:
Konklusjon
I denne opplæringen, lært deg hvordan du bruker Stetho i Android-prosjekter. Du har også lært å bruke både kommandolinje-grensesnitt, dumpapp og Google Chrome utviklerverktøy for å feilsøke programmene dine. Nå må du ha innsett at selv om Stetho kan ikke fullt ut erstatte Android Studio debugger ennå, definitivt det tilbyr funksjoner som i betydelig grad kan forbedre din debugging opplevelse.
Hvis du vil vite mer om Stetho, se koden og dokumentasjonen som er tilgjengelig på GitHub depotet. Anmeldelser