Android アーキテクチャ

Android システム アーキテクチャには、以下のコンポーネントが含まれています。

図 1 Android システム アーキテクチャ
  • アプリ フレームワーク。アプリ フレームワークを頻繁に利用するのはアプリのデベロッパーです。ハードウェア デベロッパーの場合、デベロッパー API に注意する必要があります。デベロッパー API の多くは、基礎となる HAL インターフェースに直接マッピングされ、ドライバの実装に役立つ情報を提供します。
  • バインダ IPC。バインダのプロセス間通信(IPC)メカニズムにより、アプリ フレームワークはプロセスの境界を越えて Android システム サービスのコードを呼び出すことができます。これにより、高レベルのフレームワーク API が Android システム サービスと対話できます。アプリケーションのフレームワーク レベルでは、このコミュニケーションはデベロッパーには表示されず、「うまく動いている」ように見えます。
  • システム サービス。システム サービスは、Window Manager、Search Service、Notification Manager などのモジュール化されフォーカスされたコンポーネントです。 アプリケーション フレームワーク API によって公開される機能では、システム サービスと通信して基盤となるハードウェアにアクセスします。Android には、system(Window Manager や Notification Manager など)と media(再生メディアと記録メディアに関連するサービス)の 2 つのグループのサービスがあります。
  • ハードウェア アブストラクション レイヤ(HAL)。HAL は、ハードウェア ベンダーが実装する標準インターフェースを定義し、Android が下位レベルのドライバの実装に依存しないようにします。HAL を使用すると、上位レベルのシステムに影響したり変更を加えたりすることなく、機能を実装できます。HAL の実装はモジュールにパッケージ化され、適切なタイミングで Android システムによって読み込まれます。詳細は、ハードウェア アブストラクション レイヤ(HAL) をご覧ください。
  • Linux カーネル。デバイス ドライバの開発は、一般的な Linux デバイス ドライバの開発に似ています。Android は、積極的にメモリ保存を行うメモリ管理システムである Low Memory Killer、PowerManager システム サービスの 1 つである wake lock、Binder IPC ドライバなど、モバイル埋め込みプラットフォーム用に重要となる特別な機能を追加して Linux カーネルを使用しています。これらの追加は、主にシステムの機能に関するものであり、ドライバの開発には影響しません。バインダ ドライバなどの必要な機能をサポートしていれば、カーネルの任意のバージョンを使用できます。ただし、最新バージョンの Android カーネルを使用することをおすすめします。詳しくはカーネルのビルドをご覧ください。

HAL インターフェース定義言語(HIDL)

Android 8.0 では、Treble と呼ばれるプロジェクトで Android OS フレームワークを再設計し、メーカーが Android の新しいバージョンにデバイスを簡単かつ迅速に、低コストで移行できるようにしました。この新しいアーキテクチャでは、HAL インターフェース定義言語(HIDL、「ハイド - エル」と発音)は、HAL とユーザー間のインターフェースを指定することで、HAL を再構築せずに Android フレームワークの置き換ができます。

HIDL は、新しいベンダー インターフェースを介して、ベンダーの実装(シリコン メーカーが作成したデバイス固有の下位レベルのソフトウェア)と Android OS のフレームワークを区分します。ベンダーまたは SOC メーカーは HAL を一度作成し、デバイスの /vendor パーティションに配置します。そうするとそのパーティション内で HAL を再コンパイルせずに無線(OTA)アップデートによりフレームワークを置き換えることができます。

以前の Android アーキテクチャと現在の HIDL ベースのアーキテクチャの違いは、ベンダー インターフェースを使用しているかどうかです。

  • Android 7.x 以前のバージョンではベンダー インターフェースが存在しないため、デバイス メーカーはデバイスを Android の新バージョンに移行するために Android コードの大部分を更新する必要があります。

    図 2 以前の Android アップデート環境
  • Android 8.0 以降では、Android のハードウェア固有の部分に新しい安定したベンダー インターフェースが追加され、Android OS フレームワークを更新するだけで新しい Android リリースを提供できます。シリコン メーカー側の追加作業は不要です。

    図 3. 現在の Android のアップデート環境

Android 8.0 以降を搭載した新しいデバイスはすべて、新しいアーキテクチャを利用できます。ベンダー実装の上位互換性を確保するため、Compatibility Test Suite(CTS)に似た Vendor Test Suite(VTS)がベンダー インターフェースを検証します。VTS を使用すると、以前と現在の両方の Android アーキテクチャで HAL と OS のカーネルテストを自動化できます。

アーキテクチャ リソース

Android アーキテクチャの詳細については、以下のセクションをご覧ください。

  • HAL タイプ。バインド、パススルー、Same-Process(SP)、従来型 HAL について説明します。
  • HIDL(全般)。HAL とユーザー間のインターフェースに関する全般情報が含まれます。
  • HIDL(C++)。HIDL インターフェースの C++ 実装の作成に関する詳細が含まれます。
  • HIDL(Java)。 HIDL インターフェースの Java フロントエンドに関する詳細が含まれます。
  • ConfigStore HAL。Android フレームワークの構成に使用する、読み取り専用の構成項目にアクセスするための API について説明します。
  • Device Tree Overlay。 Android での Device Tree Overlay(DTO)の使用に関する詳細を説明します。
  • ベンダー ネイティブ開発キット(VNDK)。ベンダー HAL を実装するためのベンダー限定のライブラリのセットについて説明します。
  • ベンダー インターフェース オブジェクト(VINTF)。デバイスの関連情報を集約し、クエリ可能な API を通じてその情報を利用できるようにするオブジェクトについて説明します。
  • Android 8.0 用 SELinux。SELinux の変更とカスタマイズの詳細について説明します。