Panel sterowania mątwy

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.

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

  2. Utwórz moduł prebuilt_etc_host na potrzeby konfiguracji JSON. Upewnij się, że parametr 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 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 w adb shell, gdy przycisk to naciśnięto
  • button: obiekt z pojedynczym przyciskiem z tymi polami podrzędnymi:

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

  1. Zaakceptuj numer deskryptor pliku gniazda jako pierwszy i jedyny program .

    To gniazdo zostało utworzone przez użytkownika launch_cvd przy użyciu dodatku socketpair z domeną AF_LOCAL, typ SOCK_STREAM i protokół 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 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.