Antarmuka browser WebRTC default untuk Cuttlefish mencakup panel kontrol yang memungkinkan lebih banyak cara untuk berinteraksi dengan perangkat virtual.
Panel kontrol memiliki tombol default untuk menyimulasikan tindakan perangkat fisik umum seperti tombol daya atau tombol volume, serta rotasi perangkat.
Tindakan kustom
Anda dapat menyesuaikan panel kontrol untuk menambahkan lebih banyak tombol yang memungkinkan perangkat virtual Anda meniru perangkat fisik Anda dengan lebih akurat. Hal ini berguna untuk menguji fitur unik pada perangkat Anda, seperti tombol hardware atau gestur khusus yang memicu tindakan unik di OS. Anda juga dapat menggunakan tombol kustom untuk mengaktifkan pengujian fitur yang lebih berfokus pada QA seperti perilaku OS Anda saat baterai perangkat hampir habis.
Panel kontrol Cuttlefish default mencakup dukungan untuk "memasukkan" tindakan kustom tanpa perlu mengubah project AOSP Cuttlefish utama. Perangkat virtual Anda hanya perlu menyertakan file konfigurasi minimal untuk mulai menggunakan tindakan kustom. Lihat contoh file konfigurasi tindakan kustom ini.
Buat file JSON yang menentukan tindakan kustom perangkat Anda. Anda dapat menempatkan file ini di direktori mana pun yang Anda miliki. Struktur file ini dijelaskan di bagian shell ADB dan server Tindakan.
Buat modul
prebuilt_etc_host
untuk konfigurasi JSON Anda. Pastikansub_dir
sama dengancvd_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", }
Tetapkan variabel build konfigurasi Soong di file make produk perangkat Anda untuk mengonfigurasi paket host perangkat virtual agar menyertakan file konfigurasi tindakan kustom Anda.
# 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 penerapan.
Perintah shell ADB
Anda dapat menentukan satu tombol yang diimplementasikan dengan menjalankan 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"
}
}
Kolomnya adalah:
shell_command
: Perintah yang akan dieksekusi diadb shell
saat tombol ditekanbutton
: Objek tombol tunggal dengan sub-kolom berikut:command
: Nama unik untuk tombol inititle
: Judul teks alternatif untuk tombol iniicon_name
: Nama ikon dari https://material.io/resources/icons
Server tindakan
Server tindakan memungkinkan kontrol yang lebih besar atas perilaku tindakan Anda. Server tindakan adalah biner host yang memproses peristiwa penekanan tombol dari WebRTC menggunakan pasangan soket. WebRTC meneruskan peristiwa ke server tindakan, lalu server tindakan memutuskan cara menerapkan tindakan.
Server tindakan memungkinkan kontrol yang lebih canggih, seperti mempertahankan status (seperti untuk peristiwa yang dapat diaktifkan/dinonaktifkan) atau bahkan menjalankan "meta-tindakan" seperti menghentikan perangkat saat ini, meluncurkan lebih banyak perangkat, atau memulai ekstensi browser perekaman layar. Kemungkinannya hanya dibatasi oleh apa yang Anda putuskan untuk diterapkan di dalam biner host.
Cuplikan JSON berikut menentukan server tindakan yang memproses peristiwa pada 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"
}
]
}
Kolomnya adalah:
server
: Nama modul biner host Andabuttons
: Array tombol, dengan sub-bidang yang sama seperti di atas
Setelah mengupdate 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:
Menerima nomor deskriptor file soket sebagai argumen program pertama dan satu-satunya.
Soket ini dibuat oleh
launch_cvd
menggunakansocketpair
dengan domainAF_LOCAL
, jenisSOCK_STREAM
, dan protokol 0.Dalam loop, coba baca 128 byte dari soket. Byte ini berisi peristiwa penekanan tombol yang dikirim oleh klien WebRTC dalam format
command:state
.command
seperti yang disediakan dalam konfigurasi JSON, danstate
adalah status penekanan tombol (down
atauup
).Lakukan tindakan pada peristiwa masuk untuk menyimulasikan tindakan kustom.