#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開発に関する情報はここに記載されていたのか、、、。他のページも読んでおこう。