Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

Android アーキテクチャ

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

Android システム アーキテクチャの概要
図 1. Android システム アーキテクチャ
  • アプリ フレームワーク。アプリ フレームワークを頻繁に利用するのはアプリのデベロッパーです。ハードウェア デベロッパーの場合、Developer API に注意する必要があります。Developer API の多くは、基盤となる HAL インターフェースに直接マッピングされ、ドライバの実装に役立つ情報を提供します。
  • バインダ IPC。バインダのプロセス間通信(IPC)メカニズムにより、アプリ フレームワークはプロセスの境界を越えて Android システム サービスのコードを呼び出すことができます。これにより、高レベルのフレームワーク API が Android システム サービスとやり取りできます。アプリのフレームワーク レベルでは、このやり取りはデベロッパーには見えず、「ただ動いている」ように見えます。
  • システム サービス。システム サービスはそれぞれ、ウィンドウ マネージャ、検索サービス、通知マネージャのように、モジュール化され、機能を絞ったコンポーネントです。アプリ フレームワーク API によって公開される機能は、システム サービスを利用して、基盤となるハードウェアにアクセスします。Android のサービスには、「システム」(ウィンドウ マネージャ、通知マネージャなど)と「メディア」(再生メディアや記録メディアに関連するサービス)の 2 つのグループがあります。
  • ハードウェア抽象化レイヤ(HAL)。HAL は、ハードウェア ベンダーが実装する標準インターフェースを定義することで、下位レベルのドライバ実装に Android が依存しないようにするものです。HAL を使用すると、上位レベルのシステムに影響や変更を加えることなく、機能を実装できます。HAL の実装はモジュールにパッケージ化され、適切なタイミングで Android システムによって読み込まれます。詳しくはハードウェア抽象化レイヤ(HAL)をご覧ください。
  • Linux カーネル。デバイス ドライバの開発は、一般的な Linux デバイス ドライバの開発と同様です。Android は、Linux カーネルのバージョンにいくつか特別な機能を追加します。積極的にメモリを保存するメモリ管理システムであるローメモリー キラー、PowerManager システム サービスの 1 つである wake lock、バインダ IPC ドライバのほか、モバイル埋め込みプラットフォーム用として重要な機能が追加されます。これらの追加は、主にシステムの機能に関するものであり、ドライバの開発には影響しません。バインダ ドライバなど、必要な機能がサポートされていれば、カーネルの任意のバージョンを使用できます。ただし、最新版の 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 以上を搭載した新しいデバイスはすべて、新しいアーキテクチャを利用できます。ベンダー実装の上位互換性を確認するため、互換性テストスイート(CTS)に似た ベンダー テストスイート(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 について説明しています。
  • デバイスツリー オーバーレイ。Android でのデバイスツリー オーバーレイ(DTO)の使用に関する詳細を説明しています。
  • ベンダー ネイティブ開発キット(VNDK)。ベンダー HAL を実装するためのベンダー専用のライブラリ セットについて説明しています。
  • ベンダー インターフェース オブジェクト(VINTF)。デバイスの関連情報を集約し、クエリ可能な API を通じてその情報を利用できるようにするオブジェクトについて説明しています。
  • Android 8.0 用 SELinux。SELinux の変更とカスタマイズの詳細について説明しています。

このサイトのリソースに加えて、Treble チームにより「Treble: Fast Software Updates by Creating an Equilibrium in an Active Software Ecosystem of Globally Distributed Stakeholders」が公開されました。ACM のメンバーはこの論文を無料で入手できます。メンバーでない場合は購入するか、要約を読むことができます。