[WIP] 初学者がKotlinでAndroidアプリ開発を始めるときの手順

新しい言語を始めるにあたり、話題になってるからKotlinでAndroidアプリ開発でもやってみっか！と思ったとして、Javaを通っていないとやはりそれなりにハードルがあります。
ありました。
　　
なお、環境はWindowsです。

# 環境構築 ～ Hello World

アプリ開発でなく言語の勉強をしたいだけならVisual Studio Codeでも使えばいいですが、
デバッグにエミュレータ等が必要になるため、Android Studioを使います。
（Eclipseを使うパターンもあるようですが、重いと聞いたので避けます）

Android StudioとJava,JDKの導入自体はあちこちに記事があるので問題ないと思います。
Android StudioのInstall時にはCustomを選択して、入れられるもの全部入れておくようにしましょう。
エミュレータの準備で少し引っ掛かりましたが、Android StudioのSettingからAndroid SDKをいろいろinstallしたらなんとかなりました。
エミュレータの準備には以下の記事なんかも参考にしました。
**[[Android] 簡単なHello worldアプリをAndroid Studioで作成](https://akira-watson.com/android/helloworld.html)**

Android Studio 2.3でKotlinを使えるようにするには以下のサイトが参考になります。
**[[Kotlin de Android] 最初はやっぱりHello world !](https://www.usaco-pg.com/2017/04/11/kotlin-android-helloworld/)**

実機で確認したい場合にはこの辺を参考にします


# サンプルアプリ
上記のブログをみれば、おみくじアプリの作り方やその他勉強になることがいろいろと書いてありますが、それ以外にもサンプルとして簡単なアプリのコードが書いてあるサイトを紹介します。

### ストップウォッチ
**[正式採用の「Kotlin」で挑戦！ 初めてのAndroidアプリ開発 〜ストップウォッチを作ってみよう〜](https://employment.en-japan.com/engineerhub/entry/2017/06/23/110000)**

Handlerなるものを使い、時間を測っています。内容はあまり気にしない方向で。
letというキーワードがあり、これはスコープ関数なるものですが、使って覚えないとしようがない感じがします。

### Androidにインストールされたアプリのリストを表示する
**[Kotlinでごく簡単なAndroidアプリを作ってみる](http://qiita.com/sheep_dot_jp/items/39f1866a8691e6807865)**

「Kotlin Android Extensions」を使わずにやってみると以下のようなコードになります。
なおその場合、build.gradleはいじる必要がなく、ConvertだけすればRun可能になります。

*activity_main.xml*

```
...
    <ListView
        android:id="@+id/list1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
...
```

*MainActivity.kt*

```
...
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val listView = findViewById(R.id.list1) as ListView

        listView.adapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
                        packageManager.getInstalledApplications(0).map { it.loadLabel(packageManager).toString() })
        listView.onItemClickListener =
                AdapterView.OnItemClickListener { parent, view, pos, id ->
                    Toast.makeText(this, parent.getItemAtPosition(pos) as String, Toast.LENGTH_SHORT).show()
                }
...
```
simple_list_item_1 は、 もともと用意されている定義済みのレイアウトファイルのID。
mapというのはListを転写する関数のようです。
PackageManagerというのはinstallされたパッケージと関連するアプリケーションの一覧を取得することができるインスタンスのようですが、宣言なしで突然使えるのでビビります。
あとOnItemClickListenerはClick時のコールバック関数を設定していますが、この部分のコードは下記のサイトが参考になります。
**[Kotlinでリスナーやコールバックをスッキリと書く【関数リテラルとSAM変換】](http://qiita.com/RyotaMurohoshi/items/01b370f34a4bf96f5c39)**


# Kotlinの勉強をする
以下のサイトが便利そうです
[Try Kotlin](https://try.kotlinlang.org/)
> Kotlin Koansと呼ばれる全42問の問題を解いていけば、Kotlinの基礎や特徴が学べるようになっています。

# おまけ
Visual StudioマンがAndroidアプリ開発をしたい場合、以下の3パターンがあるようです
* JavaScriptとCordovaを使う
* C#とXamarinを使う
* C++を使う
最初、Visual StudioでKotlinが使えるのかと思って迷走しました……あほや
**[まさか Visual Studio で Android や iPhone のアプリを作れるなんて！](https://blogs.msdn.microsoft.com/visualstudio_jpn/2015/06/22/visual-studio-android-iphone/)**