Stetho1.1.1でTimberを経由したconsoleへの出力が可能になってた

ふとStethoを見てみると、以下の通り1.1.1がリリースされていました。
ここでは、bug fixとstetho-timberが追加された模様。

https://github.com/facebook/stetho/releases/tag/v1.1.1

stetho-timber 自体、okhttpやhttpconnetionのようにpluginとして実装されてます。
なので、build.gradleにtimber向けの行を追加する必要があります。

SetUp stetho-timber

add dependencies

  • build.gradle
    compile 'com.facebook.stetho:stetho:1.1.1'
    compile 'com.facebook.stetho:stetho-okhttp:1.1.1'
    compile 'com.facebook.stetho:stetho-timber:1.1.1'

Plant StethoTree on Timber

  • Example…
        Stetho.initialize(
                Stetho.newInitializerBuilder(context)
                        .enableDumpapp(Stetho.defaultDumperPluginsProvider(context))
                        .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(context))
                        .build());
        Timber.plant(new StethoTree());

ここでなくても、 onCreateTimber.plant(new StethoTree()); を加えてあげるだけで良いです。
ここはTimberと同じですね。

Build… and see Google Dev Console

Screen Shot 2015-05-02 at 12.45.05

地味に、同じlog文字列に対しては行を折りたたんでカウントしてくれるのが優しいですね

Stethoを使ってAndroidアプリのデバッグを容易にする

Android、iOSのようなクライアントアプリの開発では、特にDB関連や通信環境が絡むデバッグが面倒です。実際にデバッグを行うとき、例えば、Proxyサーバを立てて通信を覗いたり、SQLiteのファイルを直接覗いたりしますね。はたまた、Logの出力を仕込んで、そのログを追うという方法をとることが多いです。

また、単純な通信量であればAndroid Device Monitorなどが使えますが、通信の中身までは見れません。

それらの壁を低くするツールとして、SquareのGitHubから得られるPony Debuggerが有名です。これは、Chrome Developer Tools を使い、通信の内容を簡単に観察したりできるツールです。また、Android/iOSのChromeブラウザであれば、同様にChrome Developer Tools を使い端末上で動作するブラウザの情報を得ることができます。

そして最近、Facebookが出したAndroid向けのStethoを見つけました。リポジトリを見てみると、最初のコミットが2015年1月30日と非常に若いです。これを組み込んだapkではChrome Developer Tools を介し、SQLiteやNetworkの中身を観察することができます。特別なProxyを用意したり、SQLiteのファイルを直接操作する必要もありません。

まだ若いので、使い方とか諸々変わりそうなのでリンクだけ貼っておきます。

基本的には、Applicationを継承したクラスをonCreateするときに、合わせて初期化メソッドを追加するだけ。
ネットワークをChromeで見るには少し手間かけますが、Squareのokhttpを通信向けパッケージとして使っている場合、OkHttpClientを初期化するときにデバッグ設定を追加するだけという手軽さ。

これらの機能を、例えばBuildConfig.DEBUGのときだけ有効にするとかしておけば、社内で配布するapkは誰もがChromeさえあれば通信内容を確認するという環境が作れてすごく良さそう。

なお、logcatに以下のようなsocketに接続できたという出力が得られたらネットワークの通信もChrome上で見ることができる状態になります。

Connected to the target VM, address: 'localhost:8600', transport: 'socket'

Chromeを経由してネットワークの中身を見るとこんな感じ。

Screen_Shot_2015-03-07_at_11_19_21