Mürekkep balığı kontrol paneli

Cuttlefish'in varsayılan WebRTC tarayıcı arayüzünde, sanal cihazla daha fazla etkileşim kurmanızı sağlayan bir kontrol paneli bulunur.

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

Özel işlemler

Sanal cihazınızın fiziksel cihazınızı daha yakından taklit etmesini sağlayan daha fazla düğme eklemek için kontrol panelini özelleştirebilirsiniz. Bu özellik, cihazınıza özgü özellikleri (ör. işletim sisteminde benzersiz bir işlemi tetikleyen donanım düğmesi veya özel hareket) test etmek için kullanışlıdır. Ayrıca, cihazın pili azaldığında işletim sisteminizin davranışı gibi kalite kontrol odaklı daha fazla özelliği test etmek için özel düğmeleri de kullanabilirsiniz.

Varsayılan Cuttlefish kontrol paneli, ana Cuttlefish AOSP projesini değiştirmenize gerek kalmadan özel işlemlerin "takılmasını" destekler. Özel işlemleri kullanmaya başlamak için sanal cihazınızda yalnızca minimum yapılandırma dosyası bulunmalıdır. 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çıklanmıştı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'ında 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 bir işlemi 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ünün birden fazla örneğini tanımlayabilir.

ADB kabuk komutu

Tek bir adb shell komutu yürütülerek uygulanan tek bir düğme tanımlayabilirsiniz. Örneğin, aşağıdaki JSON snippet'i bir web sayfasını başlatan tek bir düğmeyi tanımlar:

{
  "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 yürütülecek 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 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. İşlem sunucusu da işlemin nasıl uygulanacağına karar verir.

İşlem sunucuları, durumu koruma (ör. açılıp kapatılabilen bir etkinlik için) veya hatta 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ü kontrol sağlar. Olanaklar yalnızca ana makine ikili dosyasında uygulamaya karar verdiğiniz özelliklerle sınırlıdır.

Aşağıdaki JSON snippet'i, iki düğmedeki etkinlikleri dinleyen bir işlem sunucusunu 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 program 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, Soong yapılandırma derleme değişkenine cvd_custom_action_servers işlem sunucusu modülünün adını ekleyin. Örneğin:

# 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 ikilisi aşağıdaki adımları gerçekleştirmelidir:

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

    Bu yuva, launch_cvd tarafından socketpair kullanılarak oluşturulmuştur. Alan AF_LOCAL, tür SOCK_STREAM ve protokol 0'dır.

  2. Bir döngüde, soketten 128 bayt okumaya çalışın. 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 hareket edin.