LoginSignup
6
4

More than 3 years have passed since last update.

AndroidStudio付属のKotlin実行環境でコマンドライン実行してみた

Last updated at Posted at 2019-05-08

はじめに

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

image.png

こんな感じ

image.png

確認

PS C:\Users\zaki\src\kotlin> kotlinc -version
info: kotlinc-jvm 1.3.21 (JRE 1.8.0_201-b09)

サンプルコードと実行

mainがない誤り

hello.kt(誤)
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を実装

hello.kt
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

引数の処理を行いたい場合は

hello.kt
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」を作成。

image.png

ファイル名は適当に。。

image.png

できたファイルにmain()を実装する

sample.kt
package com.example.kotlinblankapp

fun main() {
    println("Hello Kotlin on AndroidStudio!")
}

すると、main()の横に▶アイコンが表示されている。

image.png

"Run"を実行

image.png

すると、AndroidStudio下部の"Run"ウインドウに、実行結果が表示される。

image.png

(おまけ)オンライン実行

コマンドライン実行でなく、「実機でデプロイするのが面倒」を解決したいだけであれば、オンラインでコードを書くという手段も。


6
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4