Androidはそのハードウェアアブストラクションレイヤー用の基盤としてLinux2.6を使用し、ドライバ、メモリマネジメント、ネットワーク等のサポートを提供する。このレイヤーの上にはOpenGL、フォント、メディアコーデック、SQL Lite、またブラウザ表示用のWebKitのような機能のために、C/C++で記述されたネイティブライブラリ一式が備わっている。興味深い詳細は、そのスタック上の次なるレイヤーとDalvik VMの中にあるのである。
Java SEかもしくはJava MEのフルバージョンを提供する代わりに、Googleは2方向に分岐している。一つ目はコアJavaパッケージの限定サブセットが提供されていることである(source)。一般的に使用されているjava.nio、java.lang、java utilのようなパッケージが含まれている。Apache HttpClientはAndroid特定ライブラリに加えてまとめられたいくつかのオープンソースプロジェクト中の一つである。しかしながらJMEクラスと従来のJava UI関連のパッケージであるSwingとAWTが顕著に欠如している。このルートを辿ることによって、AndoroidはJavaをその開発言語とするがフルのJDKをサポートしないもう一つのグーグルプロジェクトGWT(source)と同じ轍を踏んでいる。
AndroidはJavaの変則型の言語で記述されたアプリケーションを稼働するのにカスタムVMを使用する。
全てのAndroidアプリケーションは、自身のDalvikバーチャルマシーンのインスタンスを用いてそれ自体のプロセス内で動作する。Dalvikはデバイスが複数のVMを効率的に動作できるように記述されている。Dalvik VMは最小限のmemory footprintに最適化されたDalvik Executable(.dex)フォーマット内でファイルを実行する。またVMはレジスタベースで、含有された”dx”ツールによって.dexフォー マットに変換されたJavaランゲージコンパイラによってコンパイルされたクラスを稼働させる。Dalvik VMはスレディングや低レベルメモリマネジメントのような根本的な機能に関してはLinux kernelに依存している。
Dalvikは制限のあるバッテリーとCPUコンディションの下で動作させるという点において、モバイル装置に適している。Apache V.P.、Java Community Process Geir Magnussonは、DalvikがApache Harmonyクラスリブを使用することを記載している(source)。またAndroid SDKはApache Software Licenseの下でライセンスされている。GPLv2を使用するのに比較してこの決断はArs Technicaによって徹底的に保護されている(source)。
上記の図はAndroidのスタックである。ブルーのアイテムはJavaのAndroidサブセットで記述されている。これにはリソースマネジメントや ウィンドウなのどのアプリケーションフレームワークサービスが含まれている。中核のAndroid Phone、Browser、Contactアプリケーションもまた同様にJavaで記載されていてDalvik VMの下で動作する。
Android SDKは現在Windows XPかもしくはそれ以上、またOS X 10.4.8+とLinuxをサポートしている(source)。JDK 5か6もまた必要である。一方EclipseはEclipse 3.2+プラグインを必要とせず、デバッグツールとエミュレータと共に提供されている。
デベロッパたちから得られた早期のSDKに関するレビューにはいろいろな意見が盛り込まれていた。Java Liteの使用は厄介であるという意見もあった(source)。
・・・私の意見としてはこれには少しがっかりさせられました。現在のJavaのプロファイルに同調していないのは残念なデザインチョイスです。またそれによってAndroidはそれ以外のものと互換性がなくなってしまうのです。私の見解としてはそれは不必要なことだと思うのです。それに加えてAndroidはフルJava、J2MEと他のいろいろなオープンソースプロジェクトからの機能をたくさん重複しているように思えます。それぞれのケー スにその理由がある事は確実なのですが、全体的な結果としてはいろいろな車輪の再発明のように見えるのです。Android APIが既存のものより大幅に速く、より柔軟で実用的 等々であるというのは疑わしいです。
Ryan Block氏は概してJavaを問うている。
私はJavaをそのアプリケーションレイヤ環境として使用したAndroidに落胆した人は私だけではないでしょう。Androidは平均的なJava 実行環境よりもはるかに最適化されたフレームワークであり、中核のOSにネイティブでコードされたものと同様にモバイルマルチタスクJava VMアプリケーション環境は絶対に稼働しないのです。これは スワイプ、タップ、タッチ等の動作がiPhone/iPodタッチで設定された基準より粗雑で、ビジュアル的に満足度のより低い体験を意味するのです。
Ed Burnette氏(source)はレイヤーの中のスタックに価値を見出している。
これはデベロッパたちにとって良い知らせであります。なぜなら例えばARM用に1バージョン、×86用にもう一つのバージョンといったように異なるアーキテクチャごとにプログラムを再コンパイルする必要がなくなるからです。またそれは電話の中に導入可能なハードウェアに多大な柔軟性をもたらし、生産者側にも利点をもたらすのです。既存のアプリケーションを壊す必要なく、新たなタイプのプロセッサを使うことができるのです。原文はこちらです:http://www.infoq.com/news/2007/11/android-java