Pesta Penyelamatan

Banyak pengguna yang sangat bergantung pada ponsel mereka dan memerlukan perangkat yang berfungsi setiap saat. Namun, terkadang perangkat mengalami proses reboot, yang menyebabkan pengguna mengajukan tiket dukungan atau pertanyaan garansi. Proses ini membuat frustrasi pengguna dan mahal bagi produsen dan operator perangkat.

Android 8.0 menyertakan fitur yang mengirimkan "pihak penyelamat" ketika mengetahui komponen sistem inti terjebak dalam loop error. Rescue Party kemudian melakukan eskalasi melalui serangkaian tindakan untuk memulihkan perangkat. Sebagai upaya terakhir, Rescue Party akan mem-boot ulang perangkat ke mode pemulihan dan meminta pengguna untuk melakukan reset pabrik.

Fitur penyelamatan ini tidak diwajibkan oleh Dokumen Definisi Kompatibilitas Android , namun mungkin masih berguna untuk mengurangi kasus dukungan.

Penerapan

Rescue Party diaktifkan secara default di Android 8.0, dan implementasinya ada di /services/core/java/com/android/server/RescueParty.java . Rescue Party menerima informasi tentang kejadian boot dan crash dan dimulai jika:

  • system_server restart lebih dari 5 kali dalam 5 menit.
  • Aplikasi sistem yang persisten mengalami error lebih dari 5 kali dalam 30 detik.

Ketika salah satu situasi ini terdeteksi, Pihak Penyelamat akan meningkatkan ke tingkat penyelamatan berikutnya, memproses tugas yang terkait dengan tingkat tersebut, dan membiarkan perangkat melanjutkan untuk melihat apakah perangkat pulih. Setiap level semakin agresif dalam menyelesaikan atau mengatur ulang. Level terakhir meminta pengguna untuk mereset perangkat ke setelan pabrik.

Tidak diperlukan dukungan perangkat keras khusus untuk mendukung Rescue Party. Jika diterapkan, sistem pemulihan perangkat harus merespons perintah --prompt_and_wipe_data dan perangkat harus menyediakan cara bagi pengguna untuk mengonfirmasi segala kerusakan data pengguna sebelum melanjutkan. Sistem pemulihan juga harus memberikan pengguna pilihan untuk mencoba mem-boot ulang perangkat mereka.

Karena setiap tingkat penyelamatan dapat bertambah hingga 5 menit sebelum perangkat dapat dioperasikan kembali, produsen perangkat tidak boleh menambahkan tingkat penyelamatan khusus. Meningkatnya waktu ketika perangkat tidak dapat dioperasikan membuat pengguna lebih cenderung memulai pertanyaan dukungan atau garansi daripada memulihkan sendiri perangkatnya.

Validasi

Semua peristiwa penyelamatan disembunyikan ketika perangkat memiliki koneksi data USB yang aktif karena itu merupakan sinyal kuat bahwa seseorang sedang melakukan debug pada perangkat.

Untuk mengesampingkan penindasan ini, jalankan:

adb shell setprop persist.sys.enable_rescue 1

Dari sana, Anda dapat memicu crash loop sistem atau UI.

Untuk memicu loop kerusakan system_server tingkat rendah, jalankan:

adb shell setprop debug.crash_system 1

Untuk memicu crash loop SystemUI tingkat menengah, jalankan:

adb shell setprop debug.crash_sysui 1

Kedua loop kerusakan memulai logika penyelamatan. Semua operasi penyelamatan juga dicatat ke log PackageManager persisten yang disimpan di /data/system/uiderrors.txt untuk pemeriksaan dan proses debug nanti. Log persisten ini juga disertakan dalam setiap laporan bug di bagian "Paket pesan peringatan".