본문 바로가기

[안드로이드] Stetho '스테토' - DB 값/네트워킹 상태를 크롬으로 디버깅 하기

Stetho '스테토' 

Facebook에서 만든 안드로이드 개발을 위한 디버깅 플랫폼

DB / REST API를 더 이상 로그(Log)찍어서 확인하지 말자

Facebook의 'Stetho' 로고 이미지

 

 

Facebook의 'Stetho' - 디버깅 플랫폼

  • 크롬(Chrome) 브라우저의 개발툴(Developer Tool)을 사용
  • 값 / 상태 등을 로그(Log)보다 직관적으로 보기 쉽게 편리하게 확인이 가능

 

기능

  • Network '네트워크'

      : HttpUrlConnection / Retrofit / Okhttp를 통해 API 서버와 REST 통신
    요청(Request) 및 응답(Response)의               Header / Body / URL / Parameter 등 통신의 전반적 상태/결과를 자세하게 직관적으로 확인이 가능
  • Database '데이터베이스'

      : SQLite - DB값을 에뮬레이터인 경우는 DDMS로 확인이 가능, 하지만 실제 디바이스는 확인이 불가능
        SharedPreference - 쿠키 / 기타(기본 자료형) 값을 로그(Log)로 찍어서 확인하는 것 외에는 확인 불가
        Stetho는 이러한 SQLite / SharedPreference의 값들을 조회 / 쿼리(Query)를 통한 값 수정이 가능하게 함
  • Layout '레이아웃'

      : Layout XML이 화면에 보여질때 값들을 확인 가능 (Layout 설정 Width / Hight / Text 등)
       
  • Dumpapp

      : 익숙한 UI 방식이 아닌 커멘드 라인(Command) 입력 방식으로 값 조회 / 수정
       
  • JavaScript Console '콘솔'

      : Chome 콘솔창에서 자바스크립트 명령 입력이 가능
       

 

1. Gradle 추가

  • 기본 Gradle 라이브러리
// Stetho 기본 라이브러리
implementation 'com.facebook.stetho:stetho:1.5.1'              
  • 네트워크 기능 사용시 라이브러리 - 사용할 Network 타입에 맞게 추가
// Okhttp3 라이브러리
implementation 'com.facebook.stetho:stetho-okhttp3:1.5.1'

// Okhttp 라이브러리
implementation 'com.facebook.stetho:stetho-okhttp:1.5.1'

// UrlConnection 라이브러리
implementation 'com.facebook.stetho:stetho-urlconnection:1.5.1'

 

 

2. Stetho 설정

  • onCreate() 내부 Stetho 설정
@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);

	// Stetho 설정
	Stetho.initializeWithDefaults(this);
}
  • Network(네트워크) 설정
OkHttpClient client = new OkHttpClient.Builder()
	// OkhttpClient 인스턴스에 Stetho Network 인터셉터 등록
	.addNetworkInterceptor(new StethoInterceptor()) 
	.build();

Retrofit retrofit = new Retrofit.Builder()
	.baseUrl("http://openapi.airkorea.or.kr/")
	.addConverterFactory(ScalarsConverterFactory.create())
	// Stetho 인터셉터를 등록한 OkhttpClient를 Retrofit 인스턴스에 등록
	.client(client)			
	.build();

 

 

상태 확인 - Network

  • 크롬(Chrome) 검색창 입력 " Chrome://inspect "

Chrome 검색창 입력 " Chrome://inspect "

  • 연결된 디바이스 프로젝트 연동 ( 확인할 프로젝트의 Inspect 클릭 )

연결된 디바이스의 해당 앱 프로젝트 연동

  • Network (네트워크) 정보 확인 - URL / Request Method / Response Code / Header / Body 

    : 네트워크 요청 건마다 개별적으로 확인이 가능

네트워크 요청건 마다 개별 확인 가능

  • Response Body 요청 값(페이로드) 확인

실제 요청 값 Body '페이로드' 

 

값 확인 - DB 'SQLite / SharedPreference'

  • DB (SQLite) 실제 값 확인 - 에뮬레이터 뿐만 아니라 실제기기의 SQLite 값을 실시간 확인이 가능

SQLite 구조 / 값 확인

 

  • SQLite 값 설정 - 쿼리(Query)문을 이용해 값 조회, 추가, 삭제 기능이 가능

Query 입력문

  • SQLite 쿼리 사용 GIF - 클릭해서 보시면 제대로 진행됩니다.

 

  • SharedPreference 실제 값 확인 및 변경 - 값을 직접 브라우저(Chrome)에서 변경이 가능

값 확인 / 적용 모습 GIF - 클릭해서 보시면 진행됩니다

 

참고

Stetho - Network / DB 확인하기 위해 로그(Log)를 이용한 복잡한 디버깅보다 직관적인 디버깅 방법