アーキテクチャの概要

Android オープンソース プロジェクト(AOSP)は、公開されていて自由に変更できる Android ソースコードです。誰でも AOSP をダウンロードでき、デバイスに合わせて変更できます。AOSP は、Android モバイル プラットフォームの完全かつフル機能の実装を提供します。

AOSP を実装するデバイスの互換性には、AOSP 互換性と Android 互換性という 2 つのレベルがあります。AOSP 互換デバイスは、互換性定義ドキュメント(CDD)の要件リストに準拠している必要があります。Android 互換デバイスは、CDD とベンダー ソフトウェア要件(VSR)の要件リストと、ベンダー テストスイート(VTS)互換性テストスイート(CTS)などのテストに準拠している必要があります。Android 互換性について詳しくは、Android 互換性プログラムをご覧ください。

AOSP のアーキテクチャ

AOSP のソフトウェア スタックには、次のレイヤが含まれています。

AOSP のソフトウェア スタックのアーキテクチャ。

図 1. AOSP のソフトウェア スタックのアーキテクチャ。

図 1 で使用されている用語の定義は以下のとおりです。

Android アプリ
Android API のみを使用して作成されたアプリ。Android アプリの検索とダウンロードに Google Play ストアが広く利用されていますが、他にもさまざまな方法があります。デバイス メーカーが、デバイスのコア機能をサポートするために Android アプリをプリインストールする場合もあります。Android アプリの開発に興味がある場合は、developers.android.com をご覧ください。
特権アプリ
Android API と System API を組み合わせて作成されたアプリ。これらのアプリは、特権アプリとしてデバイスにプリインストールする必要があります。
デバイス メーカー アプリ
Android API、System API、Android フレームワーク実装への直接アクセスを組み合わせて作成されたアプリ。デバイス メーカーが Android フレームワーク内の不安定な API に直接アクセスする可能性があるため、デバイス メーカー アプリはデバイスにプリインストールする必要があり、更新できるのは、デバイスのシステム ソフトウェアが更新されたときのみとなります。
System API
System API は、アプリのバンドルに含めるためにパートナーと OEM のみが利用できる Android API の集合です。これらの API はソースコードで @SystemApi としてマークされています。
Android API
Android API は、サードパーティの Android アプリ デベロッパー向けに一般公開されている API です。Android API について詳しくは、Android API リファレンスをご覧ください。
Android フレームワーク
Java クラス、インターフェース、その他のプリコンパイルされたコードのグループ。これに基づいてアプリを作成します。Android API の使用を介して一般公開されている部分と、System API の使用を介して OEM のみが利用できる部分があります。Android フレームワークのコードは、アプリのプロセス内で実行されます。
システム サービス
システム サービスは、system_server、SurfaceFlinger、MediaService などの、機能を絞ってモジュール化されたコンポーネントです。Android フレームワーク API によって公開される機能は、システム サービスと通信して基盤となるハードウェアにアクセスします。
Android ランタイム(ART)
AOSP が提供する Java Runtime Environment。ART がアプリのバイトコードをプロセッサ固有の命令に変換し、それがデバイスのランタイム環境で実行されます。
Hardware Abstraction Layer(HAL)
HAL は、ハードウェア ベンダーが実装するための標準インターフェースを備えた抽象化レイヤです。HAL を使用すると、Android は下位レベルのドライバ実装に依存しなくなります。上位のシステムに影響を与えたり変更を加えたりすることなく、機能を実装できます。詳細については、HAL の概要をご覧ください。
ネイティブ デーモンとネイティブ ライブラリ

このレイヤのネイティブ デーモンには、inithealthdlogdstoraged があります。これらのデーモンはカーネルや他のインターフェースと直接やり取りし、ユーザー空間ベースの HAL 実装に依存しません。

このレイヤのネイティブ ライブラリには、libclibloglibutilslibbinderlibselinux があります。これらのネイティブ ライブラリはカーネルや他のインターフェースと直接やり取りし、ユーザー空間ベースの HAL 実装に依存しません。

カーネル

カーネルはオペレーティング システムの中心部分であり、デバイスの基盤となるハードウェアと通信します。可能な限り、AOSP カーネルはハードウェアに依存しないモジュールとベンダー固有のモジュールに分割されます。AOSP カーネル コンポーネントの定義を含め、説明については、カーネルの概要をご覧ください。

次のステップ

  • AOSP を初めて使用する場合や開発を開始する場合は、スタートガイドをご覧ください。
  • AOSP の特定のレイヤの詳細を確認する場合は、左側のナビゲーションでセクション名をクリックし、そのセクションの概要から開始してください。