はじめに
AndroidStudioのインストールは完了してKotlinでプログラミングする環境は用意できたけど、ちょっとしたコードをAndroidエミュレータや実機にデプロイして実行するのがちょっと大げさすぎるので、もうちょっと簡単にコマンドラインで実行できないか確認してみた。
Kotlinのコンパイラ
AndroidStudio(version 3.3.2の場合)をインストールしたディレクトリの$ANDROIDSTUDIO_HOME/plugins/Kotlin/kotlinc/bin
にある。
このディレクトリを環境変数PATHに加えればOK。
PS C:\Program Files\Android\Android Studio\plugins\Kotlin\kotlinc\bin> ls
ディレクトリ: C:\Program Files\Android\Android Studio\plugins\Kotlin\kotlinc\bin
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019/02/16 16:49 786 kapt
-a---- 2019/02/16 16:49 789 kapt.bat
-a---- 2019/02/16 16:49 691 kotlin
-a---- 2019/02/16 16:49 731 kotlin-dce-js
-a---- 2019/02/16 16:49 736 kotlin-dce-js.bat
-a---- 2019/02/16 16:49 696 kotlin.bat
-a---- 2019/02/16 16:49 2280 kotlinc
-a---- 2019/02/16 16:49 732 kotlinc-js
-a---- 2019/02/16 16:49 737 kotlinc-js.bat
-a---- 2019/02/16 16:49 667 kotlinc-jvm
-a---- 2019/02/16 16:49 662 kotlinc-jvm.bat
-a---- 2019/02/16 16:49 1899 kotlinc.bat
こんな感じ
確認
PS C:\Users\zaki\src\kotlin> kotlinc -version
info: kotlinc-jvm 1.3.21 (JRE 1.8.0_201-b09)
サンプルコードと実行
mainがない誤り
fun hello() {
print("hello kotlin!")
}
PS C:\Users\zaki\src\kotlin> kotlinc hello.kt
PS C:\Users\zaki\src\kotlin> kotlin HelloKt
error: 'main' method not found in class HelloKt
PS C:\Users\zaki\src\kotlin>
あ、そこはmain()
関数を作らないとダメなのね。
mainを実装
fun main() {
print("hello kotlin!")
}
PS C:\Users\zaki\src\kotlin> kotlinc hello.kt
PS C:\Users\zaki\src\kotlin> kotlin HelloKt
Hello Kotlin!
PS C:\Users\zaki\src\kotlin>
動いた。
(5/11 コメント欄の指摘から追記)
ただ、正しくは、引数の文字列配列のargs
まで指定する。
Kotlin 1.3以降はmain()
の引数は省略可能になっている。
What's New in Kotlin 1.3 - Kotlin Programming Language
引数の処理を行いたい場合は
fun main(args : Array<String>) {
print("Hello " + args[0] + "!!!")
}
引数を渡して実行
PS C:\Users\zaki\src\kotlin> kotlinc hello.kt
PS C:\Users\zaki\src\kotlin> kotlin HelloKt kurerin
Hello kurerin!!!
PS C:\Users\zaki\src\kotlin>
※ 参考(下記は2017年の記事)
第1回 Kotlinを勧める理由:プログラマに優しい現実指向JVM言語 Kotlin入門|gihyo.jp … 技術評論社
作成されるファイル
PS C:\Users\zaki\src\kotlin> ls -Recurse
ディレクトリ: C:\Users\zaki\src\kotlin
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2019/05/09 7:46 META-INF
-a---- 2019/05/09 7:33 63 hello.kt
-a---- 2019/05/09 7:46 960 HelloKt.class
ディレクトリ: C:\Users\zaki\src\kotlin\META-INF
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019/05/09 7:46 29 main.kotlin_module
PS C:\Users\zaki\src\kotlin>
作成されるクラスファイルはソースファイル名ベースだけど、先頭大文字になるのでkotlin helloKt
だと動かないので注意。
jarファイルの作成と実行
PS C:\Users\zaki\src\kotlin> kotlinc hello.kt -include-runtime -d hello.jar
PS C:\Users\zaki\src\kotlin> ls
ディレクトリ: C:\Users\zaki\src\kotlin
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2019/05/09 7:46 META-INF
-a---- 2019/05/09 7:52 1169318 hello.jar
-a---- 2019/05/09 7:33 63 hello.kt
-a---- 2019/05/09 7:46 960 HelloKt.class
PS C:\Users\zaki\src\kotlin>
生成されたjarファイルは、普通のJREで動作する。
(Kotlin環境のないjava
で動作する)
例えばUbuntuのOpenJDKで。
zaki@cheddar% uname -a
Linux cheddar 4.15.0-47-generic #50-Ubuntu SMP Wed Mar 13 10:44:52 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
zaki@cheddar% java -version
openjdk version "10.0.2" 2018-07-17
OpenJDK Runtime Environment (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4)
OpenJDK 64-Bit Server VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4, mixed mode)
zaki@cheddar% java -jar hello.jar
Hello Kotlin!%
zaki@cheddar%
※ WindowsのPSターミナルだと気づかなかったけど、println()
でなくprint()
を使ってるので末尾に改行がない。
AndroidStudio上でmain()
の実行
(5/11 コメント欄の指摘から追記)
実はAndroidアプリのプロジェクトでも、main()
を実装すればCLI実行できる。
任意のディレクトリ(パッケージ)で「Kotlin File/Class」を作成。
ファイル名は適当に。。
できたファイルにmain()
を実装する
package com.example.kotlinblankapp
fun main() {
println("Hello Kotlin on AndroidStudio!")
}
すると、main()
の横に▶アイコンが表示されている。
"Run"を実行
すると、AndroidStudio下部の"Run"ウインドウに、実行結果が表示される。
(おまけ)オンライン実行
コマンドライン実行でなく、「実機でデプロイするのが面倒」を解決したいだけであれば、オンラインでコードを書くという手段も。
-
公式
-
paizaさん