Cuttlefish 仮想 Android デバイス

Cuttlefish とは

Cuttlefish とは、設定可能な仮想 Android デバイスであり、リモート環境(Google Cloud Engine などのサードパーティ クラウド サービスを使用した場合)でも、ローカル環境(Linux x86 マシン上)でも稼働することができます。

Cuttlefish の目的

  • プラットフォームやアプリのデベロッパーが、コードの開発と変更の検証を行う際に、物理ハードウェアに依存しないで済むようにします。
  • 高忠実度を重視し、コア フレームワークとの厳密な整合性を維持することで、実機のフレームワーク ベース動作を複製します。
  • API レベル 28 以降をすべてサポートします。
  • 物理ハードウェア上の動作に合わせて、複数の API レベルを横断して一貫した機能を実現します。
  • 拡張が可能:

    • 複数のデバイスを並列実行できます。
    • 低い導入コストで高忠実度を実現し、並行テスト実行が可能です。
  • フォーム ファクタ、RAM、CPU などを調整できる設定可能なデバイスを実現します。

Cuttlefish と他のデバイスを比較する

Cuttlefish と Android Emulator

Cuttlefish は、Android Emulator と多くの類似点がありますが、ピュア AOSP であろうと、独自ツリー内のカスタム実装であろうと、Android フレームワークに対する完全な忠実度が保証されています。そのため、Cuttlefish は、実際のアプリ内で生じた OS レベル インタラクションに対して、同じカスタム Android OS ソースやピュア Android OS ソースを使用してビルドされた物理スマートフォン ターゲットと同様に応答します。

Android Emulator は、アプリの開発を容易にするよう設計されており、Android アプリ デベロッパーの各ユースケースに適した機能フックを多数備えています。そのため、カスタム Android フレームワークを使用した場合、エミュレータのビルドが難しくなることがあります。カスタム プラットフォーム / フレームワーク コードや最先端 Android 向けの仮想デバイスが必要な場合、Cuttlefish が最適な仮想化方法になります。Cuttlefish は、最先端の AOSP 開発向けの標準デバイスです。

Cuttlefish と物理デバイス

Cuttlefish 仮想デバイスと物理デバイスの主な違いは、ハードウェア抽象化レイヤ(HAL)レベルと、カスタム ハードウェアとインタラクションするソフトウェアにあります。ハードウェア固有の実装を除き、Cuttlefish と物理デバイスの機能や動作は同等です。

Cuttlefish の仕組み

Cuttlefish は、デバッグで使用する Android デバイスと同じように操作できます。adb 経由で通常のデバイスとして登録され、リモート パソコン経由で物理デバイスを操作するのと同じように操作できます。ユースケースは多岐にわたり、アプリのテスト、カスタム システムのビルドテストなど、幅広く利用できます。

Cuttlefish は、フレームワークに完全に忠実であることを重視して作られているため、エミュレートできない物理ハードウェア依存関係がない場合に、独自のフレームワークやアプリの機能テストに使用できます。

現在 Cuttlefish がよく利用されているテスト

Cuttlefish がよく使用されるテストには、以下のものがあります。

  • CTS
  • フレームワークのコンプライアンス
  • 継続的インテグレーション テスト
  • カスタムテスト スイート

クラウド内に Cuttlefish をホストできるか

はい、できます。Cuttlefish は Google Cloud をネイティブ サポートしており、他のクラウド プラットフォームにも対応する予定です。

スタートガイド

AOSP ベースの Cuttlefish インスタンスを作成する方法については、スタートガイドをご覧ください。