L'interface de navigateur WebRTC par défaut de Cuttlefish inclut un panneau de configuration qui offre davantage de moyens d'interagir avec l'appareil virtuel.
Le panneau de contrôle comporte des boutons par défaut pour simuler des actions physiques courantes sur l'appareil, 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 pour ajouter d'autres boutons permettant à votre appareil virtuel d'émuler plus fidèlement 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 le contrôle qualité, comme le comportement de votre OS lorsque la batterie de l'appareil est faible.
Le panneau de contrôle Cuttlefish par défaut permet d'intégrer des actions personnalisées sans avoir à modifier le projet AOSP principal de Cuttlefish. Votre appareil virtuel ne doit inclure qu'un fichier de configuration minimal pour commencer à utiliser les 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_host
pour votre configuration JSON. Assurez-vous quesub_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", }
Définissez les variables de compilation de configuration Soong dans le fichier makefile 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 pour implémenter une action personnalisée:
- Commande shell ADB
- Serveur d'action
Votre fichier de configuration JSON peut définir plusieurs instances de chaque type d'implémentation.
Commande shell ADB
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 dansadb shell
lorsque l'utilisateur appuie sur le boutonbutton
: objet bouton unique contenant les sous-champs suivants :command
: nom unique de ce bouton.title
: titre en texte alternatif pour ce boutonicon_name
: nom d'une icône 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 les boutons de WebRTC à l'aide d'une paire de sockets. WebRTC transfère les événements au serveur d'actions, qui décide comment mettre en œuvre l'action.
Les serveurs d'actions offrent un contrôle plus puissant, par exemple pour conserver l'état (pour un événement à activer/désactiver) ou même exécuter des "méta-actions" telles que la fermeture 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'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ô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 hôte de serveur d'action doit effectuer les étapes suivantes:
Accepte 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 desocketpair
avec le domaineAF_LOCAL
, le typeSOCK_STREAM
et le protocole 0.Dans une boucle, essayez de lire 128 octets à partir du socket. Ces octets contiennent des événements de pression sur le bouton envoyés par le client WebRTC au format
command:state
.command
est fourni dans la configuration JSON, etstate
correspond à l'état d'appui sur le bouton (down
ouup
).Agir sur les événements entrants pour simuler l'action personnalisée