Domyślny interfejs przeglądarki WebRTC w przypadku Cuttlefish zawiera panel sterowania, który zapewnia więcej sposobów interakcji 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, dodając więcej przycisków, które umożliwią urządzeniu wirtualne emulację urządzenia fizycznego. 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. Przyciski niestandardowe pozwalają też testować funkcje związane z kontrolą jakości, np. działanie systemu operacyjnego przy niskim poziomie baterii.
Domyślny panel sterowania Cuttlefish obsługuje niestandardowe działania „podłączanie” bez konieczności modyfikowania głównego projektu AOSP Cuttlefish. Aby można było korzystać z działań niestandardowych, urządzenie wirtualne 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. 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ę, ż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 marka usługi na urządzeniu, aby skonfigurować pakiet hosta urządzeń wirtualnych i uwzględnić w nim plik konfiguracji działania niestandardowego.
# 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 akcji
Plik konfiguracji 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, 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"
}
}
Te pola 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 działań
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 działań, a następnie serwer działań decyduje, jak je wdrożyć.
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 działań, który nasłuchuje zdarzeń na 2 przyciskach:
{
"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 podpolami
Po zaktualizowaniu konfiguracji JSON dodaj nazwę modułu serwera akcji do zmiennej kompilacji konfiguracji Soong 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 binarny plik hosta serwera działań powinien wykonywać te czynności:
Przyjmij numer deskryptora pliku gniazda jako pierwszy i jedyny argument programu.
To gniazdo zostało utworzone przez
launch_cvd
przy użyciusocketpair
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 wysł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.