CuttlefishのデフォルトのWebRTCブラウザーインターフェイスには、仮想デバイスと対話するためのより多くの方法を可能にするコントロールパネルが含まれています。
コントロールパネルには、電源ボタンや音量ボタンなどの一般的な物理デバイスの動作や、デバイスの回転をシミュレートするためのデフォルトのボタンがあります。
カスタムアクション
コントロールパネルをカスタマイズして、仮想デバイスが物理デバイスをより厳密にエミュレートできるようにするボタンを追加できます。これは、ハードウェアボタンや、OSで固有のアクションをトリガーする特別なジェスチャなど、デバイスに固有の機能をテストする場合に役立ちます。カスタムボタンを使用して、デバイスのバッテリー残量が少ないときのOSの動作など、QAに重点を置いた機能をテストすることもできます。
デフォルトのCuttlefishコントロールパネルには、メインのCuttlefishAOSPプロジェクトを変更せずにカスタムアクションを「プラグイン」するためのサポートが含まれています。カスタムアクションの使用を開始するには、仮想デバイスに最小限の構成ファイルのみを含める必要があります。このカスタムアクション構成ファイルの例を参照してください。
デバイスのカスタムアクションを定義するJSONファイルを作成します。このファイルは、所有している任意のディレクトリに置くことができます。このファイルの構造は、 ADBシェルとアクションサーバーのセクションで説明されています。
JSON構成用の
prebuilt_etc_host
モジュールを作成します。cvd_custom_action_config
がsub_dir
と等しいことを確認してください。prebuilt_etc_host { // Use any name you choose. name: "my_custom_action_config.json", src: "my_custom_action_config.json", // Always use this sub_dir. sub_dir: "cvd_custom_action_config", }
デバイスの製品makefileでSoongconfigビルド変数を設定して、カスタムアクション構成ファイルを含めるように仮想デバイスホストパッケージを構成します。
# Set these variables exactly as shown here to enable the host package to see # your custom config module name. SOONG_CONFIG_NAMESPACES += cvd SOONG_CONFIG_cvd += custom_action_config # Set this value to the name of your JSON module. SOONG_CONFIG_cvd_custom_action_config := my_custom_action_config.json
カスタムアクションを実装するためにサポートされている方法は2つあります。
- ADBシェルコマンド
- アクションサーバー
JSON構成ファイルは、各タイプの実装の複数のインスタンスを定義できます。
ADBシェルコマンド
単一のadb shell
コマンドを実行することで実装される単一のボタンを定義できます。たとえば、次のJSONスニペットは、Webページを起動する単一のボタンを定義します。
{
"shell_command":"am start -a android.intent.action.VIEW -d https://www.android.com/",
"button":{
"command":"web",
"title":"Web Page",
"icon_name":"language"
}
}
フィールドは次のとおりです。
-
shell_command
:ボタンが押されたときにadb shell
で実行するコマンド button
:次のサブフィールドを持つ単一のボタンオブジェクト:-
command
:このボタンの一意の名前 title
:このボタンの代替テキストタイトルicon_name
: https ://material.io/resources/iconsからのアイコンの名前
-
アクションサーバー
アクションサーバーを使用すると、アクションの動作をより細かく制御できます。アクションサーバーは、ソケットペアを使用してWebRTCからのボタン押下イベントをリッスンするホストバイナリです。 WebRTCはイベントをアクションサーバーに転送し、アクションサーバーがアクションの実装方法を決定します。
アクションサーバーを使用すると、状態の維持(切り替え可能なイベントなど)や、現在のデバイスの強制終了、デバイスの起動、画面記録ブラウザ拡張機能の開始などの「メタアクション」の実行など、より強力な制御が可能になります。可能性は、ホストバイナリ内に実装することを決定したものによってのみ制限されます。
次のJSONスニペットは、2つのボタンでイベントをリッスンするアクションサーバーを定義します。
{
"server":"cuttlefish_example_action_server",
"buttons":[
{
"command":"settings",
"title":"Quick Settings",
"icon_name":"settings"
},
{
"command":"alert",
"title":"Do Not Disturb",
"icon_name":"notifications_paused"
}
]
}
フィールドは次のとおりです。
-
server
:ホストバイナリモジュールの名前 buttons
:上記と同じサブフィールドを持つボタンの配列
JSON構成を更新した後、アクションサーバーモジュールの名前をSoong構成ビルド変数cvd_custom_action_servers
に追加します。例えば:
# Append to this variable exactly as shown here.
SOONG_CONFIG_cvd += custom_action_servers
# Append the name of your action server(s) to this variable.
SOONG_CONFIG_cvd_custom_action_servers += cuttlefish_example_action_server
各アクションサーバーホストバイナリは、次の手順を実行する必要があります。
最初で唯一のプログラム引数としてソケットファイル記述子番号を受け入れます。
このソケットは、ドメイン
AF_LOCAL
、タイプSOCK_STREAM
、およびプロトコル0のsocketpair
を使用してlaunch_cvd
によって作成されます。ループで、ソケットから128バイトを読み取ろうとします。これらのバイトには、WebRTCクライアントによって
command:state
の形式で送信されたボタン押下イベントが含まれています。command
はJSON構成で提供されているとおりであり、state
はボタンを押した状態(down
またはup
)です。着信イベントに基づいて動作し、カスタムアクションをシミュレートします。