前言:
在我們平時開發中,經常會用到網絡請求,sharepreference或者是數據庫,但是要做調試的時候卻很麻煩.網絡請求需要用抓包,數據庫調試起來就更麻煩了,需要root手機,並且頻繁的打開DDMS導出數據庫,然後才能打開.所以facebook開源了一款工具,可以通過Chrome對安卓程序進行一系列的調試
項目DEMO源碼
https://github.com/yulyu2008/StethoDemo
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進入調試
在Resources這裏能夠看到SharedPreferences以及數據庫中存儲的數據(數據庫在Web SQL裏面)
在Network這裏能夠看到http請求
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做初始化
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配置如下
<?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源碼
https://github.com/yulyu2008/StethoDemo
注意:如果你能夠看到你的項目,但是點擊inspect後彈出的窗口一直顯示空白的話,可能你的調試被攔截了,這個情況需要開啓vpn才能夠調試(如果自己沒有vpn,可以考慮使用免費的vpn藍燈–lantern,這裏就不介紹怎麼使用vpn了)
4.補充
經過測試,只有在第一次打開調試界面的時候需要vpn,之後使用的時候就不需要vpn了,如果沒有vpn的可以自己下一個藍燈–lantern