アーキテクチャの概要

Android オープン システム プラットフォーム (AOSP)は、公開されており、変更可能な Android ソース コードです。誰でも自分のデバイス用に AOSP をダウンロードして変更できます。 AOSP は、Android モバイル プラットフォームの完全かつ完全に機能する実装を提供します。

AOSP を実装するデバイスには、AOSP 互換性と Android 互換性の 2 つのレベルの互換性があります。 AOSP 互換デバイスは、 Compatibility Definition Document (CDD)の要件リストに準拠する必要があります。 Android 互換デバイスは、CDD およびベンダー ソフトウェア要件 (VSR) の要件リストと、ベンダー テスト スイート (VTS)互換性テスト スイート (CTS)などのテストに準拠する必要があります。 Android 互換性の詳細については、 Android 互換性プログラムを参照してください。

AOSP アーキテクチャ

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

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

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

以下は、図 1 で使用されている用語の定義のリストです。

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

このレイヤーのネイティブ デーモンには、 inithealthdlogd 、およびstoragedが含まれます。これらのデーモンは、カーネルまたは他のインターフェースと直接対話し、ユーザー空間ベースの HAL 実装に依存しません。

この層のネイティブ ライブラリには、 libclibloglibutilslibbinder 、およびlibselinuxが含まれます。これらのネイティブ ライブラリは、カーネルまたは他のインターフェイスと直接対話し、ユーザー空間ベースの HAL 実装に依存しません。

カーネル

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

次は何ですか?

  • AOSP を初めて使用し、開発を開始したい場合は、「はじめに」セクションを参照してください。
  • AOSP の特定のレイヤーについて詳しく知りたい場合は、左側のナビゲーションでセクションの名前をクリックし、そのセクションの概要から始めてください。