Panel sterowania Mątwa

Domyślny interfejs przeglądarki WebRTC dla Cuttlefish 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 fizyczne urządzenia, takie jak przycisk zasilania lub przyciski głośności, a także obracanie urządzenia.

Działania niestandardowe

Panel sterowania możesz dostosować, dodając więcej przycisków, które pozwolą wirtualnemu urządzeniu dokładniej emulować urządzenie fizyczne. Jest to przydatne do testowania funkcji unikalnych dla urządzenia, takich jak przycisk sprzętowy lub specjalny gest, który wywołuje unikalne działanie w systemie operacyjnym. Możesz też używać niestandardowych przycisków, aby włączyć testowanie funkcji bardziej ukierunkowanych na kontrolę jakości, takich jak działanie systemu operacyjnego, gdy bateria urządzenia jest bliska wyczerpania.

Domyślny panel sterowania Cuttlefish obsługuje „podłączanie” niestandardowych działań bez konieczności modyfikowania głównego projektu Cuttlefish AOSP. Aby zacząć korzystać z niestandardowych działań, urządzenie wirtualne musi zawierać tylko minimalny plik konfiguracyjny. 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, do którego masz dostęp. Struktura tego pliku jest opisana w sekcjach ADB shellSerwer działań.

  2. Utwórz prebuilt_etc_host moduł dla konfiguracji JSON. Sprawdź, czy 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 makefile produktu urządzenia, aby skonfigurować pakiet hosta urządzenia wirtualnego tak, aby zawierał 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
    

Dostępne są 2 metody implementacji działania niestandardowego:

  • Polecenie powłoki ADB
  • Serwer działań

Plik konfiguracyjny JSON może definiować wiele instancji każdego typu implementacji.

Polecenie powłoki ADB

Możesz zdefiniować pojedynczy przycisk, który jest implementowany przez wykonanie jednego polecenia adb shell. Na przykład poniższy fragment kodu JSON definiuje jeden przycisk, który otwiera 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: pojedynczy obiekt przycisku z tymi polami podrzędnymi:

Serwer działań

Serwery działań zapewniają większą kontrolę nad zachowaniem działań. Serwer działania 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 ten decyduje, jak wdrożyć działanie.

Serwery działań umożliwiają bardziej zaawansowane sterowanie, np. utrzymywanie stanu (w przypadku zdarzenia, które można włączyć lub wyłączyć) lub nawet wykonywanie „meta-działań”, takich jak wyłączanie bieżącego urządzenia, uruchamianie większej liczby urządzeń czy włączanie rozszerzenia przeglądarki do nagrywania ekranu. Możliwości są ograniczone tylko przez to, co zdecydujesz się wdrożyć w binarnej aplikacji 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 to:

  • server: nazwa binarnego modułu 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 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 działań powinien wykonać te czynności:

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

    To gniazdo jest tworzone 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. command jest wartością podaną w konfiguracji JSON, a state to stan naciśnięcia przycisku (down lub up).

  3. Reaguj na przychodzące zdarzenia, aby symulować działanie niestandardowe.