Panel sterowania mątwy

Domyślny interfejs przeglądarki WebRTC dla mątwy zawiera panel sterowania, który umożliwia więcej sposobów interakcji z urządzeniem wirtualnym.

Panel sterowania zawiera domyślne przyciski symulujące typowe działania urządzeń fizycznych, takie jak przycisk zasilania lub przyciski głośności, a także obrót urządzenia.

Działania niestandardowe

Możesz dostosować panel sterowania, dodając więcej przycisków, które pozwolą urządzeniu wirtualnemu lepiej emulować urządzenie fizyczne. Jest to przydatne do testowania funkcji charakterystycznych dla Twojego urządzenia, takich jak przycisk sprzętowy lub specjalny gest uruchamiający unikalną akcję w systemie operacyjnym. Możesz także użyć niestandardowych przycisków, aby umożliwić testowanie funkcji skupiających się na kontroli jakości, takich jak zachowanie systemu operacyjnego, gdy poziom naładowania baterii urządzenia jest niski.

Domyślny panel sterowania mątwy umożliwia „podłączanie” niestandardowych akcji bez konieczności modyfikowania głównego projektu AOSP mątwy . Aby móc korzystać z akcji niestandardowych, Twoje urządzenie wirtualne musi zawierać jedynie minimalny plik konfiguracyjny. Zobacz ten przykładowy plik konfiguracyjny akcji niestandardowej .

  1. Utwórz plik JSON, który definiuje niestandardowe działania urządzenia. Możesz umieścić ten plik w dowolnym katalogu, który posiadasz. Struktura tego pliku jest opisana w sekcjach powłoki ADB i serwera akcji .

  2. Utwórz moduł prebuilt_etc_host dla swojej konfiguracji JSON. Upewnij się, że sub_dir jest równy 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 makefile produktu swojego urządzenia, aby skonfigurować pakiet hosta urządzenia wirtualnego tak, aby zawierał plik konfiguracyjny akcji niestandardowej.

    # 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ą dwie obsługiwane metody implementacji akcji niestandardowej:

  • Polecenie powłoki ADB
  • Serwer akcji

Twój plik konfiguracyjny JSON może definiować wiele wystąpień każdego typu implementacji.

Polecenie powłoki ADB

Możesz zdefiniować pojedynczy przycisk, który jest implementowany poprzez wykonanie pojedynczego polecenia adb shell . Na przykład następujący fragment JSON definiuje pojedynczy przycisk uruchamiający 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 to:

  • shell_command : Polecenie do wykonania w adb shell po naciśnięciu przycisku
  • button : Obiekt z jednym przyciskiem z następującymi podpolami:

Serwer akcji

Serwery akcji umożliwiają większą kontrolę nad zachowaniem Twoich działań. Serwer akcji to plik binarny hosta, który nasłuchuje zdarzeń naciśnięcia przycisku z WebRTC przy użyciu pary gniazd. WebRTC przekazuje zdarzenia do serwera akcji, a następnie serwer akcji decyduje, w jaki sposób wdrożyć akcję.

Serwery akcji umożliwiają potężniejszą kontrolę, na przykład utrzymywanie stanu (na przykład przełączalnego zdarzenia), a nawet uruchamianie „metaakcji”, takich jak wyłączanie bieżącego urządzenia, uruchamianie większej liczby urządzeń lub uruchamianie rozszerzenia przeglądarki rejestrującego ekran. Możliwości są ograniczone jedynie tym, co zdecydujesz się zaimplementować w pliku binarnym hosta.

Poniższy fragment kodu JSON definiuje serwer akcji, który nasłuchuje zdarzeń na dwóch 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 to:

  • server : Nazwa modułu binarnego hosta
  • buttons : tablica przycisków z takimi samymi podpolami jak powyżej

Po zaktualizowaniu konfiguracji JSON dołącz 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 plik binarny hosta serwera akcji powinien wykonać następujące kroki:

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

    To gniazdo jest tworzone 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 wysyłane przez klienta WebRTC w formacie command:state . command jest takie, jak podano w konfiguracji JSON, a state to stan naciśnięcia przycisku ( down lub up ).

  3. Działaj na podstawie nadchodzących zdarzeń, aby symulować akcję niestandardową.