1. 程式人生 > >Android必知必會-Stetho除錯工具

Android必知必會-Stetho除錯工具

一、背景

Stetho是 Facebook 出品的一個強大的 Android 除錯工具,使用該工具你可以在 Chrome Developer Tools檢視APP的佈局, 網路請求(僅限使用Volle, okhttp的網路請求庫), Sqlite, Preference, 一切都是視覺化的操作,無須自己在去使用adb, 也不需要root你的裝置

本人使用自己的Nubia Z9 Mini作為除錯機,由於牽涉到Sqlite資料庫,所以嘗試了很多辦法把它Root了,然而Root之後就無法正常升級系統。
今天得知一除錯神器Stetho,無需Root就能檢視資料庫以及APP的佈局(這一點沒有Android Device Monitor使用方便,但是Android Device Monitor在Mac上總是莫名其妙出問題),使用起來很方便,大家可以嘗試一下。

二、配置流程

1.引入主庫

使用Gradle方式:

// Gradle dependency on Stetho 
  dependencies { 
    compile 'com.facebook.stetho:stetho:1.3.1' 
  } 

此外還支援Maven方式,這裡不做介紹。

2.引入網路請求庫

如果需要除錯網路且你使用的網路請求庫是Volle或者Okhttp,那麼你才需要配置,否則跳過此步。
以下根據自己使用的網路請求庫情況來匯入相應的庫:
1.使用okhttp 2.X

 dependencies { 
    compile 'com.facebook.stetho:stetho-okhttp:1.3.1'
}

2.使用okhttp 3.X

dependencies { 
    compile 'com.facebook.stetho:stetho-okhttp3:1.3.1' 
  } 

3.使用HttpURLConnection

dependencies { 
    compile 'com.facebook.stetho:stetho-urlconnection:1.3.1' 
  }

3.配置程式碼

配置Application

public class XXX extends Application {
  public void onCreate
() { super.onCreate(); Stetho.initializeWithDefaults(this); } }

配置網路請求庫:
OkHttp 2.2.x+ 或 3.x

//方案一
OkHttpClient client = new OkHttpClient();
client.networkInterceptors().add(new StethoInterceptor());

//方案二
new OkHttpClient.Builder()
    .addNetworkInterceptor(new StethoInterceptor())
    .build();

如果使用的是HttpURLConnection,請查閱相關文件。

4.使用

執行重新編譯後的APP程式,保持手機與電腦的連線,然後開啟Chrome瀏覽器,在位址列裡輸入:chrome://inspect然後選擇自己的裝置下執行的APP程序名下的Inspect連結 即可進行除錯。

三、遇到的問題

1.okhttp版本問題:

可能你還在使用okhttp 2.x的版本,在引入網路庫的時候,你需要去檢視一下Stetho當前版本使用的okhttp版本,避免在專案中使用多個不同版本的okhttp

PSokhttp2.x和3.x的引入方式略有不同,不可以直接修改版本號來匯入:

//2.x
compile 'com.squareup.okhttp:okhttp:2.x.x'
//3.x
compile 'com.squareup.okhttp3:okhttp:3.x.x'

2.配置okhttp程式碼方案一報錯:

//方案一
OkHttpClient client = new OkHttpClient();
client.networkInterceptors().add(new StethoInterceptor());

//方案二
OkHttpClient client = new OkHttpClient.Builder()
    .addNetworkInterceptor(new StethoInterceptor())
    .build();

我在使用方案一進行配置okhttp的時候,會報錯:

 Caused by: java.lang.UnsupportedOperationException

不知道是不是相容的問題,大家在使用的時候請注意。