L'interfaccia del browser WebRTC predefinita per Cuttlefish include un pannello di controllo che consente di interagire in più modi con il dispositivo virtuale.
Il pannello di controllo è dotato di pulsanti predefiniti per simulare azioni comuni del dispositivo fisico, come il tasto di accensione o i pulsanti del volume, nonché la rotazione del dispositivo.
Azioni personalizzate
Puoi personalizzare il pannello di controllo per aggiungere altri pulsanti che consentano al tuo dispositivo virtuale di emulare più da vicino il tuo dispositivo fisico. Questa opzione è utile per testare funzionalità uniche del dispositivo, ad esempio un pulsante hardware o un gesto speciale che attiva un'azione unica nel sistema operativo. Puoi anche utilizzare pulsanti personalizzati per consentire di testare altre funzionalità incentrate sul QA, ad esempio il comportamento del tuo sistema operativo quando la batteria del dispositivo è in esaurimento.
Il pannello di controllo predefinito di Cuttlefish include il supporto per "collegare" azioni personalizzate senza dover modificare il progetto AOSP Cuttlefish principale. Per iniziare a utilizzare le azioni personalizzate, il dispositivo virtuale deve includere solo un file di configurazione minimo. Consulta questo esempio di file di configurazione dell'azione personalizzata.
Crea un file JSON che definisce le azioni personalizzate del dispositivo. Puoi inserire questo file in qualsiasi directory di tua proprietà. La struttura di questo file è descritta nelle sezioni shell ADB e Action server.
Crea un modulo
prebuilt_etc_host
per la tua configurazione JSON. Assicurati chesub_dir
sia uguale 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", }
Imposta le variabili di compilazione della configurazione di Soong nel file make del prodotto del dispositivo per configurare il pacchetto host del dispositivo virtuale in modo da includere il file di configurazione dell'azione personalizzata.
# 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
Per implementare un'azione personalizzata sono supportati due metodi:
- Comando shell ADB
- Server di azioni
Il file di configurazione JSON può definire più istanze di ogni tipo di implementazione.
Comando shell ADB
Puoi definire un singolo pulsante che viene implementato eseguendo un singolo comando adb
shell
. Ad esempio, il seguente snippet JSON definisce un singolo pulsante che avvia una pagina web:
{
"shell_command":"am start -a android.intent.action.VIEW -d https://www.android.com/",
"button":{
"command":"web",
"title":"Web Page",
"icon_name":"language"
}
}
I campi sono:
shell_command
: il comando da eseguire inadb shell
quando viene premuto il pulsantebutton
: un singolo oggetto pulsante con i seguenti campi secondari:command
: un nome univoco per questo pulsantetitle
: un titolo del testo alternativo per questo pulsanteicon_name
: il nome di un'icona da https://material.io/resources/icon
Server di azioni
I server delle azioni consentono un maggiore controllo sul comportamento delle tue azioni. Un Action Server è un file binario host che rimane in ascolto degli eventi di pressione dei pulsanti da WebRTC utilizzando una coppia di socket. WebRTC inoltra gli eventi al server delle azioni, quindi quest'ultimo decide come implementare l'azione.
I server di azioni consentono un controllo più efficace, ad esempio il mantenimento dello stato (ad esempio per un evento attivabile/disattivabile) o persino l'esecuzione di "meta-azioni" come l'interruzione del dispositivo corrente, l'avvio di altri dispositivi o l'avvio di un'estensione del browser per la registrazione dello schermo. Le possibilità sono limitate solo da ciò che decidi di implementare all'interno del file binario dell'host.
Il seguente snippet JSON definisce un server di azioni che ascolta gli eventi su due pulsanti:
{
"server":"cuttlefish_example_action_server",
"buttons":[
{
"command":"settings",
"title":"Quick Settings",
"icon_name":"settings"
},
{
"command":"alert",
"title":"Do Not Disturb",
"icon_name":"notifications_paused"
}
]
}
I campi sono:
server
: il nome del modulo binario dell'hostbuttons
: un array di pulsanti, con gli stessi campi secondari di cui sopra
Dopo aver aggiornato la configurazione JSON, aggiungi il nome del modulo dell'Action Server alla
variabile di build della configurazione locali cvd_custom_action_servers
. Ad esempio:
# 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
Ogni file binario dell'host del server di azioni deve eseguire i seguenti passaggi:
Accettare un numero di descrittore del file socket come primo e unico argomento del programma.
Questo socket viene creato da
launch_cvd
utilizzandosocketpair
con dominioAF_LOCAL
, tipoSOCK_STREAM
e protocollo 0.In un ciclo, prova a leggere 128 byte dalla presa. Questi byte contengono gli eventi di pressione dei pulsanti inviati dal client WebRTC nel formato
command:state
.command
è quello fornito nella configurazione JSON estate
è lo stato della pressione del pulsante (down
oup
).Intervieni sugli eventi in arrivo per simulare l'azione personalizzata.