Daggerが内部でどんなモデルを作ってどんな処理をしているんだ。。ってなったり、エラーになって、中身のコードを読みにいって、この変数に何が入っているんだろう。。ってなったりすることが稀にあるのでメモしておきます。
appモジュールなどでcompileOnlyでkaptで使うコンパイラの依存関係を追加して、Android Studioが使っていデバッグしたいコードを見られるようにします。プロジェクトでの編集はこれだけです。デバッグでの利用が終わったら消してください。
dependencies {
// compileOnlyで追加する
compileOnly 'com.google.dagger:dagger-compiler:2.30.1'
// hiltなら以下など
compileOnly "com.google.dagger:hilt-android-compiler:2.29.1-alpha"
}
デバッグしたいコードをcommand + option + oなど(macでのFind simbolのショートカット)でブレークポイントつけたいクラス、処理を探してブレークポイントをつけます。
configurationを開いて、EditConfigrations...をクリックします。
+ボタンから、Remoteを追加します
Use module classpathを先程compileOnlyを追加したモジュールで追加します。
次にターミナルなどからデバッグしたいプロジェクトで実行したいモジュールやバリアントにして次のGradleビルドを動かします。(Kotlinなのでkaptになっていますが、Javaの方はそのタスクを指定してあげてください。)
./gradlew --no-daemon clean app:kaptDebugKotlin -Dorg.gradle.debug=true -Dkotlin.daemon.jvm.options="-Xdebug,-Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n"
このGradleビルドは最初の段階で実行されずに止まります。
Android Studio上でRemoteのConfigurationが設定されているのを確認して、デバッグのアイコンを押します。
するとビルドが動き出して、止まってほしいところでデバッガーの実行を止めてデバッグすることができます。
これは自分のプロジェクトである必要はなく、どのプロジェクトでもcompileOnlyを追加すれば確認できます。
またこれはDaggerに限定されず、さまざまな処理に応用できそうです。