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>
  • app/debug/java/DebugHogeApplication.java
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データを参照するとエラーになる
    • ポートがぶつかるとアプリの起動時にエラーになる

github.com

一応pullリクは出しているんだけど、

作者の方 sqlite使わずに現在Realm使っているみたいでメンテもされてないし、acceptも無し*3

  • app/debug/java/DebugHogeApplication.java
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);
    }
}   
  • app/debug/java/DebugHogeApplication.java
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でお聞きした所

  1. migrationは未サポート
  2. urlのデータを消すのは現時点ではできない*4
    1. したがってテスト時に問題が有るならURLを変更してください
realm://localhost:9080/~/<<アプリケーションID等>>

とのお話でした

*1:G様のsupport libraryとかも

*2:OS6のGalaxyとかはadb pullすらダメなので、動かせないのは分かるんですけどね・・

*3:mavenの奴もエラー出てるままだし・・

*4:将来的にはサポートされる予定らしい