Stetho 라이브러리는 facebook에서 개발된 안드로이드 디버깅 툴이다.


1. Stetho라이브러리를 추가하자.(http://facebook.github.io/stetho/)


compile 'com.facebook.stetho:stetho:1.4.2' // 네트워크 호출 인터셉트 후 디버깅 하고 싶다면 network helper 도 추가
compile 'com.facebook.stetho:stetho-okhttp3:1.4.2'

- 이때, 네트워크 분석을 위해서 Stetho-okhttp3 라이브러리도 같이 추가한다.

  비록 내가 만든 앱은 Retrofit2로 통신을 하지만 아래의 구조를 가지기 때문에 stetho-okhttp3이다.

  

  

2. 기존 프로젝트의 어느 액티비티든 적용시키는 [Application]클래스를 만들자.


(1) Application을 상속하는 MyApplication 클래스를 생성한 뒤에, 아래코드를 넣으면  [크롬 Inspect 툴]에서 디버깅이 가능하다.


public class MyApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
if (BuildConfig.DEBUG) Stetho.initializeWithDefaults(this); // Debug 모드일때만 Stetho init
OkHttpClient stethoInterceptingClient = new OkHttpClient.Builder()
.addNetworkInterceptor(new StethoInterceptor()) // Stetho Interceptor 추가해야 Chrome Inspect tool 에서 확인 가능, 필수 아님
.build();

Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(stethoInterceptingClient) // Retrofit build 할때 client를 새로 interceptor가 추가 되어있는 client로 교체한다
.build();
}
}

 - if()문은, 디버깅모드일 때만 Stetho를 사용하도록 하는 코드다.

 - 밑에 okHttpClient는 네트워크분석을 위해 Stetho <--> 통신 간에 다리를 놔주는 Interceptor다.

 - 밑에  Retrofit관련코드는 빌더를 만들 때, stethoInterceptor를 retrofit의 client로 연결해주는 코드다.


*내 프로젝트는 특별히 어댑터에서 Retrofit의 baseUrl을 받아야만 해서, 객체 생성 및 빌더를 어댑터클래스에서 선언했었다. 

 그래서 아래처럼 코드를 구성해야했다.


MyApplication.java

public class MyApplication extends Application{
public static OkHttpClient stethoInterceptingClient;
@Override
public void onCreate() {
super.onCreate();

if (BuildConfig.DEBUG) Stetho.initializeWithDefaults(this); // Debug 모드일때만 Stetho init
stethoInterceptingClient = new OkHttpClient.Builder()
.addNetworkInterceptor(new StethoInterceptor()) // Stetho Interceptor 추가해야 Chrome Inspect tool 에서 확인 가능, 필수 아님
.build();

}
}

RecyclerViewAdapter.java

Retrofit retrofit2 = new Retrofit.Builder()
.baseUrl( object.Image+ "/")
.addConverterFactory(GsonConverterFactory.create())
.client(stethoInterceptingClient) // Retrofit build 할때 client를 새로 interceptor가 추가 되어있는 client로 교체한다
.build();

 - MyApplication클래스는 public static 만 붙히면, 전 영역의 Activity에서 다 사용이 가능하다.***

   [ public static 전역변수 --> MyApplication.전역변수 in 어느 액티비티 ] 

   [ public static 매쏘드() --> MyApplication MyApp = (MyApplication)getApplicationContext();  -->   MyApp.매쏘드(); ]

   [ 그래서 토스트메세지 or 폰트 적용 or 로딩 다이얼로그 구현할 때, 이 Application클래스에 선언한다 ]

   참고 : http://uroa.tistory.com/43(어플리케이션 클래스 설명),  http://gun0912.tistory.com/72 (로딩중띄우기), http://gun0912.tistory.com/10 (폰트적용)


   그러므로 다른 클래스에서 선언되는 Retrofit 객체에 들어갈 OkhttpClient는 전역변수로 public static으로 선언했다.


3. 매니페스트에  MyApplication클래스를 <application>으로 등록하자. 

 - 핵심은 android:name = " .어플리케이션 클래스명 " 이다.


<application
android:name=".MyApplication"

android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">


4. 크롬에서 [chrome://inspect/ ]를 쳐서 Stetho를 이용해보자.


(1) 검색된 device 정보 아래 [inspect]를 눌러 들어갈 수 있다.





(2) 파싱되는 정보가 나온다. 더이상 json파싱을 로그로 확인하지 않아도 된다.



(3) Database(sqlite)는 조회만 된다.(쿼리문을 날리면 수정이 가능하다)





(4) SharedPreferences 는 value값을 마음대로 수정 가능하다.

+ Recent posts