はじめに
Gradleをちょいちょいカスタマイズしたり、Objectにどういうプロパティがあるかを調べるのに、
やはりDebuggerが使えると便利なときがあります。
調べてみると簡単にできるのでメモしておきます。
今回の方法は、
「コマンドラインでgradleを実行」「AndroidStudioからDebuggerを接続」という形です。
Version
- MacOS(Yosemite) 10.10.3
- AndroiStudio 1.1.0
- JVM: 1.7.0
- Groovy 2.3.6
- gradle 2.2.1
方法
単に下記URLの方法に従えばOKでした。
http://georgik.sinusgear.com/2014/06/23/how-to-debug-gradle-script/
が、改めて書きます。
コマンドライン側に環境変数を設定する
GRADLE_OPTS
環境変数を以下のようにセットします。
export GRADLE_OPTS='-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005'
Android Studioの Run/Debug Configurations で remote debugの設定
Run
メニューから Edit Configurations
を選びます。
左上の+ボタンから Remote
を選択
適当に名前を付けてOKを押す
Exportした時の環境変数文字列の address=5005
と設定中の address=5005
が同じであることは必要なのだと思います。
デフォルトでこうなっていると思うので、何もいじらなくてOKです。
コマンドラインからGradle起動
コマンドラインからGradleを起動すると、 以下のようになって実行がストップします。
% ./gradlew myTask
Listening for transport dt_socket at address: 5005
デバッガをアタッチするまで待つようです。
Android StduioからRemote接続Debug
Debugアイコンをクリックすると、Debuggerがアタッチされて、Gradleの実行が再開されます。
Breakポイントなど設置してあれば、そこで止まります。
BreakPointがきくところきかないところ
Gradleスクリプトの中の Closure的なブロックではあまり止まらないっぽいです。
def appVersionCode = 1 # ←ここはBreakPointがきく
def appVersionName = "1.0.0"
dependencies {
compile fileTree(dir: 'libs', include: '*.jar') # ←ここはBreakPointきかない
androidTestCompile 'junit:junit:4.11'
androidTestCompile 'org.robolectric:robolectric:2.4'
androidTestCompile 'org.mockito:mockito-all:1.9.5@jar'
}
さいごに
イマイチ細かいプロパティのドキュメントとか見つからない(ぐぐり力が低いだけかな・・・)ので、これでだいぶ捗りそうです。