[ことクロ7]　2015年末時点のkotlin1.0beta + AndroidStudio1.5環境構築

"Kotlinでスマートフォン・クロスプラットフォーム開発の試行錯誤を記録するメモ"、勝手に略して、"ことクロ"シリーズ　その7。

iOS向けのJVMクロスプラットフォーム環境のRoboVMが試してみた時点で不安定で、かつ、クローズドソースになるという[がっかりなニュース](http://www.infoq.com/news/2015/10/robovm)も入ってきて、Kotlinでクロスプラットフォーム開発に取り組む意欲が下がっていたのだが、**[新たなiOS向けのJVMクロスプラットフォーム環境Multi-OS Engine](https://software.intel.com/en-us/multi-os-engine)**(インテル謹製)のお試しを開始したことで、やる気復活！

今回は、AndroidStudioをkotlin向けに2015年11月時点での基本的な設定を行い、hello kotlinするまで。
ゴールはこんな感じ(kotlin入れて、gradle書き換えて...フォントをみやすくして、日本語化する):
![goal.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/89fb1400-91e2-e3a0-09c3-7c48a2d454b7.png)

[前提] Android Studioをインストール済(今回の実行環境はwindows 10)
[作業感想]　数ヶ月前のkotlin+AndroidStudio情報は概ねそのまま使える(ハマりどころなし)。

#1) AndroidStudioをkotlin向けに設定
こちらに従うだけで、Kotlon1.0-beta向けの設定を問題なく行える。
http://dev.classmethod.jp/smartphone/android-kotlin-introduction-01/

## ビルドは、"Ctrl+F9"で
ちょっとだけ、自分向けにわかりやすくしてみたClassでビルドした:

```MainActivity.kt
class MainActivity : AppCompatActivity() {

    val msg="ことりんが、actionしてみますこと。"
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val toolbar = findViewById(R.id.toolbar) as Toolbar
        setSupportActionBar(toolbar)

        val fab = findViewById(R.id.fab) as FloatingActionButton
        fab.setOnClickListener { view ->
            Snackbar.make(view, msg, Snackbar.LENGTH_LONG).setAction("Action", null).show()
        }
    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(R.menu.menu_main, menu)         // Inflate the menu;
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        val id = item.itemId

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true
        }
        return super.onOptionsItemSelected(item)
    }
}
```

## 個人的な注目点は、クリックイベントのKotlin的な記述:
```scala
val fab = findViewById(R.id.fab) as FloatingActionButton
        fab.setOnClickListener { view ->
            Snackbar.make(view, msg, Snackbar.LENGTH_LONG).setAction("Action", null).show()
        }
```

- FloatingActionButton型へのダウンキャストの書き方が、Swiftっぽい。*＃注、近時、[Swift互換言語でAndroidしてみている](http://qiita.com/kmry2045/items/f5a3a245a79b84f77f6e)*
- OnClickListenerの処理のアロー式でのクロージャ記法(view ->)と、メソッドチェーン記法Snackbar.make(...).show()の組み合わせがしっくりくる。

#2) AndroidStudioを使いやすく。
## フォントとフォントサイズの変更 
AndroidStudioの設定で、ここが唯一ちょっと迷ったところ。[こちら](http://j.mp/1jijTj3)に従い、「Save As」を使って、設定開始。

##日本語化
以下に従うのみ。ヒントも日本語化してくれる。
http://www.hiskip.com/pg-notes/ide/androidstudio/584.html

#3)その他
##genymotionのインストール
androidエミュレータを速く実行したい場合に導入。以下などを参考:
http://qiita.com/Sam/items/8d551f575b617fa0be7e
http://androidlover.net/genymotion

*注、既にDockert等を使っていてVirtualBoxが入っている場合は、VirtualBoxなし版をインストールすること。*

AndroidバージョンとAPIバージョンを見ながら、genymotion仮想マシンを導入するのが基本:
![geny.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/196e5b19-fdea-0ed9-62ee-c1be440006dc.png)



## iOS開発向けに、Multi-OS Engineを導入*(釣り)*
genymotionのインストール＆仮想マシン起動までは、それなりに時間がかかるので、さみしいひとは、[こちら](http://qiita.com/kmry2045/items/4308fb7c812540e4cb05)に煽られて、KotlinでiOS向け開発を行うためのクロスプラットフォーム環境を整えておこう。

#4)genymotionでの実行
## Android Studioにgenymotionプラグインを導入:

![geny2.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/44e3b9f6-cfd6-71e7-8c92-45bead661d72.png)

Android Studioの再起動後に、genymotionでの実行ができるようになる。
注意点は、genymotion環境のAPIバージョンと、build.gradleが管理するbuild.gradleのバージョンとの整合性を取る必要がある。
今回のもともとのAPIバージョンは23:

```groovy:build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.example.ktl.mykotlin"
        minSdkVersion 23
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}
(以下、略)
```

先ほど入れたgenymotion仮想マシンのAPIのバージョンは22
この環境で実行したい場合、例えば、以下などを参考にbuild.gradleを書き換えていく。
http://qiita.com/tomoima525/items/870ac52ce3256e785c4c

今回はお試しなのでAPI23が動くGememotion環境のプレビュー版を入れてしまうこととした:
![geny3.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/81598208-8729-151b-cbed-14c30a3e9ef8.png)

##実行画面
![mykot.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/22b560e7-f946-a7ec-d35c-cc044e6b5daa.png)
ちゃんと、onClickListenerの処理が走っている。

#次回以降
少しちゃんとしたandroidアプリをkotlinで書く。
そして、それにもとづいて、iOSアプリも書いてみる。