L'interface de navigateur WebRTC par défaut pour Cuttlefish inclut un panneau de configuration qui permet d'interagir avec l'appareil virtuel de plusieurs façons.
Le panneau de configuration comporte des boutons par défaut pour simuler des actions courantes sur un appareil physique, telles que les boutons Marche/Arrêt ou de volume, ainsi que la rotation de l'appareil.
Actions personnalisées
Vous pouvez personnaliser le panneau de configuration pour ajouter des boutons qui permettent à votre appareil virtuel d'émuler plus précisément votre appareil physique. Cela est utile pour tester les fonctionnalités propres à votre appareil, comme un bouton matériel 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é, comme le comportement de votre OS lorsque la batterie de l'appareil est faible.
Le panneau de configuration 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 qui vous appartient. 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 configuration Soong dans le fichier make 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 de code JSON suivant définit un bouton unique 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 l'utilisateur appuie sur le boutonbutton: objet bouton unique avec les sous-champs suivants :command: nom unique de ce bouton.title: titre du texte alternatif de ce boutonicon_name: nom d'une icône provenant de https://material.io/resources/icons
Serveur d'actions
Les serveurs d'actions vous permettent de mieux contrôler le comportement de vos actions. Un serveur d'action est un binaire hôte qui écoute les événements de pression sur un bouton depuis WebRTC à l'aide d'une paire de sockets. WebRTC transmet les événements au serveur d'action, qui décide ensuite comment implémenter l'action.
Les serveurs d'actions permettent un contrôle plus puissant, par exemple en conservant l'é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 de code 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 du 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 d'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 du 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 les événements d'appui sur les boutons envoyés par le client WebRTC au format
command:state.commandest fourni dans la configuration JSON, etstatecorrespond à l'état de pression du bouton (downouup).Réagissez aux événements entrants pour simuler l'action personnalisée.