Panneau de configuration de seiches

L'interface de navigateur WebRTC par défaut de Cuttlefish comprend un panneau de configuration. qui offre plus de moyens d'interagir avec l'appareil virtuel.

Le panneau de configuration comporte des boutons par défaut permettant de simuler un appareil physique courant comme le bouton Marche/Arrêt ou les boutons de volume, ainsi que la rotation de l'appareil.

Actions personnalisées

Vous pouvez personnaliser le panneau de configuration en y ajoutant d'autres boutons qui permettent à votre pour émuler plus fidèlement votre appareil physique. Ceci est utile pour tester Fonctionnalités propres à votre appareil, comme un bouton physique 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 le contrôle qualité, comme le comportement de votre système d'exploitation lorsque la batterie de votre appareil est faible.

Par défaut, le panneau de configuration de Cuttlefish permet de "brancher" personnalisé sans avoir à modifier le projet Cuttlefish AOSP principal. Votre l'appareil virtuel ne doit inclure qu'un fichier de configuration minimal des actions personnalisées. Voir ceci 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 mettre ce fichier dans n'importe quel répertoire que vous possédez. La structure de ce fichier est décrite dans les sections du shell ADB et du serveur d'actions.

  2. Créez un module prebuilt_etc_host pour votre configuration JSON. Vérifiez que la propriété 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 compilation de configuration Soong dans le fichier makefile de votre appareil sur configurer le package hôte de l'appareil virtuel pour inclure votre action personnalisée fichier de configuration.

    # 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 pour implémenter une action personnalisée:

  • Commande ADB shell
  • Serveur d'actions

Votre fichier de configuration JSON peut définir plusieurs instances de chaque type de la mise en œuvre.

Commande ADB shell

Vous pouvez définir un bouton unique qui est implémenté en exécutant une seule commande adb shell. Par exemple, l'extrait de code 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 les suivants:

  • shell_command: commande à exécuter dans adb shell lorsque le bouton est appuyé
  • button: objet bouton unique contenant les sous-champs suivants:

Serveur d'actions

Les serveurs d'actions vous permettent de mieux contrôler le comportement de vos actions. Une action Le serveur est un binaire hôte qui écoute les événements d'appui sur un bouton de WebRTC à l'aide d'un de sockets. WebRTC transfère les événements au serveur d'actions, puis le le serveur d'action décide comment mettre en œuvre l'action.

Les serveurs d'action offrent un contrôle plus puissant, comme le maintien de l'état (comme pour un événement pouvant être activé/désactivé), voire exécuter des "méta-actions" comme la suppression l'appareil actuel, le lancement d'un plus grand nombre d'appareils ou le démarrage d'un navigateur à 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 de code 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 les suivants:

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

Après avoir mis à jour la configuration JSON, ajoutez le nom du module du serveur d'actions à la variable de compilation de configuration Soong cvd_custom_action_servers. 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 de serveur d'action doit effectuer les étapes suivantes:

  1. Accepter un numéro de descripteur de fichier de socket comme premier et unique programme .

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

  2. Dans une boucle, essayez de lire 128 octets à partir du socket. Ces octets contenir les événements d'appui sur le bouton envoyés par le client WebRTC au format command:state command est fourni dans la configuration JSON, et state est l'état d'appui sur le bouton (down ou up).

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