Panel sterowania Mątwa

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.

  1. 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 ADBSerwer działań.

  2. Utwórz moduł prebuilt_etc_host dla konfiguracji JSON. Upewnij się, że sub_dir jest równe 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",
    }
    
  3. 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 przycisku adb shell po jego naciśnięciu
  • button: obiekt pojedynczego przycisku z tymi polami podrzędnymi:

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 hosta
  • buttons: 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:

  1. 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, typem SOCK_STREAM i protokołem 0.

  2. 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 lub up).

  3. Wykonuj działania na podstawie przychodzących zdarzeń, aby symulować działanie niestandardowe.