L'interface de navigateur WebRTC par défaut pour Cuttlefish inclut un panneau de commande qui offre davantage de façons d'interagir avec l'appareil virtuel.
Le panneau de commande comporte des boutons par défaut pour simuler des actions courantes sur un appareil physique, 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 commande pour ajouter d'autres boutons qui permettent à votre appareil virtuel d'émuler plus fidèlement votre appareil physique. Cela est utile pour tester des fonctionnalités propres à votre appareil, telles qu'un bouton physique ou un geste spécial qui déclenche une action unique dans l'OS. Vous pouvez également utiliser des boutons personnalisés pour tester des fonctionnalités plus axées sur l'assurance qualité, telles que le comportement de votre OS lorsque la batterie de l'appareil est faible.
Le panneau de commande Cuttlefish par défaut permet d'"intégrer" des actions personnalisées sans avoir à modifier le projet AOSP Cuttlefish principal. Votre appareil virtuel n'a besoin que d'un fichier de configuration minimal pour commencer à utiliser des actions personnalisées. Consultez cet exemple de fichier de configuration d'action personnalisée.
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 dont vous êtes propriétaire. La structure de ce fichier est décrite dans les sections Shell ADB et Serveur d'actions.
Créez un module
prebuilt_etc_hostpour votre configuration JSON. Assurez-vous quesub_direst é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", }Définissez les variables de compilation de la configuration Soong dans le fichier 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 compatibles 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 les suivants :
shell_command: commande à exécuter dansadb shelllorsque vous appuyez sur le boutonbutton: objet de bouton unique avec les sous-champs suivants :command: nom unique de ce boutontitle: titre de texte alternatif pour ce boutonicon_name: nom d'une icône provenant de https://material.io/resources/icons
Serveur d'actions
Les serveurs d'actions permettent de mieux contrôler le comportement de vos actions. Un serveur d'actions est un binaire hôte qui écoute les événements de pression de bouton de WebRTC à l'aide d'une paire de sockets. WebRTC transfère les événements au serveur d'actions, qui décide ensuite comment implémenter l'action.
Les serveurs d'actions offrent un contrôle plus puissant, par exemple en conservant un état (comme pour un événement activable/désactivable) ou même en exécutant des "méta-actions" telles que l'arrêt de l'appareil actuel, le lancement d'autres appareils ou le démarrage d'une extension de navigateur d'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'actions 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ôtebuttons: 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'actions à la variable de compilation de la 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'actions doit effectuer les étapes suivantes :
Acceptez un numéro de descripteur de fichier de socket comme premier et seul argument de programme.
Ce socket est créé par
launch_cvdà l'aide desocketpairavec le domaineAF_LOCAL, le typeSOCK_STREAMet le protocole 0.Dans une boucle, tentez de lire 128 octets à partir du socket. Ces octets contiennent des événements de pression de bouton envoyés par le client WebRTC au format
command:state.commandest tel qu'il est fourni dans la configuration JSON, etstateest l'état de pression du bouton (downouup).Agissez sur les événements entrants pour simuler l'action personnalisée.