きっかけ
もともとAndroid端末内のSQLiteの中身を覗きたかった。
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
で、TelnetSqlite と RdbAssistantを知ったけど、面倒で手を付けて無かった。
そんなときに、Stethoを知った。
StethoでAndroidのNetwork Performanceを見る - Qiita 読んで、使ってみようと思った。
ハマった
Chrome DevToolsってどうやって起動するんだ?
アドレス欄に chrome://inspect/#devices
を入力したらいけました。
ドキュメントはちゃんと読みましょう。。
inspectってリンクが表示されない
Chrome DevToolsは起動したけど、パッケージ名だけでinspect
ってリンクが表示されてない。
ネットワークアクセスをほとんどしないアプリを作っていて、enableWebKitInspector
は要らないと思ってた。
enableWebKitInspector
つけて、再度インストールしたら表示された。
とりあえずつけとくべきっぽい。
releaseビルドに含まれないようにする
実際の差分はこちら
debugにのみユーティリティクラスを作る
至って普通。
package hm.orz.chaos114.android.carnavimodoki.util;
import android.content.Context;
import com.facebook.stetho.Stetho;
public class StethoUtil {
public static void initStetho(Context applicationContext) {
Stetho.initialize(
Stetho.newInitializerBuilder(applicationContext)
.enableDumpapp(Stetho.defaultDumperPluginsProvider(applicationContext))
.enableWebKitInspector(Stetho.defaultInspectorModulesProvider(applicationContext))
.build());
}
}
Applicationクラスの修正
下記、抜粋したコードです。
リフレクションによりStethoUtil
のメソッドを呼び出すことで、import文にも現れず、
クラスが存在する場合のみ実行されます。
public class App extends android.app.Application {
@Override
public void onCreate() {
super.onCreate();
initStetho();
}
private void initStetho() {
try {
// debugビルドの場合のみ成功
Class<?> clazz = Class.forName("hm.orz.chaos114.android.carnavimodoki.util.StethoUtil");
clazz.getMethod("initStetho", Context.class).invoke(null, this);
} catch (Exception e) {
// ignore
}
}
}
こんなんでいいのかなぁ。。
proguardは設定が必要ですね。
雑感
思ってた以上に、導入は簡単でした。
releaseに影響しないようにも出来たと思うし。
SQLiteの中身も、簡単に覗けたし。
ネットワーク使うようなものであれば、OkHttpClientのFactoryクラス作る感じでしょうか?
使うことがあれば、またやってみようと思います。