Scala と Android Studio の組み合わせを触ってみた

世の中は進んでいた。

「scalaでAndroidなんて茨の道っすよ…」みたいな感じでしたけど、なんか知らん間に充実していたようです

いやまあもちろん、あらゆることを試したわけではないのでまだ爆弾踏んでないだけでしょうけど…

しかし実にAndroid触るの2年ぶりじゃねこれ。

## とりあえずやってみよう

### 目標

* [android-sdk-plugin](https://github.com/pfn/android-sdk-plugin)
* [scaloid](https://github.com/pocorall/scaloid)
* [Android Studio (IDE 人によっては不要)](http://developer.android.com/sdk/installing/studio.html)

を使って Scala で 楽しく(?) Androidアプリ作る環境を構築する

### 試した環境

MacBook Air 未だに OSX 10.7

### Android Studio を利用する場合

[まずは入手してくる](http://developer.android.com/sdk/installing/studio.html)

sdkも付随してくるのでbrewで入れなくても良いけど、環境変数にANDROID_HOMEを足しておく

```sh
export ANDROID_HOME="/Applications/Android Studio.app/sdk"
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools #を追加してもよいかも(brewの場合は不要)
```

とか

付属のものが嫌なら Android Studio を起動して

Configure > Project Defaults > Project Structure

で Android SDK locations を直しておくとか

### sbtとか

もしこれからscalaを触るとかならsbt入れましょう、sbt

```sh
brew install sbt
```

Android Studio に付属する android sdk を使いたくなければ

```sh
brew install android-sdk
export ANDROID_HOME=/usr/local/opt/android-sdk
```

とか

あとdebug.keystoreを生成しておくと良いかも

```sh
keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000 -dname "CN=Android Debug,O=Android,C=US"

# 作ったkeyは ~/.android 以下へ
```

### android managerからSDKやらなにやら必要な物をDL

```sh
android
```

で立ち上がるあれから必要なモノをDLしましょう

一杯入れるとそれなりに時間かかりますので、お茶でも飲んで待ちましょう

![あれ](https://qiita-image-store.s3.amazonaws.com/0/1221/0e6746f3-2e51-6a96-3fb1-341558453e05.png)

### buildできることを確認

ひな形ではないが、まずBuild出来るかを https://github.com/pocorall/hello-scaloid-sbt をcloneして試してみます

なお、これ以降はこのcloneしたところでずっと作業してます

```sh
git clone git@github.com:pocorall/hello-scaloid-sbt.git
cd hello-scaloid-sbt
```

ちょっとだけ手を加えます

```scala
// build.sbt
// 適当なところでターゲット対象を追加しておく
platformTarget in Android := "android-18"

// libraryDependencies が参照しているscaloidのバージョンがちょっと古いので現行に
libraryDependencies += "org.scaloid" %% "scaloid" % "3.2.1-8"
```

```scala
// project/plugin.sbt
// android-sdk-plugin を 1.2.xのlatestに
addSbtPlugin("com.hanhuy.sbt" % "android-sdk-plugin" % "1.2.10")

// sbt-ideaも現行に
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")
```

buildしてみましょう

```sh
sbt android:package
```
でapkが生成されるはず

もし既に開発端末やEmulatorが立ち上がっているのなら

```sh
sbt android:run
```

とかで動いたりするはず

### それっぽくする

hello scaloidのサンプルはいかにもAndroidプロジェクトですよ！！
って配置なので変えてみる

いつものsbtプロジェクトっつーかmaven(まじめに使ったこと無いから知らんけど)風というか…に

```sh
before
.
├── AndroidManifest.xml
├── README.markdown
├── build.sbt
├── project
│   ├── build.properties
│   └── plugins.sbt
├── project.properties
├── res
│   └── values
│       └── strings.xml
└── src
    └── scaloid
        └── example
            └── HelloScaloid.scala

```

```sh
after
.
├── README.markdown
├── build.sbt
├── project
│   ├── build.properties
│   └── plugins.sbt
├── project.properties
└── src
    └── main
        ├── AndroidManifest.xml
        ├── res
        │   └── values
        │       └── strings.xml
        └── scala
            └── scaloid
                └── example
                    └── HelloScaloid.scala

```

src下にmainって掘って、resやらManifestやらを放り込む

もともとあったコードとかはmain下にscalaディレクトリ掘ってその中に

gen/bin/targetはとりあえずまた作られるのでサクッと消した

この状態で改めてapkを生成してみる

```sh
sbt android:package
```

先ほどと違ってgen bin が target/android-gen target/android-bin として生成されるので注意

この状態をtemplate的にg8にでもしておくと便利かも？

### Android Studio で プロジェクトを開いてみる

まず Android Studio を立ち上げて scala pluginを入れる

Configure > Plugins > Install JetBrain plugin ... から scalaを探して入れるだけ

![pluginの追加](https://qiita-image-store.s3.amazonaws.com/0/1221/cc2c3335-a1da-a8e0-0dba-ad3f0d1d317f.png)

そして先ほどの hello-scaloid を取り込む！前に…

```sh
sbt gen-idea
```

そして Open Projectから hello-scaloid-sbt ディレクトリを選ぶと…

![Open](https://qiita-image-store.s3.amazonaws.com/0/1221/261b3299-880c-47fd-13f1-3311d9a3359e.png)


やった！立ち上がったね！！となります

が、このままではちょっと足りません。

チョビっと README.markdown の中身を見ると…

```
Two more steps are needed for IDEA:

 * Project Structure -> Project -> in Project SDK section, select proper Android SDK
 * Porject Structure -> Modules -> add Android facet to your project module

We do not recommend to use IDEA's own Android build system, because proguard settings are complicated and not fast.
Use commands from [android-sdk-plugin for sbt](https://github.com/pfn/android-sdk-plugin).
It runs simple and fast.
```

とあります。

とりあえず言われたとおりに修正しましょう

![Project](https://qiita-image-store.s3.amazonaws.com/0/1221/1ef5ce1d-16d7-83a9-e624-f9be4d9478a9.png)

![facet](https://qiita-image-store.s3.amazonaws.com/0/1221/b7ab5b30-e2bd-4bbf-9a09-2e5b10111e6f.png)

Modulesのfacet で、初期で設定されている場所に関しては、直したほうがよいかも

![Modules](https://qiita-image-store.s3.amazonaws.com/0/1221/5f6ed461-851c-202c-15a3-4cb017d9ac33.png)

そして We do not recommend to use IDEA's own Android build system とあるので、Generated sources は切っておいたほうが良いかも？

![Generated sources](https://qiita-image-store.s3.amazonaws.com/0/1221/6564f1fb-5d6c-ca11-2771-620241a70c74.png)

Project Structure -> Modules で android-gen を sourceディレクトリとして認識させたりします

![add sources](https://qiita-image-store.s3.amazonaws.com/0/1221/5385282c-494a-ed71-4b7d-0fdbcd0085d8.png)


ついでに Project Structure -> SDKs にて android sdk のソースも認識させておくと良いかも？

![Android SDK](https://qiita-image-store.s3.amazonaws.com/0/1221/2e7ff47b-b76b-4a72-9514-65ddfd08385a.png)

ここまでやっておけば、HelloScaloidのコードはIDEAで快適に弄れる！

はず…

やばい、Android触る元気出てきたかも

## 参考

https://github.com/pfn/android-sdk-plugin/tree/1.2.10/sbt-test/android-sdk-plugin