配属された新人のトレーナーになったので Android のコーチングをしているわけですが
上手く言語化できない部分があったので自分なりに纏めました。
間違い等コメントいただけると嬉しいです🙋
Java
- クラスベースのオブジェクト指向型プログラミング言語
- 処理速度が速い
- プラットフォームに依存しない
- オブジェクト指向
JVM
Java Virtual Machine
- Java アプリケーションを動かすためのソフトウェア
- JVM が各 OS 向けに Java クラスファイルをコンバートする事でアプリケーションが動作する
Java プログラム (.java) をコンパイルすると Java クラスファイル (.class) が出来上がる。
Java クラスファイルを JVM が各 OS 向けにバイトコードに変換してアプリケーションを動かしている。
Java の特徴である プラットフォームに依存しない
とはこのため。
デメリットとしては、動作環境のセットアップのハードルが他より少し高い。
JRE
Java Runtime Environment
- Java アプリケーションの実行環境
- JVM + 対応した API
OS に JRE をインストールすることで Java アプリケーションを実行する事ができる。
ただしコンパイラ等がないので開発はできない。
現在は JRE 単独でインストールできず、JDK をインストールする必要がある。
JDK
Java Development Kit
- Java でプログラミングするための開発ツール
- JRE + コンパイラやデバッガーのプログラム等
Android の実行環境
- Android アプリは .apk ファイル に含まれている .dex ファイルで動作する
Android アプリはコンパイル時に .class ファイル内のバイトコードから .dex ファイルを生成する。
ART (旧 Dalvik) は生成された .dex ファイルを読み込んでアプリを動作させる。
そのため Java 言語で開発が可能だし、Android は JVM で動いているわけではない。
ART と Dalvik
- ART と Dalvik ではコンパイル方式が違う
Runtime | Compiler | いつコンパイルされるか |
---|---|---|
ART | AOT (A Head Of Time) | インストール時 |
Dalvik | JIT (Just In Time) | プログラム実行時 |
AOT だとプログラム実行時のオーバーヘッドがなくなることで、動作の高速化や省電力化に繋がる。
Android 4.4 から ART にリプレイスされていった。
Kotlin
- JVM 上で動作するオブジェクト指向言語
- JDK が必要
- Java <-> Kotlin の相互運用が可能
- 実用的で Java より書きやすいけど JVM で動くので OS に依存しない 👏😄
- Android 用の extension が提供されている
GitHub - JetBrains/kotlin: The Kotlin Programming Language
kotlin-stdlib
- Kotlin を使うためのコアライブラリ
-
stdlib-jdk
は extension
-
kotlin-stdlib-jre の Deprecate
- Java 9 モジュールシステムをサポートするために stdlib-jdk に移行された
- Kotlin 1.3 から使用も禁止された
What's New in Kotlin 1.2 - Kotlin Programming Language
The Kotlin standard library is now fully compatible with the Java 9 module system, which forbids split packages (multiple jar files declaring classes in the same package). In order to support that, new artifacts kotlin-stdlib-jdk7 and kotlin-stdlib-jdk8 are introduced, which replace the old kotlin-stdlib-jre7 and kotlin-stdlib-jre8.
以下の様なライブラリのユースケースが解説されていました。
Library | 使用パターン |
---|---|
stdlib | minSdkVersion < 21 |
stdlib-jdk7 | minSdkVersion >= 21 |
stdlib-jdk8 | minSdkVersion >= 24 |
参考
Java SEとJDK、JRE、JVMの違いに関する解説 | Java入門