Stetho簡介
Stetho是Facebook開發(fā)的一款幫助android開發(fā)人員快遞調(diào)試應用程序的插件。
它的主要功能分為以下五種:
1、網(wǎng)絡請求狀態(tài)及數(shù)據(jù)查看。
2、本地數(shù)據(jù)庫文件及pref文件的查看以及更改纺棺。
3、視圖層級查看邪狞。
其主要功能可以通過兩個方面展示給開發(fā)者:
1祷蝌、基于Chrome Developer Tools 的界面查看形式。
2外恕、基于dumpapp 的命令行查看形式杆逗。
Stetho的接入方式
做android應用開發(fā)的小伙伴目前大多就采用android studio開發(fā),因此大多都應該對gradle文件相當了解鳞疲,而罪郊,stetho的接入方式就是在項目的gradle
文件中,加上一句dependencies
即可尚洽。內(nèi)容如下:
dependencies {
compile 'com.facebook.stetho:stetho:1.5.0'
}
引入之后悔橄,那么,再次安裝應用程序到手機上調(diào)試時腺毫,在chrome瀏覽器中輸入chrome://inspect
癣疟,將會出現(xiàn)類似于下面這個頁面的結構。
此時表明這個插件已經(jīng)被安裝成功了潮酒。
Stetho引入之后的好處
stetho之所以稱之為應用程序調(diào)試神器睛挚,一定是有它解決了在應用程序開發(fā)過程中開發(fā)者遇到的一些痛點。比如:
1急黎、一個大的項目通常會有很多個開發(fā)者協(xié)作開發(fā)扎狱,因此侧到,有時候開發(fā)者需要知道當前app所在的頁面是哪個activity的時候,通常需要咨詢這個模塊的開發(fā)者淤击,而有了stetho匠抗,你會很方便的找到當前頁在哪個activity,這就是借助視圖層級查看特性了污抬。
2汞贸、應用程序通常設置一些開關,通常開發(fā)者會將這些數(shù)據(jù)寫到pref中印机,比如矢腻,用戶首次進入模塊A,需要彈出引導流程射赛,告知用戶如何使用模塊A功能踏堡。而如果,你想體驗這個流程多次的話咒劲,你不得不清除應用數(shù)據(jù),或者卸載重裝诫隅。而然腐魂,有了stetho,你就可以輕而易舉的更改pref中的數(shù)據(jù)逐纬,更改完畢之后蛔屹,立即生效,直接就可以重新體驗引導流程了豁生。
3兔毒、現(xiàn)在開發(fā)的應用程序絕大多數(shù)都是網(wǎng)絡請求需要的,哪怕是一些工具類應用都大多具備網(wǎng)絡請求模塊甸箱,因此開發(fā)者在開發(fā)過程中育叁,難免會對于服務端返回的數(shù)據(jù)持懷疑態(tài)度,因為芍殖,按照預期豪嗽,數(shù)據(jù)正確的話,ui的渲染不應該是這樣豌骏,那么到底是后端數(shù)據(jù)返回錯誤龟梦,還是程序bug,有了stetho的幫助窃躲,其原因?qū)⒁荒苛巳患品。@一切的一切都是stetho將數(shù)據(jù)模型發(fā)送給Chrome Developer Tools ,最終才已友好的方式展示給了開發(fā)者蒂窒,方便開發(fā)者迅速定位問題躁倒。
Stetho原理
Stetho官網(wǎng)并沒有介紹Stetho的原理荞怒,因此,了解Stetho原理最好的方式莫過于看Stetho的源碼樱溉。本文只是簡單的介紹挣输,因此大概的分析一下stetho的原理:
從源碼中,我們可以大致的推斷出設備上的數(shù)據(jù)發(fā)送到Chrome Developer Tools上最終展示給開發(fā)者看到的流程大致是這樣的:
用語言來描述應該是這樣子:
1福贞、安裝了stetho插件的app啟動之后撩嚼,會啟動一個本地server1(LocalSocketServer),這個本地server1等待著app(client)的連接挖帘。
2完丽、同時,這個本地server1會與另外一個本地server2(ChromeDevtoolsServer)連接著拇舀。
3逻族、本地app一旦連接上,數(shù)據(jù)將會不停的被發(fā)送到本地server1骄崩,然后轉(zhuǎn)由server2.
4聘鳞、然后Chrome Developer Tools,想訪問網(wǎng)站一樣的要拂,訪問了ChromeDevtoolsServer抠璃,隨之將數(shù)據(jù)友好的展示給了開發(fā)者,這么一個過程就此完結脱惰。