אפליקציות ללא התקנה הן תכונה מרכזית ב-Android 10, ולכן חשוב שהן יפעלו כמו שצריך. אפליקציות מיידיות מותקנות באופן משתמע, ולכן יש להן קבוצה מוגבלת של יכולות והן פועלות בארגז חול (sandbox) אבטחה עם הגבלות חמורות יותר. בגלל אופי ההגבלות האלה, כל חלק במערכת עלול לא לפעול כמו שצריך עם אפליקציות מיידיות. נוצרת קבוצת משנה של בדיקות CTS כדי לוודא שהתנהגויות שמותר להן לפעול באפליקציות ללא התקנה פועלות. הרעיון המרכזי הוא לצמצם את הגדלת הגודל של CTS על ידי בידוד קבוצת הבדיקות המינימלית להעברה. המשמעות של CTS שמופעלת במצב אפליקציות ללא התקנה היא התקנה של ה-APK לבדיקה כאפליקציה ללא התקנה והרצת הבדיקות.
הגבלות על אפליקציות ללא התקנה
משתמשים לא מתקינים אפליקציות מיידיות, ולכן הן פועלות בארגז חול מוגבל עם ההגבלות הבאות:
- יכול להכיל רק הרשאות מסוימות.
- לא ניתן לראות אפליקציות אחרות, אלא אם האפליקציות האלה מסומנות כגלויה לאפליקציות ללא התקנה.
- יש גישה רק להגדרות מערכת מסוימות.
- יש גישה רק למאפייני מערכת מסוימים.
- לא ניתן לחשוף שירותים/ספקים.
- יכולים לשלוח ולקבל הודעות עם כללים מיוחדים לגבי שידורים.
בנוסף, אפליקציות מיידיות צריכות להביע הסכמה לאפשר לארגז החול החדש לאבטחה להוסיף עוד הגבלות. המגוון הרחב הזה של התנהגויות שונות לגבי אפליקציות ללא התקנה חוצה את כל הפלטפורמה, כך שצריכה להיות דרך לוודא שאפליקציות ללא התקנה פועלות כמו שצריך בכל המכשירים בסביבה העסקית.
הבדיקות שפועלות במצב אפליקציות ללא התקנה
לא לכל המודולים של CTS יש בדיקות שרלוונטיות לאפליקציות ללא התקנה. אם לפונקציונליות שנבדקת על ידי המודול יש אינטראקציה עם שרת המערכת, צריך להריץ את הבדיקות האלה במצב Instant Apps. לדוגמה, בדיקות OpenGL לא מבצעות אינטראקציה עם שרת המערכת, ולכן אין צורך להריץ אותן במצב אפליקציות מיידיות. לעומת זאת, בדיקות הנגישות מבצעות אינטראקציה עם שרת המערכת, ולכן צריך להריץ אותן במצב אפליקציות מיידיות.
בנוסף לזיהוי המודולים הרלוונטיים, המשתמשים צריכים לקבוע אילו בדיקות במודולים האלה רלוונטיות. לדוגמה, בדיקת התנהגויות ספציפיות לשירות בארכיטקטורה שניתן לחבר (למשל, AccessibilityService) לא רלוונטית למצב של אפליקציות מיידיות, כי אפליקציות מיידיות לא יכולות לחשוף שירותים לאפליקציות אחרות (כולל הפלטפורמה). לעומת זאת, בדיקות לאימות התנהגויות בצד האפליקציה רלוונטיות למצב של אפליקציות מיידיות. דוגמה נוספת היא בדיקה שמאמתת שהתנהגויות שמבוססות על הרשאה שאפליקציה ללא התקנה לא יכולה לקבל לא רלוונטיות במצב של אפליקציה ללא התקנה. יש קבוצה של בדיקות שחלות רק על אפליקציות מיידיות, שמאמתות את הכללים לגבי האופן שבו הן פועלות. לדוגמה, לא לחשוף שירותים או לא לראות אפליקציות אחרות. בדרך כלל, הקוד הזה כבר נכתב ולא נדרש תהליך העברה.
בדיקת כשלים במצב של אפליקציות ללא התקנה
אם הבדיקה נכשלת כי היא מאמתת פונקציונליות שאפליקציות ללא התקנה לא יכולות לגשת אליה, הבדיקה לא רלוונטית במצב של אפליקציות ללא התקנה. כדי לסמן שהבדיקה תפעל רק במצב 'אפליקציה מלאה', מוסיפים לה את הערה @AppModeFull
. אפשר להחיל את ההערה הזו ברמת הכיתה כדי להחריג את כל המבחנים שבה.
אם הבדיקה נכשלת כי חלק מהפונקציונליות שזמינה לאפליקציות ללא התקנה לא תקינה, עליכם לדווח על באג.
פתרון בעיות
אם הבדיקה נכשלת עם השגיאה Failed to install MyCtsModule.apk on DEVICE. הסיבה: ' -116', מחפשים הודעות של PackageManager ב-Logcat. לדוגמה, אם מופיעה ההודעה Can't replace Full App with Instant App: your_app, קודם צריך להסיר את האפליקציה באמצעות adb.