FaceBook出品 -- Android除錯神器Stetho

夏雨友人帳發表於2017-03-24

前言:

在我們平時開發中,經常會用到網路請求,sharepreference或者是資料庫,但是要做除錯的時候卻很麻煩.網路請求需要用抓包,資料庫除錯起來就更麻煩了,需要root手機,並且頻繁的開啟DDMS匯出資料庫,然後才能開啟.所以facebook開源了一款工具,可以通過Chrome對安卓程式進行一系列的除錯

專案DEMO原始碼

github.com/yulyu2008/S…

1.簡單使用

1.1新增grade

compile 'com.facebook.stetho:stetho:1.1.1'

只有stetho庫是必須的,想檢視網路請求的話,需要使用下面的兩個庫之一(看你的網路庫用的是okhttp還是urlconnection)

compile 'com.facebook.stetho:stetho-okhttp3:1.3.1'
或者
compile 'com.facebook.stetho:stetho-urlconnection:1.3.1'

1.2初始化

public class XiayuApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Stetho.initialize(
                Stetho.newInitializerBuilder(this)
                        .enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
                        .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this))
                        .build());

    //注意:下面這段話是為okhttpclient配置攔截器,只有用這個okhttpclient請求資料才能被攔截
    OkHttpClient client = new OkHttpClient.Builder()
         .addNetworkInterceptor(new StethoInterceptor())//新增Stetho的攔截器
         .build();
    //使用自定義的OkHttpClient
    OkHttpUtils.initClient(client);複製程式碼

1.3模擬網路請求程式碼,資料庫使用等程式碼

這裡只貼出SharedPreferences模擬程式碼

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SharedPreferences sp = getSharedPreferences("config", 0);
        SharedPreferences.Editor edit = sp.edit();
        edit.putString("name", "xiayu");
        edit.putBoolean("handsome?", true);
        edit.commit();
    }
}複製程式碼

這裡貼出網路請求模擬程式碼(這裡用的是Okhttputils模擬網路請求,記得要初始化,初始化方法在上面的XiayuApplication 程式碼中有)

public void net(View v) {
    OkHttpUtils.get()
            .url("https://api.douban.com/v2/movie/top250")
            .addParams("start","0")
            .addParams("count","10")
            .build().execute(new StringCallback() {
        @Override
        public void onError(Call call, Exception e, int id) {
            System.out.println("請求失敗");
        }

        @Override
        public void onResponse(String response, int id) {
            tv.setText(response);
            System.out.println("請求成功");
        }
    });

}複製程式碼

1.4使用Stetho進入除錯

在Chrome瀏覽器中輸入 chrome://inspect/#devices

在這裡能夠看到你的專案,點選inspect進入除錯

FaceBook出品 -- Android除錯神器Stetho
這裡寫圖片描述

在Resources這裡能夠看到SharedPreferences以及資料庫中儲存的資料(資料庫在Web SQL裡面)

FaceBook出品 -- Android除錯神器Stetho
這裡寫圖片描述

在Network這裡能夠看到http請求

FaceBook出品 -- Android除錯神器Stetho
這裡寫圖片描述

2.高階使用(debug包中能夠除錯,release包中不允許除錯)

如果只是按照上面的配置,那麼無論是在debug包中,還是在正式釋出的release包中都能夠除錯,那麼會把除錯功能都暴露在正式版本中,所以接下來是介紹如何只在debug版本中開啟除錯

2.1跟換gradle配置

將compile換成debugCompile ,這樣在debug版本中才會依賴這些框架

debugCompile 'com.facebook.stetho:stetho:1.1.1'
debugCompile 'com.facebook.stetho:stetho-okhttp3:1.3.1'複製程式碼

2.2更換初始化的配置

在src目錄下新建一個debug目錄,並建立一個debug的Application和AndroidManifest

debug的Application繼承專案中的Application,並對stetho做初始化

FaceBook出品 -- Android除錯神器Stetho
這裡寫圖片描述

public class MyDebugApplication extends XiayuApplication{
        @Override
        public void onCreate() {
            super.onCreate();
            Stetho.initialize(
                    Stetho.newInitializerBuilder(this)
                            .enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
                            .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this))
                            .build());
        }
    }複製程式碼

debug的AndroidManifest配置如下

FaceBook出品 -- Android除錯神器Stetho
這裡寫圖片描述

<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.xiayu.stethodemo"
          xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools">


    <application
        android:name="debugapp.MyDebugApplication"
        tools:replace="android:name"/>

</manifest>複製程式碼

這樣就大功告成了, 以後除錯就變得 so easy了

3.專案DEMO原始碼

github.com/yulyu2008/S…

注意:如果你能夠看到你的專案,但是點選inspect後彈出的視窗一直顯示空白的話,可能你的除錯被攔截了,這個情況需要開啟vpn才能夠除錯(如果自己沒有vpn,可以考慮使用免費的vpn藍燈--lantern,這裡就不介紹怎麼使用vpn了)

4.補充

經過測試,只有在第一次開啟除錯介面的時候需要vpn,之後使用的時候就不需要vpn了,如果沒有vpn的可以自己下一個藍燈--lantern

熱門文章

相關文章