Panel kontrol cumi-cumi

Antarmuka browser WebRTC default untuk Cuttlefish menyertakan panel kontrol yang memberikan lebih banyak cara untuk berinteraksi dengan perangkat virtual.

Panel kontrol menampilkan tombol default untuk menyimulasikan perangkat fisik umum tindakan seperti tombol daya atau tombol volume, serta rotasi perangkat.

Tindakan kustom

Anda dapat menyesuaikan panel kontrol untuk menambahkan tombol lain yang memungkinkan perangkat untuk lebih mengemulasi perangkat fisik Anda. Hal ini berguna untuk menguji fitur yang unik untuk perangkat Anda, seperti tombol perangkat keras atau gestur khusus yang memicu tindakan unik di OS. Anda juga dapat menggunakan tombol khusus untuk memungkinkan pengujian lebih banyak fitur yang berfokus pada QA seperti perilaku OS ketika daya baterai perangkat lemah.

Panel kontrol Sotong default menyertakan dukungan untuk "plug in" khusus tindakan tanpa perlu memodifikasi project AOSP Cuttlefish utama. Nama perangkat virtual hanya perlu menyertakan file konfigurasi minimal untuk mulai digunakan tindakan kustom Anda. Lihat ini contoh file konfigurasi tindakan kustom.

  1. Buat file JSON yang menentukan tindakan kustom perangkat Anda. Anda dapat menempatkan file ini di direktori apa pun yang Anda miliki. Struktur file ini dijelaskan di bagian ADB shell dan Action server.

  2. Buat modul prebuilt_etc_host untuk konfigurasi JSON Anda. Pastikan bahwa sub_dir sama dengan 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. Tetapkan variabel build konfigurasi Soong di makefile produk perangkat Anda ke mengonfigurasi paket host perangkat virtual untuk menyertakan tindakan kustom Anda file konfigurasi.

    # 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
    

Ada dua metode yang didukung untuk menerapkan tindakan kustom:

  • Perintah shell ADB
  • Server tindakan

File konfigurasi JSON Anda dapat menentukan beberapa instance dari setiap jenis terlepas dari implementasi layanan.

Perintah shell ADB

Anda dapat menentukan satu tombol yang diimplementasikan dengan mengeksekusi satu perintah adb shell. Misalnya, cuplikan JSON berikut menentukan satu tombol yang meluncurkan halaman web:

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

Kolom-kolomnya adalah:

  • shell_command: Perintah yang akan dieksekusi di adb shell saat tombol sudah ditekan
  • button: Satu objek tombol dengan subkolom berikut:

Server tindakan

Server tindakan memungkinkan kontrol lebih besar atas perilaku tindakan Anda. Sebuah tindakan server adalah biner {i>host<i} yang memproses peristiwa penekanan tombol dari WebRTC menggunakan pasangan soket. WebRTC meneruskan peristiwa ke server tindakan, lalu peristiwa server tindakan memutuskan cara mengimplementasikan aksi tersebut.

Server tindakan memungkinkan kontrol yang lebih kuat, seperti mempertahankan status (seperti untuk peristiwa yang dapat diganti statusnya) atau bahkan menjalankan "meta-action" seperti membunuh perangkat saat ini, meluncurkan lebih banyak perangkat, atau memulai browser perekaman layar . Kemungkinannya hanya dibatasi oleh apa yang Anda putuskan untuk diterapkan di dalam biner {i>host<i}.

Cuplikan JSON berikut menentukan server tindakan yang memproses peristiwa di dua tombol:

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

Kolom-kolomnya adalah:

  • server: Nama modul biner host Anda
  • buttons: Array tombol, dengan subkolom yang sama seperti di atas

Setelah memperbarui konfigurasi JSON, tambahkan nama modul server tindakan ke variabel build konfigurasi Soong cvd_custom_action_servers. Contoh:

# 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

Setiap biner host server tindakan harus melakukan langkah-langkah berikut:

  1. Menerima nomor deskriptor file soket sebagai program pertama dan satu-satunya argumen.

    Soket ini dibuat oleh launch_cvd menggunakan socketpair dengan domain AF_LOCAL, jenis SOCK_STREAM, dan protokol 0.

  2. Di satu loop, coba baca 128 byte dari soket. Byte{i> <i}ini berisi peristiwa penekanan tombol yang dikirim oleh klien WebRTC dalam format command:state. command seperti yang disediakan dalam konfigurasi JSON, dan state adalah status penekanan tombol (down atau up).

  3. Menindaklanjuti peristiwa yang masuk untuk menyimulasikan tindakan kustom.