Stetho에서 Android의 Network Performance 보기

자기소개



안녕하세요 @wasabeef_kr 입니다.
아, 그러고 보니 2015/4/25(토)에 DroidKaigi이 있네요.
나도 참가하기 때문에, 이런 장소에서 정보 교환 할 수 있으면 좋네요.

이번은 요 전날 Facebook이 공개한 Stetho에 대해 소개하고 싶습니다.



Stetho



Stetho는 Android 용 Debug Bridge이며 이것을 사용하면
Chrome Developer Tools의 일부를 활용하여 Javascript와 마찬가지로 Network 상태를 확인할 수 있는 도구입니다.


Usage



Download



우선은 Stetho 본체를 지정합니다.
// Gradle dependency on Stetho
dependencies {
  compile 'com.facebook.stetho:stetho:1.0.0'
}

네트워크 검사를 사용하려면
OkHttpClient 또는 UrlConnection용 후크 라이브러리도 지정합니다.
dependencies {
  compile 'com.facebook.stetho:stetho-okhttp:1.0.0'
}

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

Setup



Proguard의 Shrink 대상에서 stetho 패키지를 제거합니다.
-keep class com.facebook.stetho.** {*;}

Application 클래스 등으로, Stetho의 초기화를 실시합니다.
Default의 Provider를 사용하는 경우대로 다음과 같이 합니다.
public class MyApplication extends Application {
  public void onCreate() {
    super.onCreate();
    Stetho.initialize(
      Stetho.newInitializerBuilder(this)
        .enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
        .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this))
        .build());
  }
}

OkHttpClient networkInterceptors 에 추가합니다.
예를 들어, Retrofit + Glide or Picasso 등 여러 개로 OkHttpClient를 사용하는 경우
각 OkHttpClient 인스턴스에 지정하지 않으면 성공적으로 검색할 수 없습니다.
OkHttpClient client = new OkHttpClient();
client.networkInterceptors().add(new StethoInterceptor());
  • Retrofit의 경우
  • return new RestAdapter.Builder()
      .setEndpoint("http://wasabeef.jp")
      .setClient(new OkClient(client))
      .build();
    
  • Glide의 경우
  • OkHttpUrlLoader.Factory factory = new OkHttpUrlLoader.Factory(client);
    
    // 3.4以下
    Glide.get(this).register(GlideUrl.class, InputStream.class, factory);
    
    // 3.5以上
    public class MyGlideModule extends OkHttpGlideModule {
      @Override
      public void registerComponents(Context context, Glide glide) {
        glide.register(GlideUrl.class, InputStream.class, factory);
      }
    }
    
  • Picasso의 경우
  • Picasso picasso = new Picasso.Builder(this).downloader(new OkHttpDownloader(client)).build();
    Picasso.setSingletonInstance(picasso);
    

    커스텀 덤프를 이용하는 경우는, 이와 같이 지정합니다.

    표준 Stetho가 출력하는 데이터에서 부족한 경우 사용자 지정 Provider를 만듭니다.
    설명 할 수 없으므로 샘플을 확인하십시오.
    Stetho.initialize(Stetho.newInitializerBuilder(context)
        .enableDumpapp(new MyDumperPluginsProvider(context))
        .build())
    
    private static class MyDumperPluginsProvider implements DumperPluginsProvider {
      public Iterable<DumperPlugin> get() {
        ArrayList<DumperPlugin> plugins = new ArrayList<DumperPlugin>();
        for (DumperPlugin defaultPlugin : Stetho.defaultDumperPluginsProvider(mContext).get()) {
          plugins.add(defaultPlugin);
        }
        plugins.add(new MyDumperPlugin());
        return plugins;
      }
    }
    

    Features



    자바 스크립트를 개발하는 사람은 익숙한 것이라고 생각합니다.
    Chrome DevTools에서 확인합니다.

    기기를 PC에 연결하고 Chrome DevTools > inspect를 시작합니다.


    Network를 확인하면 Image, Json 데이터는 물론이고, 데이터 사이즈, 응답 시간도 확인할 수 있습니다.


    Resource를 확인하면, 예를 들면 ActiveAndroid의 ORM등에서 SQLite를 이용하고 있는 경우는
    DB의 데이터 상태를 빠르고 쉽게 확인할 수 있습니다.


    잡감



    너무 편리했기 때문에 여러분과 나누면 좋겠습니다.
    뭔가 있으면 @wasabeef_kr 까지

    좋은 웹페이지 즐겨찾기