Pannello di controllo della seppia

L'interfaccia del browser WebRTC predefinita per Cuttlefish include un pannello di controllo che consente più modi di interagire con il dispositivo virtuale.

Il pannello di controllo dispone di pulsanti predefiniti per simulare le azioni comuni dei dispositivi fisici come il pulsante di accensione o i pulsanti del volume, nonché la rotazione del dispositivo.

Azioni personalizzate

Puoi personalizzare il pannello di controllo per aggiungere più pulsanti che consentono al tuo dispositivo virtuale di emulare più fedelmente il tuo dispositivo fisico. Ciò è utile per testare funzionalità uniche del tuo dispositivo, come un pulsante hardware o un gesto speciale che attiva un'azione unica nel sistema operativo. Puoi anche utilizzare pulsanti personalizzati per abilitare il test di funzionalità più incentrate sul QA, come il comportamento del tuo sistema operativo quando la batteria del dispositivo è scarica.

Il pannello di controllo predefinito di Cuttlefish include il supporto per "collegare" azioni personalizzate senza la necessità di modificare il progetto AOSP principale di Cuttlefish . Il tuo dispositivo virtuale deve includere solo un file di configurazione minimo per iniziare a utilizzare azioni personalizzate. Consulta questo esempio di file di configurazione dell'azione personalizzata .

  1. Crea un file JSON che definisce le azioni personalizzate del tuo dispositivo. Puoi inserire questo file in qualsiasi directory di tua proprietà. La struttura di questo file è descritta nelle sezioni Shell ADB e Action server .

  2. Crea un modulo prebuilt_etc_host per la tua configurazione JSON. Assicurati che sub_dir sia uguale a cvd_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",
    }
    
  3. Imposta le variabili di build della configurazione di Soong nel makefile del prodotto del tuo 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
    

Sono disponibili due metodi supportati per implementare un'azione personalizzata:

  • Comando della shell ADB
  • Server d'azione

Il file di configurazione JSON può definire più istanze di ciascun tipo di implementazione.

Comando della shell ADB

È possibile 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 nella adb shell quando si preme il pulsante
  • button : un oggetto pulsante singolo con i seguenti sottocampi:
    • command : un nome univoco per questo pulsante
    • title : un titolo di testo alternativo per questo pulsante
    • icon_name : il nome di un'icona da https://material.io/resources/icons

Server d'azione

I server delle azioni consentono un maggiore controllo sul comportamento delle tue azioni. Un action server è un file binario host che ascolta gli eventi di pressione dei pulsanti da WebRTC utilizzando una coppia di socket. WebRTC inoltra gli eventi all'action server, quindi l'action server decide come implementare l'azione.

I server di azione consentono un controllo più potente, come il mantenimento dello stato (come per un evento commutabile) o anche l'esecuzione di "meta-azioni" come l'arresto del dispositivo corrente, l'avvio di più 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 binario 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 host
  • buttons : una serie di pulsanti, con gli stessi sottocampi di cui sopra

Dopo aver aggiornato la configurazione JSON, aggiungi il nome del modulo action server alla variabile di build della configurazione Soong cvd_custom_action_servers . Per 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 binario host del server delle azioni deve eseguire i seguenti passaggi:

  1. Accettare un numero descrittore di file socket come primo e unico argomento del programma.

    Questo socket viene creato da launch_cvd utilizzando socketpair con dominio AF_LOCAL , tipo SOCK_STREAM e protocollo 0.

  2. In un ciclo, tenta di leggere 128 byte dal socket. Questi byte contengono gli eventi di pressione dei pulsanti inviati dal client WebRTC nel formato command:state . command è quello fornito nella configurazione JSON e state è lo stato di pressione del pulsante ( down o up ).

  3. Agisci sugli eventi in arrivo per simulare l'azione personalizzata.