Intellij IDEAからScalaでHello Androidをデバッグする

この記事は[ScalaでHello Android最速理論](http://qiita.com/Setz/items/47c0019e5a01002284d7)の続きです。
前記事でScalaでHello Androidできる環境を作った後、Intellij Ideaでデバッグできるようになるまでを目標とします。

#環境

* Intellij IDEA Ultimate 2016.3
* SBTプラグイン
* Scalaプラグイン

UltimateじゃなくてもCommunityでも問題ないはず・・・です。
Android Studioはsbtの対応がイマイチのようなのでちょっと厳しそうです。

#手順

以下、前記事で作成されたプロジェクト名を「Test」として説明しています。

#IDEAプロジェクトを作成
IDEAを起動してメニューからFile -> Openを選択し、前の記事で作成したプロジェクトのフォルダを選択します。対象フォルダにはSBTのアイコンが表示されています。

<img width="313" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/144437/d4f5b8ca-bd5b-5996-170c-ba8d9d00117c.png">

選択すると下記のようなダイアログが表示されます。

<img width="451" alt="2.png" src="https://qiita-image-store.s3.amazonaws.com/0/144437/a21846b5-0e8b-84a7-6653-ca242b4eda46.png">

問題はProject SDKの部分。
AndroidだからAndroid API 25 PlatformかJDK1.7でいいのかと思いきや、これらを選択して先に進もうとするとビルドに失敗します。
ここではSBTが使用するSDKを選択するので、JDK1.8が正解のようです。

選択すると下記のダイアログが表示されます。
<img width="515" alt="3.png" src="https://qiita-image-store.s3.amazonaws.com/0/144437/0e497b06-3817-19ff-3238-d59d6442640a.png">
com.android～で始まるライブラリをビルドしたりすることはないと思うので、一通りチェックを外しましょう。チェックを外す際に「testモジュールがこのモジュールに依存してるから、そっちもdisableにするかい？」的なメッセージが表示されますが、もちろんこれはキャンセルで。
OKすると、sbtからIDEAプロジェクトへの変換が行われます。

##デバッグ設定

メニューのRun -> Edit Configurationsからデバッグ設定を行います。
＋アイコンをクリックして「Android App」を選択し、新規設定を作成します。

<img width="540" alt="4.png" src="https://qiita-image-store.s3.amazonaws.com/0/144437/7daca11d-7faf-25d2-d1dc-2c5bbe17f9f9.png">

Moduleは一つだけ存在している「test」を選択。
Deployment Target Optionsはお好みで指定してください。
で、Before launchは既に存在するGradle-aware Makeを削除。
＋アイコンをクリックして「SBT」を選択すると、下記のダイアログが表示されます。

<img width="242" alt="5.png" src="https://qiita-image-store.s3.amazonaws.com/0/144437/c1627236-5374-d10e-a924-05fb6cb5929c.png">

ドロップダウンボックスになっていますが、ここはボックス内に直接入力で「android:package」を入力し、OKします。

##AndroidManifest.xmlに設定追加

これでデバッグできるぜヒャッハー！とRun -> Debugを実行するとエラーで止められます。
debuggable属性も無しにデバッグとな？というような内容なので、プロジェクト配下のsrc/main/AndroidManifest.xmlを開き、applicationタグにandroid:debuggable="true"属性を追加します。

```xml:AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.gmail.lsetzl.test">
    <application android:debuggable="true"
                 android:label="@string/app_name"
                 android:icon="@drawable/scala_android">
        <activity android:name="MainActivity"
                  android:theme="@style/Theme.AppCompat"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
```

修正後、再びRun -> Debugを実行すれば今度はOK・・・と思いきや、先ほどと同じエラーメッセージに阻まれます。

##デバッグ方法

このプロジェクトが実行時に参照しているAndroidManifest.xmlはtarget/android/interediates/manifest配下のもののようです。
sbt-androidがbuild.sbtの内容とsrc/main/AndroidManifest.xmlの内容をマージして前述のtarget～配下にAndroidManifest.xmlを生成してくれるのですが、どうやらこの処理はtarget/android/interediates/manifest/AndroidManifet.xmlが存在しない場合のみ行われる模様。sbtコマンド的にはclean -> reload -> android:runとやれば良いわけですが、IDEAの実行時設定でこれらのコマンドを発行してもどうもうまくいかず。
結局、解決策として自分が考えられる方法は以下の3案です。

* デバッグ時は別途コンソールからsbtを起動し、clean -> reload -> android:debugを実行、IDEAからデバッガプロセスにアタッチする（自分の環境では上手くいきませんでした）
* AndroidManifest.xml更新時、build.sbtを修正して保存 -> 修正箇所を戻して再度保存 -> IDEAがbuild.sbt更新されたけどどうする？と聞いてくるので「Refresh project」を選択
* target/android/interediates/manifest/AndroidManifest.xmlを任意の箇所にコピーし、メニューのFile -> Project Structureを開き、Facets -> Structure -> Manifest fileに先程のパスを設定する

いずれも解決策としては微妙だと思います。どなたか上手い解決策がありましたら、ご教示ください。

一応、上記の手順でブレークポイント等を使用したデバッグが行えるようになります。