Mürekkep balığı kontrol paneli

Ahtapot için varsayılan WebRTC tarayıcı arayüzü, sanal cihazla daha fazla etkileşim kurmanızı sağlayan bir kontrol paneli içerir.

Kontrol panelinde, güç düğmesi veya ses düğmeleri gibi yaygın fiziksel cihaz işlemlerini ve cihazın döndürülmesini simüle etmek için varsayılan düğmeler bulunur.

Özel işlemler

Kontrol panelini özelleştirerek sanal cihazınızın fiziksel cihazınızı daha iyi taklit etmesini sağlayan daha fazla düğme ekleyebilirsiniz. Bu, işletim sisteminde benzersiz bir işlem tetikleyen donanım düğmesi veya özel hareket gibi cihazınıza özgü özellikleri test etmek için kullanışlıdır. Özel düğmeleri kullanarak, cihazın pili düşükken işletim sisteminizin davranışı gibi kalite kontrolü odaklı daha fazla özelliğin test edilmesini de sağlayabilirsiniz.

Varsayılan Cuttlefish kontrol paneli, ana Cuttlefish AOSP projesini değiştirmeye gerek kalmadan özel işlemleri "takma" desteği içerir. Özel işlemleri kullanmaya başlamak için sanal cihazınızın yalnızca minimum bir yapılandırma dosyası içermesi gerekir. Bu örnek özel işlem yapılandırma dosyasına bakın.

  1. Cihazınızın özel işlemlerini tanımlayan bir JSON dosyası oluşturun. Bu dosyayı sahip olduğunuz herhangi bir dizine yerleştirebilirsiniz. Bu dosyanın yapısı ADB kabuğu ve İşlem sunucusu bölümlerinde açıklanmaktadır.

  2. JSON yapılandırmanız için bir prebuilt_etc_host modülü oluşturun. sub_dir değerinin cvd_custom_action_config değerine eşit olduğundan emin olun.

    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. Sanal cihaz ana makine paketini özel işlem yapılandırma dosyanızı içerecek şekilde yapılandırmak için cihazınızın ürün makefile'inde Soong yapılandırma derleme değişkenlerini ayarlayın.

    # 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
    

Özel işlem uygulamak için desteklenen iki yöntem vardır:

  • ADB kabuk komutu
  • İşlem sunucusu

JSON yapılandırma dosyanız, her bir uygulama türü için birden çok örnek tanımlayabilir.

ADB kabuk komutu

Tek bir adb shell komutu çalıştırılarak uygulanan tek bir düğme tanımlayabilirsiniz. Örneğin, aşağıdaki JSON snippet'inde bir web sayfasını başlatan tek bir düğme tanımlanmaktadır:

{
  "shell_command":"am start -a android.intent.action.VIEW -d https://www.android.com/",
  "button":{
      "command":"web",
      "title":"Web Page",
      "icon_name":"language"
  }
}

Alanlar şunlardır:

  • shell_command: Düğmeye basıldığında adb shell içinde çalıştırılacak komut
  • button: Aşağıdaki alt alanları içeren tek bir düğme nesnesi:

İşlem sunucusu

İşlem sunucuları, işlemlerinizin davranışı üzerinde daha fazla kontrol sahibi olmanızı sağlar. İşlem sunucusu, bir soket çifti kullanarak WebRTC'den gelen düğme basma etkinliklerini dinleyen bir ana makine ikilisidir. WebRTC, etkinlikleri işlem sunucusuna iletir ve işlem sunucusu, işlemin nasıl uygulanacağına karar verir.

İşlem sunucuları, durumu koruma (ör. açma/kapatma düğmeli bir etkinlik için) veya mevcut cihazı kapatma, daha fazla cihaz başlatma ya da ekran kaydı tarayıcı uzantısı başlatma gibi "meta işlemleri" çalıştırma gibi daha güçlü bir denetim sağlar. Olasılıklar yalnızca ana makine ikili dosyası içinde neleri uygulamaya karar verdiğinizle sınırlıdır.

Aşağıdaki JSON snippet'i, iki düğmedeki etkinlikleri dinleyen bir işlem sunucusu tanımlar:

{
  "server":"cuttlefish_example_action_server",
  "buttons":[
    {
      "command":"settings",
      "title":"Quick Settings",
      "icon_name":"settings"
    },
    {
      "command":"alert",
      "title":"Do Not Disturb",
      "icon_name":"notifications_paused"
    }
  ]
}

Alanlar şunlardır:

  • server: Ana makine ikili modülünüzün adı
  • buttons: Yukarıdakiyle aynı alt alanlara sahip bir düğme dizisi

JSON yapılandırmasını güncelledikten sonra işlem sunucusu modülünün adını Soong yapılandırma derleme değişkeni cvd_custom_action_servers'e ekleyin. Örnek:

# 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

Her işlem sunucusu ana makine ikili dosyası aşağıdaki adımları gerçekleştirmelidir:

  1. İlk ve tek program bağımsız değişkeni olarak bir soket dosya tanımlayıcı numarası kabul eder.

    Bu soket, launch_cvd tarafından socketpair kullanılarak AF_LOCAL alan adı, SOCK_STREAM türü ve 0 protokolü ile oluşturulur.

  2. Döngü içinde, soketten 128 bayt okumayı deneyin. Bu baytlar, WebRTC istemcisi tarafından command:state biçiminde gönderilen düğme basma etkinliklerini içerir. command, JSON yapılandırmasında sağlandığı şekildedir ve state, düğmeye basma durumudur (down veya up).

  3. Özel işlemi simüle etmek için gelen etkinliklere göre işlem yapın.