Die standardmäßige WebRTC-Browserschnittstelle für Cuttlefish enthält ein Steuerfeld, das mehr Möglichkeiten zur Interaktion mit dem virtuellen Gerät bietet.
Das Steuerfeld enthält Standardschaltflächen, mit denen sich häufige physische Geräteaktionen wie die Ein/Aus-Taste oder die Lautstärketasten sowie die Gerätedrehung simulieren lassen.
Benutzerdefinierte Aktionen
Sie können das Steuerfeld anpassen, um weitere Schaltflächen hinzuzufügen, damit Ihr virtuelles Gerät Ihr physisches Gerät besser emulieren kann. Das ist nützlich, um gerätespezifische Funktionen zu testen, z. B. eine Hardwaretaste oder eine spezielle Geste, die eine bestimmte Aktion im Betriebssystem auslöst. Sie können auch benutzerdefinierte Schaltflächen verwenden, um QA-orientierte Funktionen wie das Verhalten Ihres Betriebssystems bei niedrigem Akkustand des Geräts zu testen.
Die Standard-Systemsteuerung von Cuttlefish bietet Unterstützung für das „Einbinden“ benutzerdefinierter Aktionen, ohne dass das Haupt-AOSP-Projekt von Cuttlefish geändert werden muss. Ihr virtuelles Gerät benötigt nur eine minimale Konfigurationsdatei, um benutzerdefinierte Aktionen zu verwenden. Beispiel für eine Konfigurationsdatei für benutzerdefinierte Aktionen
Erstellen Sie eine JSON-Datei, die die benutzerdefinierten Aktionen Ihres Geräts definiert. Sie können diese Datei in einem beliebigen Verzeichnis speichern, das Ihnen gehört. Die Struktur dieser Datei wird in den Abschnitten ADB-Shell und Aktionsserver beschrieben.
Erstellen Sie ein
prebuilt_etc_host
-Modul für Ihre JSON-Konfiguration. Achten Sie darauf, dasssub_dir
gleichcvd_custom_action_config
ist.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", }
Legen Sie in der Produkt-Makefile Ihres Geräts Soong-Konfigurationsvariablen fest, um das virtuelle Geräte-Hostpaket so zu konfigurieren, dass es Ihre benutzerdefinierte Aktionskonfigurationsdatei enthält.
# 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
Es gibt zwei unterstützte Methoden zum Implementieren einer benutzerdefinierten Aktion:
- ADB-Shell-Befehl
- Action-Server
In Ihrer JSON-Konfigurationsdatei können mehrere Instanzen jedes Implementierungstyps definiert werden.
ADB-Shell-Befehl
Sie können eine einzelne Schaltfläche definieren, die durch Ausführen eines einzelnen adb
shell
-Befehls implementiert wird. Das folgende JSON-Snippet definiert beispielsweise eine einzelne Schaltfläche, mit der eine Webseite aufgerufen wird:
{
"shell_command":"am start -a android.intent.action.VIEW -d https://www.android.com/",
"button":{
"command":"web",
"title":"Web Page",
"icon_name":"language"
}
}
Es gibt folgende Felder:
shell_command
: Der Befehl, der inadb shell
ausgeführt werden soll, wenn die Schaltfläche gedrückt wirdbutton
: Ein einzelnes Schaltflächenobjekt mit den folgenden Unterfeldern:command
: Ein eindeutiger Name für diese Schaltflächetitle
: Ein Alt-Text-Titel für diese Schaltflächeicon_name
: Der Name eines Symbols von https://material.io/resources/icons
Action-Server
Aktionsserver ermöglichen mehr Kontrolle über das Verhalten Ihrer Aktionen. Ein Action-Server ist eine Host-Binärdatei, die über ein Socket-Paar auf Tastendruckereignisse von WebRTC wartet. WebRTC leitet die Ereignisse an den Aktionsserver weiter. Dieser entscheidet dann, wie die Aktion ausgeführt werden soll.
Aktionsserver ermöglichen eine leistungsstärkere Steuerung, z. B. das Beibehalten des Status (z. B. für ein umschaltbares Ereignis) oder sogar das Ausführen von „Meta-Aktionen“ wie das Beenden des aktuellen Geräts, das Starten weiterer Geräte oder das Starten einer Browsererweiterung für die Bildschirmaufzeichnung. Die Möglichkeiten sind nur durch das begrenzt, was Sie im Host-Binärprogramm implementieren.
Im folgenden JSON-Snippet wird ein Aktionsserver definiert, der auf Ereignisse auf zwei Schaltflächen wartet:
{
"server":"cuttlefish_example_action_server",
"buttons":[
{
"command":"settings",
"title":"Quick Settings",
"icon_name":"settings"
},
{
"command":"alert",
"title":"Do Not Disturb",
"icon_name":"notifications_paused"
}
]
}
Es gibt folgende Felder:
server
: Der Name Ihres Host-Binärmodulsbuttons
: Ein Array von Schaltflächen mit denselben Unterfeldern wie oben.
Hängen Sie nach dem Aktualisieren der JSON-Konfiguration den Namen des Aktionsservermoduls an die Soong-Konfigurations-Build-Variable cvd_custom_action_servers
an. Beispiel:
# 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
Jede Binärdatei des Aktionsserverhosts sollte die folgenden Schritte ausführen:
Akzeptieren Sie eine Socket-Dateideskriptornummer als erstes und einziges Programmargument.
Dieser Socket wird von
launch_cvd
mitsocketpair
mit der DomainAF_LOCAL
, dem TypSOCK_STREAM
und dem Protokoll 0 erstellt.Versuchen Sie, in einer Schleife 128 Byte aus dem Socket zu lesen. Diese Byte enthalten Schaltflächen-Ereignisse, die vom WebRTC-Client im Format
command:state
gesendet werden.command
wird in der JSON-Konfiguration angegeben undstate
ist der Zustand des Tastendrucks (down
oderup
).Reagieren Sie auf die eingehenden Ereignisse, um die benutzerdefinierte Aktion zu simulieren.