Panel sterowania Mątwa

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

Panel sterowania zawiera domyślne przyciski do symulowania typowych działań urządzeń fizycznych, takich jak przycisk zasilania lub 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ą urządzeniu wirtualnemu dokładniej emulować urządzenie fizyczne. Jest to przydatne do testowania funkcji unikalnych dla Twojego urządzenia, takich jak przycisk na urządzeniu lub specjalny gest, który wywołuje unikalne działanie w systemie operacyjnym. Możesz też używać przycisków niestandardowych, aby testować funkcje bardziej skoncentrowane na kontroli jakości, takie jak zachowanie systemu operacyjnego, gdy bateria urządzenia jest słaba.

Domyślny panel sterowania Cuttlefish obsługuje „podłączanie” działań niestandardowych bez konieczności modyfikowania głównego projektu Cuttlefish AOSP. Aby zacząć korzystać z działań niestandardowych, urządzenie wirtualne musi zawierać tylko minimalny plik konfiguracyjny. Zobacz ten przykładowy plik konfiguracyjny działania niestandardowego.

  1. Utwórz plik JSON, który definiuje działania niestandardowe urządzenia. Możesz umieścić ten plik w dowolnym katalogu, którego jesteś właścicielem. Struktura tego pliku jest opisana w sekcjach Powłoka ADB i Serwer działań.

  2. Utwórz moduł prebuilt_etc_host dla 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 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
    

Istnieją 2 obsługiwane metody implementowania działania niestandardowego:

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

Plik konfiguracji 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 pojedynczego adb shell polecenia. Na przykład ten fragment kodu JSON definiuje pojedynczy 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:

Serwer działań

Serwery działań zapewniają większą kontrolę nad zachowaniem działań. Serwer działań 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 zaimplementować działanie.

Serwery działań zapewniają większą kontrolę, np. utrzymywanie stanu (np. w przypadku zdarzenia przełączanego) lub nawet wykonywanie „meta-działań”, takich jak wyłączanie bieżącego urządzenia, uruchamianie większej liczby urządzeń czy uruchamianie rozszerzenia przeglądarki do nagrywania ekranu. Możliwości są ograniczone tylko tym, co zdecydujesz się zaimplementować w binarnym hoście.

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 modułu binarnego hosta.
  • buttons: tablica przycisków z tymi samymi polami co powyżej.

Po zaktualizowaniu konfiguracji JSON dodaj nazwę modułu serwera działań 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 host serwera działań powinien wykonać te czynności:

  1. Zaakceptuj 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 takie samo jak 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.