Domyślny interfejs przeglądarki WebRTC w przypadku Cuttlefish zawiera panel sterowania który daje więcej możliwości interakcji z urządzeniem wirtualnym.
Panel sterowania zawiera domyślne przyciski symulujące typowe urządzenia fizyczne. takie jak przycisk zasilania lub przyciski głośności albo obracanie urządzenia.
Działania niestandardowe
Możesz dostosować panel sterowania, dodając więcej przycisków umożliwiających aby dokładniej emulować urządzenie fizyczne. Przydaje się to podczas testowania funkcje dostępne tylko na Twoim urządzeniu, takie jak przycisk sprzętowy czy gest specjalny; które wywołuje niepowtarzalne działanie w systemie operacyjnym. Przycisków niestandardowych można też używać do włącz testowanie dodatkowych funkcji skoncentrowanych na kontroli jakości, np. działania systemu operacyjnego, gdy słaba bateria urządzenia.
Domyślny panel sterowania Cuttlefish obsługuje funkcję podłączania niestandardowy działań bez konieczności modyfikowania głównego projektu AOSP Cuttlefish. Twoje aby można było rozpocząć korzystanie z urządzenia wirtualnego, musi on zawierać tylko minimalny plik konfiguracji za pomocą działań niestandardowych. Zobacz to przykładowy plik konfiguracji działania niestandardowego.
Utwórz plik JSON, który definiuje niestandardowe działania na urządzeniu. Możesz podać w dowolnym katalogu, którego jesteś właścicielem. Struktura tego pliku została opisana w sekcjach Powłoka ADB i Serwer działań.
Utwórz moduł
prebuilt_etc_host
na potrzeby konfiguracji JSON. Upewnij się, że parametrsub_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 marki urządzenia na skonfiguruj pakiet hosta urządzenia wirtualnego, tak aby zawierał działanie niestandardowe .
# 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
Działanie niestandardowe można wdrożyć na 2 sposoby:
- Polecenie powłoki ADB
- Serwer działań
Twój plik konfiguracyjny JSON może definiować wiele instancji każdego typu implementacji.
Polecenie powłoki ADB
Możesz zdefiniować pojedynczy przycisk wdrażany, wykonując pojedyncze polecenie adb
shell
. Na przykład ten fragment kodu JSON definiuje pojedynczy przycisk
uruchamiająca 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"
}
}
Te pola to:
shell_command
: polecenie do wykonania wadb shell
, gdy przycisk to naciśniętobutton
: obiekt z pojedynczym przyciskiem z tymi polami podrzędnymi:command
: niepowtarzalna nazwa tego przyciskutitle
: tytuł tego przycisku (tekst alternatywny).icon_name
: nazwa ikony z https://material.io/resources/icons
Serwer działań
Serwery akcji zapewniają większą kontrolę nad zachowaniem Twoich działań. Działanie Serwer to plik binarny hosta, który nasłuchuje zdarzeń naciśnięcia przycisku z WebRTC za pomocą z gniazdami elektrycznymi. WebRTC przekazuje zdarzenia do serwera działań, a następnie tag decyduje o sposobie wdrożenia działania.
Serwery działań zapewniają większą kontrolę, na przykład utrzymywanie stanu (np. w przypadku zdarzenia z możliwością przełączania) czy też uruchomienia metadziałań. na przykład zabicie używane urządzenie, uruchamianie kolejnych urządzeń lub uruchamianie przeglądarki do nagrywania ekranu . Możliwości są ograniczone tylko od tego, co zdecydujesz się wdrożyć w pliku binarnym hosta.
Poniższy fragment kodu JSON definiuje serwer działań, który nasłuchuje zdarzeń na dwa przyciski:
{
"server":"cuttlefish_example_action_server",
"buttons":[
{
"command":"settings",
"title":"Quick Settings",
"icon_name":"settings"
},
{
"command":"alert",
"title":"Do Not Disturb",
"icon_name":"notifications_paused"
}
]
}
Te pola to:
server
: nazwa modułu binarnego hostabuttons
: tablica przycisków z tymi samymi polami podrzędnymi co powyżej
Po zaktualizowaniu konfiguracji JSON dołącz nazwę modułu serwera działań do
zmienną kompilacji konfiguracji Soong jest cvd_custom_action_servers
. Na 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 plik binarny hosta serwera działań powinien wykonać te czynności:
Zaakceptuj numer deskryptor pliku gniazda jako pierwszy i jedyny program .
To gniazdo zostało utworzone przez użytkownika
launch_cvd
przy użyciu dodatkusocketpair
z domenąAF_LOCAL
, typSOCK_STREAM
i protokół 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
command
jest podany w konfiguracji JSON, astate
to stan naciśnięcia przycisku (down
lubup
).Na podstawie zdarzeń przychodzących możesz symulować działanie niestandardowe.