Domyślny interfejs WebRTC w Cuttlefish zawiera panel sterowania, który umożliwia większą interakcję z urządzeniem wirtualnym.
Panel sterowania zawiera domyślne przyciski do symulowania typowych działań na fizycznym urządzeniu, takich jak przycisk zasilania czy przyciski głośności, a także obracanie urządzenia.
Działania niestandardowe
Możesz dostosować panel sterowania, aby dodać więcej przycisków, które pozwolą Twojemu urządzeniu wirtualnemu lepiej emulować urządzenie fizyczne. Jest to przydatne do testowania funkcji dostępnych tylko na Twoim urządzeniu, takich jak przycisk sprzętowy lub specjalny gest, który uruchamia określone działanie w systemie operacyjnym. Możesz też użyć przycisków niestandardowych, aby włączyć testowanie funkcji bardziej zorientowanych na kontrolę jakości, takich jak działanie systemu operacyjnego, gdy bateria urządzenia jest na wyczerpaniu.
Domyślny panel sterowania Cuttlefish obsługuje „wstawianie” niestandardowych działań bez konieczności modyfikowania głównego projektu Cuttlefish AOSP. Aby zacząć używać działań niestandardowych, wirtualne urządzenie musi zawierać tylko minimalny plik konfiguracji. Zobacz ten przykładowy plik konfiguracji działania niestandardowego.
Utwórz plik JSON, który definiuje niestandardowe działania urządzenia. Możesz umieścić ten plik w dowolnym katalogu. Strukturę tego pliku opisano w sekcjach Powłoka ADB i Serwer działań.
Utwórz moduł
prebuilt_etc_host
dla konfiguracji JSON. Upewnij się, żesub_dir
jest równecvd_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", }
Ustaw zmienne kompilacji konfiguracji Soong w pliku make urządzenia, aby skonfigurować pakiet hosta urządzenia wirtualnego tak, aby zawierał plik konfiguracji niestandardowego działania.
# 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
Istnieją 2 obsługiwane metody implementowania działań niestandardowych:
- Polecenie powłoki ADB
- Serwer akcji
Plik konfiguracji JSON może definiować wiele wystąpień każdego typu implementacji.
Polecenie powłoki ADB
Możesz zdefiniować pojedynczy przycisk, który jest implementowany przez wykonanie pojedynczego polecenia adb
shell
. Na przykład ten fragment kodu JSON definiuje pojedynczy przycisk, który uruchamia stronę internetową:
{
"shell_command":"am start -a android.intent.action.VIEW -d https://www.android.com/",
"button":{
"command":"web",
"title":"Web Page",
"icon_name":"language"
}
}
Pola te to:
shell_command
: polecenie do wykonania w przyciskuadb shell
po jego naciśnięciubutton
: obiekt pojedynczego przycisku z tymi polami podrzędnymi:command
: niepowtarzalna nazwa tego przyciskutitle
: tytuł tekstu alternatywnego tego przyciskuicon_name
: nazwa ikony z https://material.io/resources/icons
Serwer akcji
Serwery akcji zapewniają większą kontrolę nad działaniem akcji. Serwer akcji to binarny host, który nasłuchuje zdarzeń naciśnięcia przycisku z WebRTC za pomocą pary gniazd. WebRTC przekazuje zdarzenia do serwera akcji, który decyduje, jak wdrożyć działanie.
Serwery działań umożliwiają większą kontrolę, np. utrzymywanie stanu (np. w przypadku zdarzenia przełączalnego) czy nawet wykonywanie „metadziałań”, takich jak wyłączenie bieżącego urządzenia, uruchomienie większej liczby urządzeń lub uruchomienie rozszerzenia przeglądarki do nagrywania ekranu. Możliwości są ograniczone tylko do tego, co zdecydujesz się zaimplementować w binarnym pliku hosta.
Ten fragment kodu JSON definiuje serwer akcji, który nasłuchuje zdarzeń dotyczących 2 przycisków:
{
"server":"cuttlefish_example_action_server",
"buttons":[
{
"command":"settings",
"title":"Quick Settings",
"icon_name":"settings"
},
{
"command":"alert",
"title":"Do Not Disturb",
"icon_name":"notifications_paused"
}
]
}
Pola te to:
server
: nazwa modułu binarnego hostabuttons
: tablica przycisków z tymi samymi polami podrzędnymi co powyżej
Po zaktualizowaniu konfiguracji JSON dodaj nazwę modułu serwera akcji do zmiennej kompilacji konfiguracji Soong cvd_custom_action_servers
. Przykład:
# 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
Każdy binarny plik hosta serwera działań powinien wykonywać te czynności:
Przyjmij numer deskryptora pliku gniazda jako pierwszy i jedyny argument programu.
Ten gniazdo zostało utworzone przez
launch_cvd
za pomocąsocketpair
z domenąAF_LOCAL
, typemSOCK_STREAM
i protokołem 0.W pętli spróbuj odczytać 128 bajtów z gniazda. Te bajty zawierają zdarzenia naciśnięcia przycisku wysyłane przez klienta WebRTC w formacie
command:state
. Wartośćcommand
jest taka sama jak w konfiguracji JSON, a wartośćstate
to stan naciśnięcia przycisku (down
lubup
).Wykonuj działania na podstawie przychodzących zdarzeń, aby symulować działanie niestandardowe.