解説記事:Android(携帯機器向けOS)の概要

最終更新日:

Android(携帯機器向けOS)の概要。


概要

Andoroidの構成は以下のようなレイヤー構成になっている(参考: http://developer.android.com/guide/basics/what-is-android.html):
注:現在の最新バージョンである1.5をベースに説明しています。2.0(Donut)については、ここでは説明をしていません。

アプリケーション層 アプリケーション・フレームワーク層を使って、機能別のアプリケーションを実装する。
アプリケーション・フレームワーク層 ウィンドウマネージャ、コンテント・プロバイダ、ビューシステム、リソースマネージャなどが含まれる。 MVCパターンになっている模様。アプリケーション層のベース(フレームワーク)となる。
アンドロイド・ランタイム層 DalvikというJava VMとコア・ライブラリから成る。これにより、アプリケーション層、アプリケーション・フレームワーク層が動作する。
ライブラリ層 OpenGL/ES、SQLite、libc、などのミドルウェア、汎用ライブラリが含まれる。
Linuxカーネル層 Linuxカーネル2.6をベースとしている。ディスプレイドライバ、カメラドライバ、キーパッドドライバ、WiFiドライバ、バインダー(プロセス間通信)ドライバ、などが含まれる。

【参考】
Androidの概要と組込みへの応用 : http://www.linuxcons.jp/modules/seminar/


アライアンス(共同)

Open Handset Alliance (OHA)と呼ばれるアライアンスを組んでいる。NTT/KDDIなどのMobile Operators、MOTOROLA/SAMSUNG/LGのようなHandset Manufactures、Intel/Qualcomm/TIなどの Semiconductor、ebay/GoogleなどのSoftware、WindliverなどのCommercialization、からなる。

携帯電話関連メーカーを中心に広く共同戦線を張っている様子。


ライセンス

これまでの携帯機器の開発環境では、OperaブラウザやMIDIなど、機能ごとにライセンス取得をする必要があったが、 Androidでは1つのライセンスに集約している。これにより法的手続きの簡略化・短縮が実現できる。

独自のJava VMであるDalvik VMを開発したのも、Sunとのライセンス問題を回避するため、 という見方もある(別の見方としては、単に技術的な問題を解決するため、というものがある模様)。 なお、Androidのプレゼンテーションでも「Javaは開発言語のひとつである」と話している。 J2MEと98%くらいの互換はあるのではないか、とも話している。

AndroidはApache Licence 2.0を採用している。 そのため自社開発したアプリケーションのソースコードをOHAに提供する必要がなく、商業化しやすい。 Androidをベースに機能追加・機能削除を行うことができる。 また、組み込み型ハードウェアメーカー各社が自社のハードウェアの仕様を公開する必要が無くなる。 ただし、ハードウェア仕様が公開されないと、より優れた高性能なドライバを開発するのは難しくなってしまう。

参考:

  • GPL:変更した場合、ソースコード開示が必要。LinuxカーネルもGPL。
  • LGPL:ライブラリ用。商用利用に対する制約が緩やか。
  • BSD:ほとんど制約が無い。
  • FPL:LiMo Foundationによるオープンソース方式と商用ライセンス方式を融合したもの。


ソースコードの入手

Android Open Source Projectから入手してください。 Linux用の構成管理ツールGIT(ギット)を使います。 プロジェクト単位でスナップショット(tar.gz)を取得することができます。

プロジェクトには以下のようなものがあります:

  • kernel/common.git: 共通のAndroidのKernel
  • platform/bionic.git: libc、libm、libdl、dynamic linker。カスタイムライブラリ。動的ロードをサポートしている。
  • platform/bootloader/legacy.git: ブートローダー
  • platform/dalvik.git: Dalvik VM
  • platform/frameworks/base.git: フレームワークのクラスやサービス。Java/C/C++で実装されている。 C/C++で実装されたコードはJNI(Java Native Interface)を経由してJavaクラスから呼び出せるようにしている。 たとえば、OpenGLのコードはC/C++で実装されていて、それをJavaから呼び出せるようにしている。

なお、ソースコード全体をビルドするには、10GBくらいのスペースが必要。また、Androidプロジェクトでは、Ubuntu Linux上でビルドの確認をしている。

【参考】

  • Inside the Android Application Framework: YouTubeに投稿されているAndroidの公式動画。フレームワークの説明をしてくれている。 イベント・プロセス・スレッドの概念や、プロセス間通信の方法についての説明がある。
  • The first impression of Android source code:ソースコードツリーを見た印象。初期ターゲットはQualcomm MSM7Kだったが、現在(2008年11月10日)のターゲットはARM926以降。


実機での動作例

【2007年12月21日】
2007年12月21日のCE Linuxフォーラムで、富士通ソフトウェアテクノロジーズにより、i.MX31 (ARM11 532MHz)でAndroidを動作させた。 3次元動画表示のようなアプリケーションが、H/Wアクセラレータなしに思ったよりも軽く動いている印象を受けた。
Androidを実機上で動かした、CE Linuxフォーラムのイベントで実演

【2008年11月20日】
MontaVistaがTexas InstrumentsのOMAP3上で動作するMontaVista版Androidのデモを行った。 MontaVistaはLinux2.6をMobilinuxに置き換え、Android上で動作するように対応した。 Moblinuxは、電源管理、リアルタイム性能、高速起動などの特徴を備えている。
【ET2008】MontaVista社のモバイル向けLinuxが「Android」に対応


評価ボードでの動作例

BeagleBoardというTIのOMAP3530が搭載されている評価ボードがある。
データシートがオープンになっているので、誰でもBSPを作ることができる。
構成は、

  • OMAP 3530 (ARM Cortex-A8 600MHz, C64x DSP + グラフィックアクセラレータ)
  • 128MB SDRAM
  • 256MB NANDフラッシュメモリ (HDDの代わり)
  • USB2.0 OTG
  • USB EHCI Host
  • DVI出力
  • SDカードスロット
  • 10pinシリアルコネクタ(RSC232Cを接続可能)

Androidの動作実績もある。


Androidの導入傾向

【2009年4月1日】HPなどのPCメーカーが、ミニノートPCにAndroidを搭載しようと検討している。 Androidが持つコンピュータ業界、通信業界向けの機能を評価したいと思っている模様。 GoogleはAndroidから利益を得ていない。AndroidはLinuxを基盤としており、無料で提供されている。 PCデスクトップにおけるMicrosoftの勢力を削ぐというメリットがある。

[WSJ] HPがAndroid搭載のミニノートPCを検討


Androidの参考情報

Google I/O 2009 :  2009年5月27日~28日にサンフランシスコで開催された2009カンフェレンスの動画。 Googleの最新状況についての説明。