6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Android の実行環境

Posted at

配属された新人のトレーナーになったので Android のコーチングをしているわけですが
上手く言語化できない部分があったので自分なりに纏めました。

間違い等コメントいただけると嬉しいです🙋

Java

  • クラスベースのオブジェクト指向型プログラミング言語
    • 処理速度が速い
    • プラットフォームに依存しない
    • オブジェクト指向

JVM

Java Virtual Machine

  • Java アプリケーションを動かすためのソフトウェア
    • JVM が各 OS 向けに Java クラスファイルをコンバートする事でアプリケーションが動作する

Java プログラム (.java) をコンパイルすると Java クラスファイル (.class) が出来上がる。
Java クラスファイルを JVM が各 OS 向けにバイトコードに変換してアプリケーションを動かしている。

jvm_flow.png

Java の特徴である プラットフォームに依存しない とはこのため。
デメリットとしては、動作環境のセットアップのハードルが他より少し高い。

JRE

Java Runtime Environment

  • Java アプリケーションの実行環境
    • JVM + 対応した API

OS に JRE をインストールすることで Java アプリケーションを実行する事ができる。
ただしコンパイラ等がないので開発はできない。
現在は JRE 単独でインストールできず、JDK をインストールする必要がある。

JDK

Java Development Kit

  • Java でプログラミングするための開発ツール
    • JRE + コンパイラやデバッガーのプログラム等
jvm.png

Android の実行環境

  • Android アプリは .apk ファイル に含まれている .dex ファイルで動作する

Android アプリはコンパイル時に .class ファイル内のバイトコードから .dex ファイルを生成する。
ART (旧 Dalvik) は生成された .dex ファイルを読み込んでアプリを動作させる。
そのため Java 言語で開発が可能だし、Android は JVM で動いているわけではない

art_flow.png

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

Androidの開発でkotlin-stdlib, kotlin-stdlib-jre7, kotlin-stdlib-jdk7, kotlin-stdlib-jdk8どれ使えばいいの問題 - Qiita

参考

Java SEとJDK、JRE、JVMの違いに関する解説 | Java入門

Android ランタイム(ART)と Dalvik  |  Android オープンソース プロジェクト

VMの歩む道。 Dalvik、ART、そしてJava VM

6
5
1

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
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?