מסיבת הצלה

המשתמשים מסתמכים על הטלפונים שלהם וצריכים מכשיר תקין בכל רגע. עם זאת, לפעמים המכשירים נכנסים ללולאות הפעלה מחדש, ולכן המשתמשים שולחים כרטיסי תמיכה או פניות בנוגע לאחריות. התהליך הזה מתסכל את המשתמשים ויקר ליצרני המכשירים ולספקי הסלולר.

‫Android מגרסה 8.0 (רמת API‏ 26) ואילך כולל תכונה שמפעילה תהליך שחזור כשהיא מזהה רכיבי מערכת מרכזיים שנתקעו בלולאות קריסה. כשמתקבל האות הזה, התכונה 'צוות חילוץ' מבצעת סדרה של פעולות כדי לשחזר את המכשיר. כמוצא אחרון, Rescue Party מפעיל מחדש את המכשיר במצב שחזור (recovery) ומבקש מהמשתמש לבצע איפוס להגדרות המקוריות.

הטמעה

התכונה Rescue Party מופעלת כברירת מחדל וההטמעה שלה נמצאת ב-/services/core/java/com/android/server/RescueParty.java. הכלי Rescue Party מקבל מידע על אירועי אתחול וקריסה, ומתחיל לפעול אם:

  • המכשיר system_server מופעל מחדש יותר מחמש פעמים בחמש דקות.
  • אפליקציית מערכת קבועה קורסת יותר מחמש פעמים ב-30 שניות.

כש-Rescue Party מזהה אחד מהמצבים האלה, הוא מעביר את המכשיר לרמת ההצלה הבאה, מעבד את המשימה שמשויכת לרמה הזו ומאפשר למכשיר להמשיך כדי לבדוק אם הוא חוזר לפעולה. בכל רמה, הפעולות שהכלי מבצע כדי לנקות או לאפס את המחשב הן יותר אגרסיביות. ברמה האחרונה, המשתמש מתבקש לאפס את המכשיר להגדרות המקוריות.

לא נדרשת תמיכה מיוחדת בחומרה כדי להשתמש ב-Rescue Party. אם מיושמת מערכת שחזור במכשיר, היא צריכה להגיב לפקודה --prompt_and_wipe_data, ולספק למשתמשים דרך לאשר את השמדת נתוני המשתמש לפני שממשיכים. מערכת השחזור צריכה גם לתת למשתמש את האפשרות לנסות להפעיל מחדש את המכשיר.

מכיוון שכל רמת חילוץ יכולה להוסיף עד חמש דקות לפני שהמכשיר חוזר לפעולה, יצרני מכשירים לא צריכים להוסיף רמות חילוץ בהתאמה אישית. ככל שהזמן שבו המכשיר לא תקין ארוך יותר, כך גדל הסיכוי שהמשתמשים יפנו לתמיכה או יבדקו את האחריות במקום לנסות לתקן את המכשיר בעצמם.

אימות

הכלי Rescue Party מדכא את כל אירועי החילוץ כשיש למכשיר חיבור נתונים פעיל באמצעות USB, כי זה אות חזק לכך שמישהו מנפה את באגים במכשיר.

כדי לבטל את ההסתרה הזו, מריצים את הפקודה:

adb shell setprop persist.sys.enable_rescue 1

משם, מפעילים לולאת קריסה של המערכת או של ממשק המשתמש:

  • כדי להפעיל לולאת קריסה ברמה נמוכה של system_server, מריצים את הפקודה:

    adb shell setprop debug.crash_system 1
    adb shell stop
    adb shell start
  • כדי להפעיל לולאת קריסה של SystemUI ברמה בינונית, מריצים את הפקודה:

    adb shell setprop debug.crash_sysui 1

שני סוגי הלולאות שגורמות לקריסה מפעילות את הלוגיקה של החילוץ. בנוסף, Rescue Party מתעד את כל פעולות השחזור ביומני PackageManager הקבועים שמאוחסנים בכתובת /data/system/uiderrors.txt, כדי שאפשר יהיה לבדוק ולנפות באגים בהמשך. דוחות על באגים כוללים גם את היומנים הקבועים האלה בקטע Package warning messages.