View on GitHub
mixi-inc/AndroidTraining
Android-OSについて
この章では、Android OSへの理解を深めます。

目次

Android OSとは

Google が開発している、携帯情報端末向けのプラットフォームです。
オープンソースで開発されており、GitHub:android にプロジェクトが公開されています。

アーキテクチャ

Android プラットフォームのアーキテクチャは下記のようになっています。

Android Architecture

Linux をベースとした OS(Kernel) の上に、標準ライブラリや Android ランタイムなどのミドルウェアが乗っています。
さらに、ミドルウェアを抽象化したレイヤとして、アプリケーションフレームワーク( Android Framework )のレイヤが提供されています。
私達が普段開発するアプリケーションは、この図の最上位のレイヤに位置づけられ、アプリケーションフレームワークを使いながらアプリケーションを開発していくことになります。

DalvikVMとART(Android Runtime)

Android 4.4まで、Android アプリは、Android ランタイムの DalvikVM の上で動作するようになっていました。
開発に使用する言語は Java が公式にサポートされています。この他、Scala などの Java プラットフォーム上で動作する言語も使用出来ます。

DalvikVM は、メモリ搭載量の少ない携帯端末向けに最適化された(主にメモリ使用量を減らした) JavaVM と云われることもありますが、 公式の JavaVM(SunVM)と互換性がないものが含まれていたり、DalvikVMの実行するバイトコードが JavaVM のそれと異なるものになっていたりします。

また、Android 5以降はDalvikはARTに置き換えられました。大きな変更点はJIT(実行時コンパイル)からAOTコンパイル(ahead of time)への移行、ガベージコレクタの改善、デバッグ効率の改善などが挙げられます。
これらの変更により、実行速度や開発効率の改善を実現しています。
ただしAOTコンパイルについては、アプリのインストールやアップデートを一度に大量に行う場合、コンパイル時間が長くなってしまうことが問題視され、Android Nでは初回起動時にコンパイルするようになる予定です。

レジスタベース

SunVM はスタックマシンであるのに対し、ARTやDalvikVM はレジスタマシンです。

dex

通常の Java では、javacコマンドでソースコードをコンパイルすると、クラスファイルが生成されます。
このクラスファイルを、SunVM が解釈することでプログラムを実行しています。

Android では、VM の特性が異なるため、もう一段階処理を施し、クラスファイルを ARTやDalvikVM で動作可能なようにします。
この結果生成されるファイルが、dex ファイルです。

通常、これらの差異をプログラマが意識することはありませんが、一部 Java で一般的なイディオムと異なるものが存在します。

バージョン

バージョン毎、提供される API にも差異があります。
基本的には、新しいほどより多くの API を利用することができます。一方で、古いバージョンでバグがあったり、別の手段が提供されたりしたために推奨されなくなった API も存在します。

アプリを開発する上では、OS のバージョンごとの API の差異を考慮し、互換性を保つことが重要になります。 利用できるAPI群はAPI Levelによって一意に識別することが可能です。

また、iOS と異なり、メーカ毎に様々なスペックを持つ機種が開発されているため、機種ごとの互換性も考慮する必要があります。
フレームワークとして、この互換性を保つための仕組みが用意されていますので、この仕組を用いてコードを記述するようにします。

バージョン番号 API Level コードネーム
1.5 3 Cupcake
1.6 4 Donut
2.0 5 Eclair
2.1 7 Eclair MR1
2.2 8 Froyo
2.3 9 Gingerbread
3.0 11 Honeycomb
3.1 12 Honeycomb MR1
3.2 13 Honeycomb MR2
4.0 14 Ice Cream Sandwich
4.1 16 Jelly Bean
4.2 17 Jelly Bean MR1
4.3 18 Jelly Bean MR2
4.4 19 Kitkat
4.4W 20 Kitkat Watch(KitKat for Wearables Only)
5.0 21 Lollipop
5.1 22 Lollipop MR1
6.0 23 Marshmallow
7.0 24 Nougat
7.1 25 Nougat MR1
8.0 26 Oreo
8.1 27 Oreo MR1

(一部のマイナーバージョンの違いについては省略しています)

開発環境

現在、AndroidStudio が標準の IDE として開発・提供されています。この他、Eclipse や、IntelliJ IDEA など他のIDEでも開発することができます。
Eclipse で開発環境を準備する場合は、Android SDK と ADT Plugin が別途必要です。

Google が公式に配布している開発環境の ADT Bundle には、Android SDK と、ADT Plugin がインストール済みの Eclipse が入っています。

Android SDK は、最新の Android のもののみがセットアップされているため、この他の OS バージョンを扱う場合は、別途インストールが必要です。

これらの環境は、開発に使う PC の OS を問わず整えることができます。