Android オープンソース プロジェクト(AOSP)は、公開されていて自由に変更できる Android ソースコードです。誰でも AOSP をダウンロードでき、デバイスに合わせて変更できます。AOSP は、Android モバイル プラットフォームの完全かつフル機能の実装を提供します。
AOSP を実装するデバイスの互換性には、AOSP 互換性と Android 互換性という 2 つのレベルがあります。AOSP 互換デバイスは、互換性定義ドキュメント(CDD)の要件リストに準拠している必要があります。Android 互換デバイスは、CDD とベンダー ソフトウェア要件(VSR)の要件リストと、ベンダー テストスイート(VTS)と互換性テストスイート(CTS)などのテストに準拠している必要があります。Android 互換性について詳しくは、Android 互換性プログラムをご覧ください。
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 の概要をご覧ください。
- ネイティブ デーモンとネイティブ ライブラリ
このレイヤのネイティブ デーモンには、
init
、healthd
、logd
、storaged
があります。これらのデーモンはカーネルや他のインターフェースと直接やり取りし、ユーザー空間ベースの HAL 実装に依存しません。このレイヤのネイティブ ライブラリには、
libc
、liblog
、libutils
、libbinder
、libselinux
があります。これらのネイティブ ライブラリはカーネルや他のインターフェースと直接やり取りし、ユーザー空間ベースの HAL 実装に依存しません。- カーネル
カーネルはオペレーティング システムの中心部分であり、デバイスの基盤となるハードウェアと通信します。可能な限り、AOSP カーネルはハードウェアに依存しないモジュールとベンダー固有のモジュールに分割されます。AOSP カーネル コンポーネントの定義を含め、説明については、カーネルの概要をご覧ください。
次のステップ
- AOSP を初めて使用する場合や開発を開始する場合は、スタートガイドをご覧ください。
- AOSP の特定のレイヤの詳細を確認する場合は、左側のナビゲーションでセクション名をクリックし、そのセクションの概要から開始してください。