Tableau de commande seiche

L'interface du navigateur WebRTC par défaut pour Cuttlefish comprend un panneau de configuration qui permet davantage de façons d'interagir avec le périphérique virtuel.

Le panneau de commande comporte des boutons par défaut pour simuler les actions physiques courantes de l'appareil, telles que le bouton d'alimentation ou les boutons de volume, ainsi que la rotation de l'appareil.

Actions personnalisées

Vous pouvez personnaliser le panneau de configuration pour ajouter plus de boutons permettant à votre appareil virtuel d'émuler plus étroitement votre appareil physique. Ceci est utile pour tester des fonctionnalités uniques à votre appareil, telles qu'un bouton matériel ou un geste spécial qui déclenche une action unique dans le système d'exploitation. Vous pouvez également utiliser des boutons personnalisés pour permettre de tester des fonctionnalités davantage axées sur l'assurance qualité, telles que le comportement de votre système d'exploitation lorsque la batterie de l'appareil est faible.

Le panneau de configuration par défaut de Cuttlefish inclut la prise en charge des actions personnalisées « plug-in » sans avoir besoin de modifier le projet principal Cuttlefish AOSP . Votre appareil virtuel doit inclure uniquement un fichier de configuration minimal pour commencer à utiliser des actions personnalisées. Voir cet exemple de fichier de configuration d'action personnalisée .

  1. Créez un fichier JSON qui définit les actions personnalisées de votre appareil. Vous pouvez placer ce fichier dans n'importe quel répertoire que vous possédez. La structure de ce fichier est décrite dans les sections Shell ADB et Serveur d'action .

  2. Créez un module prebuilt_etc_host pour votre configuration JSON. Assurez-vous que le sub_dir est égal à 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. Définissez les variables de construction de configuration Soong dans le makefile du produit de votre appareil pour configurer le package hôte de l'appareil virtuel afin d'inclure votre fichier de configuration d'action personnalisée.

    # 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
    

Il existe deux méthodes prises en charge pour implémenter une action personnalisée :

  • Commande shell ADB
  • Serveur d'actions

Votre fichier de configuration JSON peut définir plusieurs instances de chaque type d'implémentation.

Commande shell ADB

Vous pouvez définir un seul bouton implémenté en exécutant une seule commande adb shell . Par exemple, l'extrait JSON suivant définit un seul bouton qui lance une page Web :

{
  "shell_command":"am start -a android.intent.action.VIEW -d https://www.android.com/",
  "button":{
      "command":"web",
      "title":"Web Page",
      "icon_name":"language"
  }
}

Les champs sont :

  • shell_command : La commande à exécuter dans adb shell lorsque le bouton est enfoncé
  • button : un objet bouton unique avec les sous-champs suivants :

Serveur d'actions

Les serveurs d'actions permettent plus de contrôle sur le comportement de vos actions. Un serveur d'action est un binaire hôte qui écoute les événements de pression sur les boutons de WebRTC à l'aide d'une paire de sockets. WebRTC transmet les événements au serveur d'actions, puis celui-ci décide comment implémenter l'action.

Les serveurs d'action permettent un contrôle plus puissant, comme le maintien de l'état (comme pour un événement basculable) ou même l'exécution de « méta-actions » telles que la suppression de l'appareil actuel, le lancement de plus d'appareils ou le démarrage d'une extension de navigateur avec enregistrement d'écran. Les possibilités ne sont limitées que par ce que vous décidez d'implémenter dans le binaire hôte.

L'extrait JSON suivant définit un serveur d'action qui écoute les événements sur deux boutons :

{
  "server":"cuttlefish_example_action_server",
  "buttons":[
    {
      "command":"settings",
      "title":"Quick Settings",
      "icon_name":"settings"
    },
    {
      "command":"alert",
      "title":"Do Not Disturb",
      "icon_name":"notifications_paused"
    }
  ]
}

Les champs sont :

  • server : Le nom de votre module binaire hôte
  • buttons : Un tableau de boutons, avec les mêmes sous-champs que ci-dessus

Après avoir mis à jour la configuration JSON, ajoutez le nom du module de serveur d'action à la variable de construction de configuration Soong cvd_custom_action_servers . Par exemple:

# 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

Chaque binaire hôte du serveur d'action doit effectuer les étapes suivantes :

  1. Acceptez un numéro de descripteur de fichier socket comme premier et unique argument du programme.

    Ce socket est créé par launch_cvd en utilisant socketpair avec le domaine AF_LOCAL , tapez SOCK_STREAM et le protocole 0.

  2. Dans une boucle, essayez de lire 128 octets du socket. Ces octets contiennent des événements de pression de bouton envoyés par le client WebRTC au format command:state . command est telle que fournie dans la configuration JSON, et state est l'état de la pression sur le bouton ( down ou up ).

  3. Agissez sur les événements entrants pour simuler l’action personnalisée.