La interfaz del navegador WebRTC predeterminada para Cuttlefish incluye un panel de control que permite más formas de interactuar con el dispositivo virtual.
El panel de control presenta botones predeterminados para simular acciones físicas comunes del dispositivo, como el botón de encendido o los botones de volumen, así como la rotación del dispositivo.
Acciones personalizadas
Puede personalizar el panel de control para agregar más botones que permitan que su dispositivo virtual emule más fielmente su dispositivo físico. Esto es útil para probar funciones exclusivas de su dispositivo, como un botón de hardware o un gesto especial que desencadena una acción única en el sistema operativo. También puede utilizar botones personalizados para permitir probar funciones más centradas en el control de calidad, como el comportamiento de su sistema operativo cuando el dispositivo tiene poca batería.
El panel de control predeterminado de Cuttlefish incluye soporte para "conectar" acciones personalizadas sin necesidad de modificar el proyecto principal de Cuttlefish AOSP . Su dispositivo virtual necesita incluir solo un archivo de configuración mínimo para comenzar a usar acciones personalizadas. Vea este ejemplo de archivo de configuración de acción personalizada .
Cree un archivo JSON que defina las acciones personalizadas de su dispositivo. Puede colocar este archivo en cualquier directorio de su propiedad. La estructura de este archivo se describe en las secciones ADB Shell y Action Server .
Cree un módulo
prebuilt_etc_host
para su configuración JSON. Asegúrese de quesub_dir
sea igual acvd_custom_action_config
.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", }
Configure las variables de compilación de configuración de Soong en el archivo MAKE del producto de su dispositivo para configurar el paquete de host del dispositivo virtual para incluir su archivo de configuración de acción personalizada.
# 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
Hay dos métodos admitidos para implementar una acción personalizada:
- Comando de shell ADB
- servidor de acción
Su archivo de configuración JSON puede definir múltiples instancias de cada tipo de implementación.
Comando de shell ADB
Puede definir un solo botón que se implementa ejecutando un solo comando adb shell
. Por ejemplo, el siguiente fragmento JSON define un único botón que inicia una página web:
{
"shell_command":"am start -a android.intent.action.VIEW -d https://www.android.com/",
"button":{
"command":"web",
"title":"Web Page",
"icon_name":"language"
}
}
Los campos son:
-
shell_command
: el comando a ejecutar enadb shell
cuando se presiona el botón -
button
: un objeto de botón único con los siguientes subcampos:-
command
: un nombre único para este botón -
title
: un título de texto alternativo para este botón -
icon_name
: el nombre de un icono de https://material.io/resources/icons
-
servidor de acción
Los servidores de acciones permiten un mayor control sobre el comportamiento de sus acciones. Un servidor de acciones es un binario de host que escucha eventos de pulsación de botones desde WebRTC utilizando un par de sockets. WebRTC reenvía los eventos al servidor de acciones y luego el servidor de acciones decide cómo implementar la acción.
Los servidores de acciones permiten un control más potente, como mantener el estado (como para un evento alternable) o incluso ejecutar "metaacciones", como cerrar el dispositivo actual, iniciar más dispositivos o iniciar una extensión del navegador para grabar la pantalla. Las posibilidades están limitadas únicamente por lo que decida implementar dentro del binario del host.
El siguiente fragmento JSON define un servidor de acciones que escucha eventos en dos botones:
{
"server":"cuttlefish_example_action_server",
"buttons":[
{
"command":"settings",
"title":"Quick Settings",
"icon_name":"settings"
},
{
"command":"alert",
"title":"Do Not Disturb",
"icon_name":"notifications_paused"
}
]
}
Los campos son:
-
server
: El nombre de su módulo binario host -
buttons
: una serie de botones, con los mismos subcampos que arriba
Después de actualizar la configuración JSON, agregue el nombre del módulo del servidor de acciones a la variable de compilación de la configuración de Soong cvd_custom_action_servers
. Por ejemplo:
# 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
Cada binario del host del servidor de acciones debe realizar los siguientes pasos:
Acepte un número de descriptor de archivo de socket como primer y único argumento del programa.
Este socket lo crea
launch_cvd
usandosocketpair
con dominioAF_LOCAL
, tipoSOCK_STREAM
y protocolo 0.En un bucle, intente leer 128 bytes del socket. Estos bytes contienen eventos de pulsación de botón enviados por el cliente WebRTC en el formato
command:state
.command
es el proporcionado en la configuración JSON, ystate
es el estado de presionar el botón (down
oup
).Actúe sobre los eventos entrantes para simular la acción personalizada.