Posted at

AndroidStudioでgradleの実行時にDebuggerを接続する方法

More than 3 years have passed since last update.


はじめに

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 を選びます。

Run_と_Menubar.png


左上の+ボタンから Remote を選択

Run_Debug_Configurations.png


適当に名前を付けてOKを押す

Exportした時の環境変数文字列の address=5005 と設定中の address=5005 が同じであることは必要なのだと思います。

Run_Debug_Configurations.png

デフォルトでこうなっていると思うので、何もいじらなくてOKです。


コマンドラインからGradle起動

コマンドラインからGradleを起動すると、 以下のようになって実行がストップします。

% ./gradlew myTask                                                                                                                  

Listening for transport dt_socket at address: 5005

デバッガをアタッチするまで待つようです。


Android StduioからRemote接続Debug

GenerateEnvironmentConfigPlugin_groovy_-__buildSrc__-_app-android-multiregion-build_-____Documents_workspace_UQ_app-android-multiregion-build_.png

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'
}


さいごに

イマイチ細かいプロパティのドキュメントとか見つからない(ぐぐり力が低いだけかな・・・)ので、これでだいぶ捗りそうです。