Panel sterowania mątwy

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.

  1. 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ń.

  2. Utwórz moduł prebuilt_etc_host na potrzeby 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 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 przycisku adb shell po jego naciśnięciu
  • button: obiekt pojedynczego przycisku z tymi polami podrzędnymi:

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

  1. Przyjmij numer deskryptora pliku gniazda jako pierwszy i jedyny argument programu.

    To gniazdo zostało utworzone przez launch_cvd przy użyciu 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 wysłane przez klienta WebRTC w formacie command:state. command jest podany w konfiguracji JSON, a state to stan naciśnięcia przycisku (down lub up).

  3. Na podstawie zdarzeń przychodzących możesz symulować działanie niestandardowe.