先日Debotという名前のライブラリをリリースし、勉強会で発表したりしたのですが、主に英語で書いたりしていたので、ブログにも書こうと思います。
デバッグ用ライブラリとしての特徴
Debotはアプリのツールバーにデバッグメニューを簡単に追加できるライブラリです。標準でデバッグ機能として以下がついています。
- Activity名、Intent情報を表示する
- 画面密度を表示する
- アプリ情報(VersionCode,VersionName等)を表示する
- 自動入力機能(特定のTextViewに指定した文字を入れる)
また、カスタムプラグインで自分が必要なデバッグ機能を容易に追加することができます。
@DebotAnnotation
アノテーションをつけたメソッドはDebotから呼び出すことができます。つまりメニューからActivity内の特定の処理を実行することができます。つまり、 デバッグの時に繰り返し入力するなどの作業を自動化できます。
どういうモチベーションで作ったか
このライブラリを作った動機は大きく2つあります。
デバッグの時間を短縮したい
開発時は仕様を検討したり、コードを書いたりもしますが、デバッグ作業は馬鹿になりません。特に入力周りや特定の処理を経ないと確認できない部分など、その画面を再現するために多くの時間が費やされます。そういう時間を減らし、より創造的なことに時間を割けるようにしたいと考えました。
どのアプリでも使うデバッグ機能をモジュール化したかった
いくつかアプリを作っていると、大体以下のことについて考えます。
例えば、画面が増えてくると、「今見てるこの画面のActivity名ってなんだっけ?」ということが頻繁にあります。そういう時にちょろっと確認できたらよいなと思うのですが、都度書くのも馬鹿らしいです。 Debotのようなライブラリを作ることで、ペロッとデバッグ機能が追加できるんじゃないかと思いました。
簡単な使い方
1.Dependenciesに追加してやります。
compileDebug 'com.tomoima.debot:debot:1.0.1' compileRelease 'com.tomoima.debot:debot-no-op:1.0.1'
上記によりreleaseに入れなくすることができます。
2.アプリケーションクラスから初期化してやります。
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); DebotConfigurator.configureWithDefault(this); } }
3.デバッグ処理をメニューに追加したいActivityに以下を追加します。
public class MainActivity extends AppCompatActivity{ @Override public boolean onCreateOptionsMenu(Menu menu) { Debot.onCreateOptionsMenu(menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { Debot.onOptionsItemSelected(item); return super.onOptionsItemSelected(item); } @Override protected void onResume() { super.onResume(); Debot.onResume(this); } @Override protected void onPause() { super.onPause(); Debot.onPause(this); } }
BaseActivityを作って上記を書いてあげると、いちいち書かなくて済むようになるのでおすすめです。 以上でデバッグメニューがデバッグ版のみに表示されるようになります。
カスタムメニューの追加
自分でデバッグ機能を追加したい場合は DebotStrategy
を継承してやります。
public class MyDebotStrategy extends DebotStrategy{ @Override public void startAction(@NonNull Activity activity) { // Do your things } }
で、アプリケーションクラスで設定してあげます。
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); DebotStrategyBuilder builder = new DebotStrategyBuilder.Builder(context) .registerMenu("My debug feature", new MyDebotStrategy()) .build(); DebotConfigurator.configureWithCustomizeMenu(this, builder.getStrategyList()); } }
Activityのメソッドを呼んであげる
例えばデバッグメニューの一つとして"その画面で叩くApiをコールする"という処理を追加したいとします。
Activityに@DebotAnnotation
をつけたメソッドを作ってやります。
//Your Activity @DebotAnnotation("debugApiCall") //カッコ内はメソッド名と同じにしてやる public void debugApiCall() { ApiClient.call(Api_hoge); }
メニューに追加するために、DebotCallActiviyMethodStrategy()
を呼んであげます。
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); DebotStrategyBuilder builder = new DebotStrategyBuilder.Builder(context) .registerMenu("callApi", new DebotCallActivityMethodStrategy("debugApiCall")) .build(); DebotConfigurator.configureWithCustomizeMenu(this, builder.getStrategyList()); } }
上記により、デバッグメニューにcallApi
が追加され、実行するとApiがコールされるようになります。
ActivityにdebugApiCall()
というメソッドがなければ、何も実行されません。