debugする時に追加している記述の備忘録(1)
はじめに
最近debug時に、色々と組み込んでる備忘録のメモ
確かに
debug時にのみデバック処理を追加する方法(Applicationクラス差替)
あたりの処理が ManifestMarger により可能になっているので
その点に関しては便利になった気がする
Android Studio 2.3 Beta 3 の所感
下記に独立化しました
で実際の本題
debug時にのみデバック処理を追加する方法(Applicationクラス差替)
- app/main/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="hoge.fuga.myapp"> <application android:name=".application.HogeApplication"/> </manifest>
- app/debug/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="hoge.fuga.myapp"> <application android:name=".application.DebugHogeApplication" tools:replace="android:name" /> </manifest>
public class DebugHogeApplication extends HogeApplication { @Override public void onCreate() { super.onCreate(); //追記したいDebug記述 } }
ココらへんの話は、
- Stetho
- WebView使っていた頃は重宝
- これ ChromeTab/Intent Browserとかには使えないんだよね・・
- LeakCanary
- 依存ライブラリ*1がことごとく引っかかって導入はやめた
を導入しようみたいなお話でよく出てくる
自分が導入しているやつ
古めのプロジェクト用
SQLite
詳細は、下記の話
ちなみに <IntelliJ IDEAなら覗ける> という話もあったけど自分は動かせた経験がないです。端末依存なのかな??*2
- ただ下記のページの mavenのライブラリは更新されていないので forkして修正パッチ当ててソース導入で使ってる
- BLOBデータを参照するとエラーになる
- ポートがぶつかるとアプリの起動時にエラーになる
一応pullリクは出しているんだけど、
作者の方 sqlite使わずに現在Realm使っているみたいでメンテもされてないし、acceptも無し*3
public class DebugHogeApplication extends HogeApplication { @Override public void onCreate() { super.onCreate(); // SQLiteにアクセするためのサーバーを起動する TelnetSqliteService.createTelnetSqliteServer(getApplicationContext(),12080).start(); } }
PCからつなぐときは、下記のシェルを用意しておくと便利
新しめのプロジェクト
realmのRemoteDebug
詳細は、下記の話。しかもこれ、ほぼ最新じゃないと使えない
public class HogeApplication extends Application { @Override public void onCreate() { super.onCreate(); //追記したいDebug記述 initConfig(); } protected void initConfig(){ Realm.init(this); RealmConfiguration config = new RealmConfiguration.Builder().build(); Realm.setDefaultConfiguration(config); } }
public class DebugHogeApplication extends HogeApplication { @Override public void onCreate() { super.onCreate(); } //◎HogeApplicationのinitConfigを上書き @Override protected void initConfig(){ Realm.init(this); SyncCredentials credentials = SyncCredentials.usernamePassword( "hoge@fuga.jp", "hogehoge", false); //△本当に適当なアカウントでOK SyncUser.loginAsync(credentials, "http://localhost:9080/auth", new SyncUser.Callback() { @Override public void onSuccess(SyncUser user) { RealmConfiguration config = new SyncConfiguration.Builder(user, "realm://localhost:9080/~/debug").build(); Realm.setDefaultConfiguration(config); } @Override public void onError(ObjectServerError error) { //★ここに通常接続時の記述を書いておくとベター Realm.init(this); RealmConfiguration config = new RealmConfiguration.Builder().build(); Realm.setDefaultConfiguration(config); } }); } }
★に関しては、
- ★なしのままだと、ローカルにサーバーが立ち上がっていないとクラッシュする
- debug側のソースをコミットして、レビューする人がコードを見たり実行した時に「エラー出るままのコードコミットするな!!」と怒られる
◎に関して
- Realm Object Serverに登録する ID/pass なので適当な文字列でOK
- メール認証とかないので単なる文字列
なので必須
realmのRemoteDebug に関しての追記(2017/04/07)
RealmConfiguration config = new SyncConfiguration.Builder(user, "realm://localhost:9080/~/debug").build();
のURLに関してですが、
RealmのSlackでお聞きした所
- migrationは未サポート
- urlのデータを消すのは現時点ではできない*4
- したがってテスト時に問題が有るならURLを変更してください
realm://localhost:9080/~/<<アプリケーションID等>>
とのお話でした