●KernelDebugger

 このドライバは,デバッガを使ったデバッグ環境をアプリケーション開発者に提供する。

 携帯端末で動作するAndroidでは通常,開発環境と実行環境が異なる。PCでアプリケーションを開発し,最終的には携帯端末の実機上でテストする。その際,何らかの不具合が発生した場合,発生した時点の携帯端末内部の状態を調べる必要がある。そのための手段がなければ,プログラムを探るしか方法が無く,開発者は非常に不便を強いられる。

 KernelDebuggerは,“リモート・デバッグ”に似た仕組みを開発者に提供する。つまり,テストの対象となる携帯端末内部の状態を,携帯端末に接続した外部(リモート)の端末から調べることができる。

 例えば,開発者は,携帯端末上でアプリケーションをテストする際に,開発環境上で設定したブレークポイント(プログラムを停止するポイント)で,端末上のアプリケーションを中断し,中断した時点での各変数の値を参照できる。高価なハードウエアを必要としないデバッグ手段は,開発者にとっては大きなメリットになる。

●Binder

 「Binder」はプロセス間で通信する機能を提供するドライバだ(図3)。

[画像のクリックで拡大表示]
 Binderの役割を理解するために,まずAndroidアプリケーションの構造を説明しよう。Androidのアプリケーションは大きく分ければ,「アクティビティ」と「サービス」という2つの要素で構成されている。通常,一つのアプリケーションには,アクティビティとサービスの両方,あるいは一方だけが含まれている。

 アクティビティは,一つの画面を持つプログラムだ。画面が表示されている間は実行中となるが,ユーザーが終了したり,電話の着信などの割り込みが発生して画面が消えたりすると,待機状態になる(詳しくは後述)。

 一方,サービスは,画面を持たず常にバックグラウンド・プロセスとして動作するプログラムだ。システムに常駐し,他のアプリケーションからの要求に応じて処理を実行する“デーモン”プログラムに近い。

 サービスはそれ自身が画面を持たないため,ユーザーがパラメータを設定する際は,画面を持つアクティビティを介す。しかし,サービスとアクティビティは,それぞれ動作するプロセスが異なる場合もあるので,プロセス間通信の仕組みが必要となる。例えば,電波状態を表示するアプリケーションの設定画面(アクティビティ)と実行処理のプログラム(サービス)とでプロセス間通信を利用している(詳しくは後述)。

 そのプロセス間通信を実現するのが,このBinderドライバである。実際の通信は,カーネルより上のフレームワーク層が制御する。アプリケーション開発者は,AIDL(AndroidInterfaceDefinitionLanguage)と呼ぶ記述言語で入出力のインタフェースを定義するだけでよく,ドライバを直接意識しないで済む。