LoginSignup
7
1

More than 3 years have passed since last update.

AndroidもJVMで動いてると思ってた。。。

Last updated at Posted at 2019-04-20

AndroidってJVMじゃないのか!

 今までJava開発を行ってきたけど、WebアプリがメインでJava=JVMで動いてるものと思っていた。が、今更ながら違うことが判明したのでメモ。(間違ってたら教えてくださいo^^o)

AndroidアプリはDalvikで動いている→ARTで動いている!

 Javaをコンパイルすると.classというファイルができるというのは常識で、JVMはそれを読み込んで動かしている。
 一方、Androidアプリの場合、コンパイルすると.dexファイル(Dalvik Executable)ができる。
 .dexが.apkファイルに格納され、Android端末のDalvik ARTで実行される。

 ただ、.dexファイルは.classに含まれるJavaバイトコードから生成できるそうなので、これまでと同じようにJava言語で開発できるんだとか。

そういやMulti Dexについて調べてたんだった

 というわけでDEXというのを初めて見たので今さら衝撃を受けていたわけだが、そもそもはMulti Dexって何?ってものを調べてたのを思い出した。

Multi Dexについて

 以上のことを踏まえて、こちらの方の記事を参考にさせてもらった。
 https://qiita.com/KeithYokoma/items/385a94988beb2d7d8043

 DEXに含められる上限メソッド数は65,535です。ん?DEXってクラス単位じゃないのか!?
 Android Studioでコンパイルしてみるか。

まとめ

 開発者としてJVMと~Dalvik~~ ARTの違いを意識する必要はなさそうなので、この辺で調査はやめておくおわり。

~追記~
 2019/4/20 RYO-4947123さんからご指摘いただき、ARTの記述を修正しました。
 2019/4/25 hurumoon_1さんからご指摘いただき、Androidのバージョンを修正しARTのコンパイラについて追記しました。

 Android4.4からART(Android RunTime)が搭載され、Android 5.0でDalvikは廃止されたもよう。
 ARTは高速・効率的な動作とバッテリー寿命の向上を目指して作られた。ARTはDEXファイルを実行する点は変わらないが、コンパイル方式が変更になっている。
 DalvikとARTの違いについても調べてみた。Dalvikはプログラム実行時に中間言語(DEX)をコンパイルするJITコンパイラ(Just In Time)を使用していたが、ARTはインストール時に中間言語をネイティブ形式にコンパイルするAOTコンパイラ(A head Of Time)を採用している。

→ Android7.0からARTにJITコンパイラが追加された。詳しくはこちら↓
 https://developer.android.com/about/versions/nougat/android-7.0.html?hl=ja

 Android開発に関する情報はここに記載されていたのか、、、。他のページも読んでおこう。

7
1
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
7
1