Panduan ini memberikan ringkasan alat dan teknik penting untuk layanan dan aplikasi yang berjalan di platform SDV.
Menghubungkan ke perangkat
Alat utama untuk terhubung dan berinteraksi dengan perangkat adalah
Android Debug Bridge (adb). Pastikan adb ada di jalur sistem Anda.
Menghubungkan menggunakan jaringan
Jika perangkat terhubung ke jaringan yang sama dan Anda mengetahui alamat IP-nya, Anda dapat terhubung melalui Ethernet. Sistem kami secara eksklusif menggunakan koneksi jaringan untuk adb:
# Connect to the device using its IP address and default port
adb connect <device_ip_address>:5555
Menghubungkan ke beberapa perangkat
Untuk mengelola beberapa perangkat dari satu workstation, Anda dapat menghubungkannya melalui alamat IP yang berbeda. Jika menjalankan beberapa VM di satu host, Anda harus menetapkan port yang berbeda untuk setiap perangkat. Hal ini memerlukan konfigurasi daemon adb di setiap perangkat SDV agar memproses di port yang unik, misalnya, 5555 untuk perangkat pertama dan 5556 untuk perangkat kedua. Anda juga dapat mengonfigurasi host untuk meneruskan port tersebut ke tamu yang berbeda:
# Connect to the first device
adb connect <device_1_ip_address>:5555
# Connect to a second device
adb connect <device_2_ip_address>:5555
# Connect to a second VM on first device on different port
adb connect <device_1_ip_address>:5556
# List all connected devices to verify
adb devices
Saat menjalankan perintah adb berikutnya, Anda dapat menargetkan perangkat tertentu dengan
menggunakan flag -s dengan alamat lengkapnya (ip:port):
# Run a shell command on the second VM on first device in the above example
adb -s <device_1_ip_address>:5556 shell
Melihat log
Jika layanan gagal atau berperilaku tidak terduga, periksa log terlebih dahulu.
Menggunakan logcat (log Android)
logcat menampilkan log dari layanan sistem, agen, dan paket layanan:
# View all logs in real-time
adb logcat
# Filter logs by a specific tag (e.g., the name of your service)
adb logcat -s MyServiceTag
# Filter logs by priority (V: Verbose, D: Debug, I: Info, W: Warn, E: Error, F: Fatal)
# This shows only Error and Fatal messages for a specific tag
adb logcat MyServiceTag:E *:S
# Clear old logs before viewing new ones
adb logcat -c && adb logcat
# Show all logs and return
adb logcat -d
# Color logs by level
adb logcat -v color
# Show timestamps as time since boot
adb logcat -v monotonic
Menggunakan dmesg (log kernel)
dmesg menampilkan log dari kernel Linux. Hal ini penting untuk men-debug hal berikut:
- Masalah hardware dan driver
- Kernel panic
- Penolakan SELinux (
avc: denied) - juga ditampilkan di logcat
# View all kernel messages
adb shell dmesg
# Follow kernel messages in real-time
adb shell dmesg -w
Mengakses log di Cuttlefish
Saat berjalan di perangkat virtual Cuttlefish, Anda dapat langsung mengakses file log dari sistem file mesin host. Hal ini sangat berguna jika adb tidak tersedia. Saat Anda memulai Cuttlefish, Cuttlefish akan menampilkan semua jalur penelusuran bug, dan Anda juga dapat mencarinya menggunakan cvd fleet untuk semua instance yang sedang berjalan.
- Logcat (log Android):
cuttlefish/instances/cvd-1/logs/logcat - Log kernel:
cuttlefish/instances/cvd-1/logs/kernel.log - Log peluncur Cuttlefish:
cuttlefish/instances/cvd-1/logs/launcher.log(berguna untuk men-debug lingkungan Cuttlefish itu sendiri)
Anda dapat menggunakan alat command line standar seperti cat, less, atau tail -f untuk
melihat file ini secara real time.
Berinteraksi dengan shell dan sistem file
Dapatkan akses shell untuk menjalankan perintah langsung di perangkat, memeriksa status proses, dan menjelajahi sistem file:
# Open an interactive shell on the device
adb shell
# From within the shell, you can check running processes
ps -A
# Or check the status of a specific service managed by init
getprop init.svc.<service_name>
Melakukan operasi sistem file
Gunakan adb push dan adb pull untuk memindahkan file antara mesin host dan perangkat. Gunakan ini untuk men-deploy skrip pengujian, mengupdate konfigurasi, atau mengambil dump error:
# Push a file from your computer to the device
adb push my_local_file.txt /data/local/tmp/
# Pull a file from the device to your computer
adb pull /data/tombstones/tombstone_00 .
Men-debug aplikasi (C++/Rust)
Anda dapat men-debug aplikasi secara online atau offline.
Menggunakan lldb untuk proses debug langsung
lldb adalah debugger default di Android Studio dan sering kali lebih disukai untuk
pengembangan C++ dan Rust modern.
Ikuti langkah-langkah penyiapan berikut:
Mulai ulang adb untuk mengizinkan izin root (diperlukan untuk penerusan). Gunakan ini untuk menyiapkan penerusan port. Di host, jalankan:
adb rootJika biner memiliki simbol debug, kirim versi yang tidak dihilangkan. Anda dapat menemukan versi yang tidak di-strip di
out/target/product/[SDV_FLAVOR]/symbols/[PARTITION]/bin/[EXECUTABLE]. Misalnya, untuk menguploadrpcagentdarisystem_extdansdv_core_cf, jalankan:adb push out/target/product/sdv_core_cf/symbols/system_ext/bin/rpcagent /data/local/tmpSekarang versi yang tidak di-strip ada di
/data/local/tmp.Hubungkan dengan klien LLDB menggunakan skrip praktis
lldbclient.py:# Run and connect a binary on device, run on host: lldbclient.py -r /data/local/tmp/rpcagent # Connect to an existing process with PID 2759 lldbclient.py -p 2759Skrip ini menghubungkan lldb dari jarak jauh. Untuk semua flag yang tersedia, jalankan
lldbclient.py. Lihat dokumentasi IDE Anda untuk menghubungkannya ke lldb.
Menganalisis dump error (tanda peringatan)
Saat layanan mengalami error, file tombstone akan dibuat di /data/tombstones/.
File ini berisi stack trace, peta memori, dan informasi penting lainnya.
Tarik file penanda, lalu gunakan alat yang mendukung simbol (seperti lldb atau skrip khusus) untuk menganalisisnya dengan versi biner yang tidak di-strip.
Menganalisis performa
SDV mendukung beberapa alat untuk pengukuran performa.
Memeriksa penggunaan CPU dan memori
top: Memberikan tampilan real-time dari proses yang sedang berjalan yang diurutkan berdasarkan penggunaan CPU.adb shell top -m 10 # Show top 10 processesprocrank: Memberikan perincian mendetail tentang penggunaan memori untuk proses tertentu atau seluruh sistem.adb shell procrank
Menggunakan dumpsys untuk status layanan
dumpsys adalah alat canggih untuk membuat kueri status internal layanan sistem Android apa pun.
# List all available services
adb shell dumpsys -l
# Dump the state of a specific service or agent
adb shell dumpsys <service_name>
Menggunakan torq untuk analisis performa
torq adalah alat command line yang menyederhanakan tugas pembuatan profil dan pelacakan di Android. Alat ini memungkinkan Anda menjalankan Simpleperf, Perfetto, dan tugas umum lainnya selama analisis performa sistem.
Menggunakan Perfetto untuk pelacakan
Perfetto adalah alat standar untuk pelacakan di seluruh sistem di Android. Perfetto memungkinkan Anda merekam peristiwa sistem, titik pelacakan tingkat aplikasi, dan penghitung performa, serta memvisualisasikannya pada linimasa.
Langkah-langkah utama:
- Tambahkan titik rekaman aktivitas dalam kode C++ atau Rust Anda:
- C++: Gunakan Perfetto SDK dengan makro
TRACE_EVENT. - Rust: Gunakan crate
tracing, yang memancarkan peristiwa ATrace yang kompatibel dengan Perfetto.
- C++: Gunakan Perfetto SDK dengan makro
- Buat file konfigurasi textproto untuk menentukan sumber data (misalnya,
ftrace,track_event), kategori, dan tag. - Gunakan skrip
record_android_trace(external/perfetto/tools/record_android_trace) dengan file konfigurasi Anda untuk merekam aktivitas dari perangkat. - Buka file rekaman aktivitas yang dibuat di UI Web Perfetto untuk menganalisis perilaku sistem, mengidentifikasi hambatan, dan memahami interaksi layanan.
Untuk mengetahui petunjuk mendetail tentang instrumentasi, konfigurasi, dan pengumpulan, lihat Menggunakan pelacakan untuk mendapatkan insight tentang performa sistem.
Menggunakan Simpleperf untuk pembuatan profil
Simpleperf adalah alat command line serbaguna untuk pembuatan profil performa di Android, mirip dengan perf Linux.
Kasus penggunaan umum:
- Pembuatan profil CPU: Mengidentifikasi fungsi yang menggunakan waktu CPU paling banyak.
- Analisis off-CPU: Analisis alasan thread dalam status tidur atau diblokir.
- Penghitung hardware: Akses penghitung performa hardware.
Contoh perintah:
# Go to simpleperf scripts
cd system/extras/simpleperf/scripts
# Profile system for 20 seconds and record call graph
./app_profiler.py --system_wide -r "--call-graph fp --duration 20"
# Record a profile for a specific process (PID 1)
./app_profiler.py --pid 1 -r "--call-graph fp --duration 5"
# Pull the profile data
adb pull /data/local/tmp/perf.data .
# Generate a report with symbol resolution
./report_html.py --add_source_code --source_dirs $ANDROID_BUILD_TOP --add_disassembly -o report.html
Simpleperf menawarkan lebih banyak peristiwa dan opsi. Lihat panduan Simpleperf untuk dokumentasi yang komprehensif.
Penolakan SELinux
Gejala: Layanan Anda gagal dimulai, mengakses file, atau menggunakan kemampuan,
dan Anda melihat pesan avc: denied di dmesg atau logcat.
[ 123.456] avc: denied { read } for pid=789 comm="my_service" name="some_file" dev="sda1" ino=123 scontext=u:r:my_service_t:s0 tcontext=u:object_r:some_file_t:s0 tclass=file permissive=0
Debug cepat (khusus pengembangan)
Anda dapat menonaktifkan sementara penerapan SELinux untuk melihat apakah masalahnya telah teratasi. Hal ini mengonfirmasi bahwa masalah disebabkan oleh aturan kebijakan SELinux yang tidak ada.
# Disabling SELinux requires root permission
adb root
# Set SELinux to permissive mode
adb shell setenforce 0
# Check the current mode (should return "Permissive")
adb shell getenforce
Perbaikan: Alat audit2allow dari hierarki sumber Android pada pesan penolakan. Tindakan ini akan membuat aturan kebijakan .te yang benar untuk ditambahkan ke konfigurasi SELinux perangkat Anda.