החל מ-Android 9 (רמת API 28), הפלטפורמה מגבילה הממשקים שהאפליקציה יכולה להשתמש בהם. ההגבלות האלה חלות בכל פעם שהאפליקציה מפנה ממשק שאינו SDK או מנסה לקבל את הכינוי שלו באמצעות השתקפות או JNI. ההגבלות האלה הופעלו כדי לעזור לשפר את המשתמש והמפתח ולצמצם את הסיכון לקריסות של משתמשים ולהשקות של מקרי חירום למפתחים. למידע נוסף על ההחלטה הזו אפשר לעיין במאמר שיפור היציבות על ידי צמצום השימוש בממשקים שאינם SDK.
הבחנה בין ממשק SDK לממשקים שאינם SDK
באופן כללי, ממשקי SDK ציבוריים הם ממשקי ה-SDK המתועדים אינדקס החבילות של framework של Android. הטיפול בממשקים שאינם SDK הוא פרטי הטמעה שה-API מפשט, כך שהממשקים האלה עשוי להשתנות ללא הודעה מוקדמת.
כדי להימנע מקריסות ומהתנהגות לא צפויה, מומלץ באפליקציות להשתמש רק באופן רשמי לחלקים המתועדים של הכיתות ב-SDK. כלומר, אסור לך שיטות גישה או שדות שלא רשומים ב-SDK בזמן אינטראקציה עם באמצעות מנגנונים כמו התבוננות.
רשימות API שאינן SDK
בכל גרסה של Android, קיימת הגבלה על ממשקים נוספים שאינם מבוססים על SDK. רביעי המגבלות האלה יכולות להשפיע על תהליך העבודה שלכם, לוודא שיש לכם את הכלים לזיהוי שימוש בממשקים שאינם מבוססים על ערכות SDK, הזדמנות לשלוח לנו משוב ולתת לנו זמן לתכנן ולהתאים את המדיניות החדשה.
כדי לצמצם את ההשפעה של הגבלות ללא ערכות SDK על תהליך הפיתוח, ממשקים שאינם SDK מחולקים לרשימות שמגדירות את מידת היעילות שבה השימוש שלהם מוגבלת בהתאם לרמת ה-API המטורגטת. הטבלה הבאה מתארת כל אחת מהרשימות הבאות:
רשימה | תגי קוד | תיאור |
---|---|---|
רשימת חסימה |
|
ממשקים שאינם SDK שאי אפשר להשתמש בהם, ללא קשר רמת ה-API המטורגטת. אם האפליקציה שלך מנסה לגשת לאחד מהממשקים האלה, המערכת יוצרת שגיאה. |
חסימה מותנית |
|
החל מ-Android 9 (רמת API 28), בכל רמת API אין SDK ממשקים שמוגבלים כשאפליקציה מטרגטת את רמת ה-API הזו. התוויות האלה מסומנות ברמת ה-API המקסימלית
( אם האפליקציה מנסה לגשת לממשק שמוגבל עבור ברמת ה-API לטירגוט, המערכת פועל כאילו ה-API הוא חלק רשימת החסימה. |
המכשיר לא נתמך |
|
ממשקים שאינם מוגבלים ל-SDK והאפליקציה שלך יכולה להשתמש בהם. הערה
עם זאת, שהממשקים האלה לא נתמכים
עשוי להשתנות ללא הודעה מוקדמת. צריך לצפות מהממשקים האלה
תיחסם באופן מותנה בגרסאות עתידיות של Android
רשימה: max-target-x . |
SDK |
|
ממשקים שניתן להשתמש בהם בחינם ונתמכים עכשיו כחלק מסגרת Android מתועדת באופן רשמי אינדקס חבילות. |
ממשקי API לבדיקה |
|
ממשקים שמשמשים לבדיקת מערכת פנימית, כמו ממשקי API לאפשר בדיקות באמצעות הכלי לבדיקת תאימות (CTS). ממשקי ה-API לבדיקה לא חלק מה-SDK. נתחיל בעוד Android 11 (רמת API 30), ממשקי ה-API לבדיקה נכללים ברשימת החסימה, לכן אפליקציות לא מורשות להשתמש בהם ללא קשר לרמת ה-API המטורגטת. הכול ממשקי ה-API לבדיקה אינם נתמכים ועשויים להשתנות ללא הודעה מוקדמת, ללא קשר של רמת ה-API של הפלטפורמה. |
אפשר להשתמש בממשקים מסוימים שאינם SDK (בהתאם ל-API המטורגט של האפליקציה ), שימוש בשיטות או בשדה שאינם SDK תמיד עלול לגרום לשיבושים גבוהים. באפליקציה שלך. אם האפליקציה שלך מסתמכת על ממשקים שאינם SDK, יש להתחיל לתכנן לעבור לממשקי SDK או לחלופות אחרות. אם לא מוצאים במקום להשתמש בממשק שאינו SDK עבור תכונה באפליקציה שלכם, צריך לבקש ממשק API ציבורי חדש.
איך בודקים לאיזו רשימה שייך הממשק
הרשימות של הממשקים שאינם SDK נוצרות כחלק מהפלטפורמה. לצפייה לקבלת מידע על כל גרסת Android.
15 Android
ל-Android 15 (רמת API 35), אפשר להוריד את הקובץ הבא שמתאר כל הממשקים שאינם SDK והרשימות התואמות שלהם:
קובץ: hiddenapi-flags.csv
סיכום ביקורת (checksum) SHA-256:
40134e205e58922a708c453726b279a296e6a1f34a988abd90cec0f3432ea5a9
לקבלת מידע נוסף על השינויים ברשימה של ממשקי API שאינם SDK ב-Android 15, תוכלו להיעזר במאמר עדכונים להגבלות על ממשק שאינו SDK ב-Android 15.
Android 14
ל-Android 14 (רמת API 34), אפשר להוריד את הקובץ הבא שמתאר כל הממשקים שאינם SDK והרשימות התואמות שלהם:
קובץ: hiddenapi-flags.csv
סיכום ביקורת (checksum) SHA-256:
7e00db074cbe51c51ff4b411f7b48e98692951395c5c17d069c822cc1d0eae0f
לקבלת מידע נוסף על השינויים ברשימה של ממשקי API שאינם SDK ב-Android 14, תוכלו להיעזר במאמר עדכונים להגבלות על ממשק שאינו SDK ב-Android 14.
Android 13
ל-Android 13 (רמת API 33), אפשר להוריד את הקובץ הבא שמתאר כל הממשקים שאינם SDK והרשימות התואמות שלהם:
קובץ: hiddenapi-flags.csv
סיכום ביקורת (checksum) SHA-256:
233a277aa8ac475b6df61bffd95665d86aac6eb2ad187b90bf42a98f5f2a11a3
לקבלת מידע נוסף על השינויים ברשימה של ממשקי API שאינם SDK ב-Android 13, כולל הצעות לחלופות זמינות של API ציבורי עבור ממשקי API שניתנים באופן מותנה חסומות ב-Android 13. מידע נוסף זמין במאמר עדכונים לממשק שאינו SDK הגבלות ב-Android 13.
12 Android
ל-Android 12 (רמת API 31), אפשר להוריד את הקובץ הבא שמתאר כל הממשקים שאינם SDK והרשימות התואמות שלהם:
קובץ: hiddenapi-flags.csv
סיכום ביקורת (checksum) SHA-256:
40674ff4291eb268f86561bf687e69dbd013df9ec9531a460404532a4ac9a761
לקבלת מידע נוסף על השינויים ברשימה של ממשקי API שאינם SDK ב-Android 12, כולל הצעות לחלופות זמינות של API ציבורי עבור ממשקי API שניתנים באופן מותנה חסומות ב-Android 12, אפשר לעיין ברשימת השינויים עבור Android 12.
Android 11
ל-Android 11 (רמת API 30), אפשר להוריד את הקובץ הבא מתארת את כל הממשקים שאינם SDK ואת הרשימות התואמות שלהם:
קובץ: hiddenapi-flags.csv
סיכום ביקורת (checksum) SHA-256:
a19d839f4f61dc9c94960ae977b2e0f3eb30f880ba1ffe5108e790010b477a56
אפשר לקרוא מידע נוסף על השינויים ברשימה של ממשקי API שאינם SDK ב-Android 11, כולל הצעות לחלופות זמינות של API ציבורי עבור ממשקי API שחסומים באופן מותנה ב- Android 11. מידע נוסף זמין במאמר רשימת השינויים ב-Android 11.
10 Android
ל-Android 10 (רמת API 29), אפשר להוריד את הקובץ הבא מתארת את כל הממשקים שאינם SDK ואת הרשימות התואמות שלהם:
קובץ: hiddenapi-flags.csv
סיכום ביקורת (checksum) SHA-256:
f22a59c215e752777a114bd9b07b0b6b4aedfc8e49e6efca0f99681771c5bfeb
אפשר לקרוא מידע נוסף על השינויים ברשימת ה-API שאינם SDK ב-Android 10, כולל הצעות לחלופות זמינות של API ציבורי עבור ממשקי API שחסומים באופן מותנה ב- מידע נוסף על Android 10 זמין במאמר רשימת השינויים ב-Android 10.
9 Android
ל-Android 9 (רמת API 28), קובץ הטקסט הבא מכיל את הרשימה של
ממשקי API שאינם SDK שאינם מוגבלים (מופיעים באפור):
hiddenapi-light-greylist.txt
רשימת החסימה (blacklist
) והרשימה של ממשקי API החסומים באופן מותנה (אפור כהה
נגזרות בזמן ה-build.
יצירת רשימות מ-AOSP
כשעובדים עם AOSP, אפשר ליצור קובץ hiddenapi-flags.csv
שכולל את כל הממשקים שאינם SDK ואת הרשימות התואמות שלהם. כדי לעשות את זה,
מורידים את המקור AOSP ומריצים את הפקודה הבאה:
m out/soong/hiddenapi/hiddenapi-flags.csv
לאחר מכן ניתן למצוא את הקובץ במיקום הבא:
out/soong/hiddenapi/hiddenapi-flags.csv
ההתנהגות הצפויה כשניגשים לממשקים מוגבלים שאינם SDK
בטבלה הבאה מתוארת ההתנהגות הצפויה אם האפליקציה שלכם מנסה לגשת לממשק שאינו SDK שנכלל ברשימת החסימה.
אמצעי גישה | התוצאה |
---|---|
הוראה של Dalvik שמתייחסת לשדה | זריקה של NoSuchFieldError |
הוראה של Dalvik שמתייחסת לשיטה | זריקה של NoSuchMethodError |
השתקפות באמצעות Class.getDeclaredField() או Class.getField() |
זריקה של NoSuchFieldException |
השתקפות באמצעות Class.getDeclaredMethod() , Class.getMethod() |
זריקה של NoSuchMethodException |
השתקפות באמצעות Class.getDeclaredFields() , Class.getFields() |
רכיבים שאינם SDK לא מופיעים בתוצאות |
השתקפות באמצעות Class.getDeclaredMethods() , Class.getMethods() |
רכיבים שאינם SDK לא מופיעים בתוצאות |
JNI באמצעות env->GetFieldID() |
NULL הוחזרו, הוקצו NoSuchFieldError |
JNI באמצעות env->GetMethodID() |
NULL הוחזרו, הוקצו NoSuchMethodError |
בדיקת האפליקציה לממשקים שאינם SDK
יש כמה שיטות לבדיקת ממשקים שאינם SDK: באפליקציה שלך.
בדיקה באמצעות אפליקציה שניתנת לניפוי באגים
כדי לבדוק ממשקים שאינם SDK, אפשר לפתח ולהפעיל אפליקציה שניתנת לניפוי באגים במכשיר או באמולטור עם Android 9 (רמת API 28) או גבוהה יותר. צריך לוודא שהמכשיר או האמולטור שבו משתמשים תואמים רמת ה-API המטורגטת של האפליקציה.
בזמן בדיקת האפליקציה, המערכת מדפיסה הודעה ביומן אם האפליקציה ניגשת לממשקים מסוימים שאינם SDK. יש לך אפשרות לבדוק את הודעות היומן של האפליקציה כדי למצוא את הפרטים הבאים:
- הסיווג, השם והסוג המצהירים (בפורמט של סביבת זמן ריצה של Android).
- אמצעי הגישה: קישור, שימוש בהשתקפות או שימוש ב-JNI.
- הרשימה שאליה שייך הממשק שאינו SDK.
אפשר להשתמש בכתובת adb logcat
כדי לגשת להודעות היומן האלה. ההודעות מופיעות מתחת
ה-PID של האפליקציה שפועלת. לדוגמה, רשומה ביומן עשויה להיראות כך:
Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)
בדיקה באמצעות StrictMode API
אפשר גם לבדוק ממשקים שאינם SDK באמצעות ה-API StrictMode
. משתמשים ב
detectNonSdkApiUsage
כדי להפעיל את האפשרות הזו. לאחר ההפעלה של
ב-API של StrictMode
, אפשר לקבל קריאה חוזרת (callback) עבור כל שימוש ב-SDK שאינו SDK
באמצעות penaltyListener
, שבו אפשר להטמיע
לטיפול. האובייקט Violation
שסופק בקריאה החוזרת נגזר
Throwable
, ודוח הקריסות המצורף מציג את ההקשר של השימוש.
בדיקה באמצעות הכלי veridex
אפשר גם להריץ את הכלי לניתוח סטטי של veridex על ה-APK. הכלי veridex סורקת את כל ה-codebase של ה-APK, כולל ספריות של צד שלישי, מדווח על שימושים בממשקים שאינם SDK שהוא מוצא.
המגבלות של הכלי veridex כוללות:
- הוא לא יכול לזהות הפעלות דרך JNI.
- הוא יכול לזהות רק קבוצת משנה של הפעלות באמצעות ההשתקפות.
- הניתוח של נתיבי קוד לא פעילים מוגבל לבדיקות ברמת ה-API.
- אפשר להריץ אותה רק במכונות שתומכות בהוראות SSE4.2 ו-POPCNT.
Windows
קבצים בינאריים מקוריים של Windows לא סופקו, אבל אפשר להפעיל את הכלי veridex עם Windows על ידי הפעלת הקבצים הבינאריים של Linux באמצעות מערכת המשנה של Windows ל-Linux (WSL). לפני שתבצעו את השלבים בקטע הזה, מתקינים את ה-WSL לבחור ב-Ubuntu כהפצה של Linux.
לאחר התקנת Ubuntu, מפעילים טרמינל של Ubuntu ולאחר מכן מבצעים את השלבים הבאים:
- מורידים את הכלי Veridex מתוך סביבת זמן הריצה המוכנה מראש של Android של מאגר הנתונים.
- מחלצים את התוכן של הקובץ
appcompat.tar.gz
. - בתיקייה שחולצה, מאתרים את הקובץ
veridex-linux.zip
ומחלצים אותו. עוברים לתיקייה שחילצתם, ואז מריצים את הפקודה הבאה, שבה
your-app.apk
הוא ה-APK שרוצים לבדוק:./appcompat.sh --dex-file=your-app.apk
macOS
כדי להפעיל את הכלי veridex ב-macOS, מבצעים את הפעולות הבאות:
- מורידים את הכלי Veridex מתוך סביבת זמן הריצה המוכנה מראש של Android של מאגר הנתונים.
- מחלצים את התוכן של הקובץ
appcompat.tar.gz
. - בתיקייה שחולצה, מאתרים את הקובץ
veridex-mac.zip
ומחלצים אותו. עוברים לתיקייה שחילצתם, ואז מריצים את הפקודה הבאה, שבה
/path-from-root/your-app.apk
הוא הנתיב ל-APK שאתם רוצים לבדוק, החל מספריית השורש של המערכת:./appcompat.sh --dex-file=/path-from-root/your-app.apk
Linux
כדי להפעיל את הכלי veridex ב-Linux, מבצעים את השלבים הבאים:
- מורידים את הכלי Veridex מתוך סביבת זמן הריצה המוכנה מראש של Android של מאגר הנתונים.
- מחלצים את התוכן של הקובץ
appcompat.tar.gz
. - בתיקייה שחולצה, מאתרים את הקובץ
veridex-linux.zip
ומחלצים אותו. עוברים לתיקייה שחילצתם, ואז מריצים את הפקודה הבאה, שבה
your-app.apk
הוא ה-APK שרוצים לבדוק:./appcompat.sh --dex-file=your-app.apk
בדיקה באמצעות הכלי לאיתור שגיאות בקוד של Android Studio
בכל פעם שאתם יוצרים את האפליקציה ב-Android Studio, הכלי לאיתור שגיאות בקוד (lint) בוחן את לזיהוי בעיות אפשריות. אם האפליקציה שלך משתמשת בממשקים שאינם SDK, ייתכן שיופיעו build שגיאות או אזהרות, בהתאם לרשימה שממשקים אלה שייכים אליה. ל.
אפשר גם להריץ את כלי איתור השגיאות בקוד משורת הפקודה או להריץ בדיקות באופן ידני בפרויקט, בתיקייה או בקובץ ספציפיים.
בדיקה באמצעות Play Console
כשמעלים את האפליקציה למסלול בדיקה ב-Play Console, האפליקציה נבדק באופן אוטומטי לאיתור בעיות פוטנציאליות, ודוח טרום-השקה שנוצר. אם האפליקציה משתמשת בממשקים שאינם SDK, יופיעו שגיאה או אזהרה בדוח טרום-השקה, בהתאם לרשימה של הממשקים האלה.
מידע נוסף זמין בקטע 'תאימות ל-Android' במאמר שימוש במצב טרום-השקה (pre-השקה) כדי לזהות בעיות.
בקשת API ציבורי חדש
אם לא ניתן למצוא חלופה לשימוש בממשק שאינו SDK עבור תכונה ב- של האפליקציה, אפשר לבקש ממשק API ציבורי חדש על ידי יצירת בקשה להוספת תכונה בכלי למעקב אחרי בעיות.
כשיוצרים בקשה להוספת תכונה, צריך לספק את הפרטים הבאים:
- איזה API לא נתמך, כולל התיאור המלא שמופיע ב-
הודעת ה-Logcat
Accessing hidden ...
. - למה צריך להשתמש בממשקי ה-API האלה, כולל פרטים על שה-API נדרש בשבילה, ולא רק בפרטים ברמה נמוכה.
- למה ממשקי API ציבוריים של SDK לא מספיקים למטרות שלך.
- כל חלופות אחרות שניסית ומדוע הן לא פתרו את הבעיה.
כשמספקים את הפרטים האלה בבקשה להוספת תכונה, אפשר להגדיל הסבירות שיוענק ממשק API ציבורי חדש.
שאלות נוספות
הקטע הזה כולל תשובות לשאלות אחרות שהמפתחים שאלות נפוצות:
שאלות כלליות
איך Google יכולה לוודא שהיא יכולה לענות על הצרכים של כל האפליקציות באמצעות הכלי למעקב אחר בעיות?
יצרנו את הרשימות הראשוניות ל-Android 9 (רמת API 28) באמצעות סטטיות ניתוח של אפליקציות שנוספו להן השיטות הבאות:
- בדיקה ידנית של האפליקציות המובילות ב-Play ובאפליקציות שלא קשורות ל-Play
- דוחות פנימיים
- איסוף אוטומטי של נתונים ממשתמשים פנימיים
- דוחות תצוגה מקדימה למפתחים
- ניתוח סטטי נוסף שנועד לכלול באופן שמרני תוצאות חיוביות מוטעות
כשאנחנו מעריכים את הרשימות של כל גרסה חדשה, אנחנו מתחשבים בשימוש ב-API וגם משוב למפתחים דרך הכלי למעקב אחר בעיות.
איך אפשר להפעיל גישה לממשקים שאינם SDK?
אפשר להפעיל במכשירי פיתוח גישה לממשקים שאינם SDK באמצעות adb פקודות לשינוי מדיניות האכיפה של ממשקי API. הפקודות שבהן משתמשים משתנות, בהתאם לרמת ה-API. לפקודות האלה לא נדרש מכשיר עם הרשאות בסיס.
- Android מגרסה 10 (רמת API 29) ואילך
כדי להפעיל את הגישה, צריך להשתמש ברכיב adb הבא
הפקודה:
adb shell settings put global hidden_api_policy 1
כדי לאפס את מדיניות האכיפה של ה-API להגדרות ברירת המחדל, צריך להשתמש הפקודה הבאה:
adb shell settings delete global hidden_api_policy
- Android 9 (רמת API 28)
כדי להפעיל את הגישה, צריך להשתמש בפקודות adb הבאות:
adb shell settings put global hidden_api_policy_pre_p_apps 1
adb shell settings put global hidden_api_policy_p_apps 1
כדי לאפס את מדיניות האכיפה של ה-API להגדרות ברירת המחדל, צריך להשתמש הפקודות הבאות:
adb shell settings delete global hidden_api_policy_pre_p_apps
adb shell settings delete global hidden_api_policy_p_apps
אפשר להגדיר את המספר השלם במדיניות האכיפה של ה-API לאחת מהאפשרויות הבאות ערכים:
- 0: השבתת כל הזיהוי של ממשקים שאינם SDK. השימוש בהגדרה הזו משבית
את כל הודעות היומן לשימוש בממשק שאינו SDK ומונעת בדיקה של
באמצעות ממשק ה-API של
StrictMode
. לא מומלץ להשתמש בהגדרה הזאת. - 1: הפעלת גישה לכל הממשקים שאינם מבוססים על SDK, אבל הדפסת הודעות יומן עם
אזהרות לגבי שימוש בממשק שאינו SDK. השימוש בהגדרה הזו מאפשר לך גם
לבדוק את האפליקציה באמצעות ממשק ה-API של
StrictMode
. - 2: חסימת השימוש בממשקים ללא ערכות SDK ששייכים לרשימת החסימה או חסומה באופן מותנה ברמת ה-API לטירגוט.
שאלות על רשימות של ממשקים שאינם SDK
איפה אפשר למצוא את רשימות ה-API ללא SDK בתמונת המערכת?
הם מקודדים בביטים של דגלי גישה בשדה ובשיטה בקובצי Platform dex. אין קובץ נפרד בתמונת המערכת המכיל את הרשימות האלה.
האם רשימות ה-API ללא SDK זהות במכשירים שונים של יצרני ציוד מקורי (OEM) עם אותן גרסאות Android?
יצרני ציוד מקורי יכולים להוסיף ממשקים משלהם לרשימת החסימה (רשימה שחורה), אבל הם לא יכולים להסיר ממשקים מרשימות של ממשקי API שאינם SDK ב-AOSP. CDD מונע שינויים כאלה ובדיקות CTS מבטיחים שסביבת זמן הריצה של Android אוכפת את הרשימה.
שאלות על התאימות של אפליקציות קשורות
האם יש הגבלה על ממשקים שאינם NDK בקוד נייטיב?
ה-SDK של Android כולל ממשקי Java. הפלטפורמה התחילה להגביל גישה לממשקים שאינם NDK בשביל קוד C/C++ מקורי ב-Android 7 (רמת API 26). למידע נוסף, אפשר לעיין במאמר שיפור היציבות באמצעות סמל C/C++ הפרטי הגבלות ב-Android N.
האם יש תוכנית כלשהי להגביל תמרון קובצי dex2oat או DEX?
אין לנו תוכניות פעילות להגבלת הגישה לקובץ הבינארי dex2oat, אבל לא מתכוונים שהפורמט של קובץ ה-DEX יהיה יציב או שהוא ממשק ציבורי את החלקים שמצוינים באופן ציבורי בפורמט Doalvik Executable. אנו שומרים לעצמנו את הזכות לשנות או להסיר את dex2oat ואת החלקים שלא צוינו. של פורמט DEX בכל שלב. כמו כן, שימו לב שקבצים נגזרים שמופקים על ידי dex2oat פורמטים כמו ODEX (שנקראים גם OAT), VDEX ו-CDEX הם לא מוגדרים.
מה קורה אם ערכת SDK חיונית של צד שלישי (למשל, ערפול קוד (obfuscator)) לא יכולה להימנע משימוש בממשקים שאינם SDK, אבל היא מתחייבת לשמור על תאימות לגרסאות עתידיות של Android? האם Android יכול לוותר על דרישות התאימות שלו במקרה כזה?
אנחנו לא מתכוונים לוותר על דרישות התאימות לפי כל SDK בנפרד. אם המיקום מפתח SDK יכול לשמור על תאימות רק בהתאם לממשקים הרשימות שלא נתמכות (לשעבר 'אפורות') צריך להתחיל לתכנן העברה אל ממשקי SDK או חלופות אחרות, ומבקשים ממשק API ציבורי חדש בכל פעם הם לא יכולים למצוא חלופה לשימוש בממשק שאינו SDK.
האם הגבלות על ממשק שאינו SDK חלות על כל האפליקציות, כולל אפליקציות מערכת ואפליקציות צד ראשון, לא רק על אפליקציות צד שלישי?
כן, אבל אנחנו מעניקים פטור לאפליקציות שנחתמו באמצעות מפתח הפלטפורמה ותמונת מערכת כלשהי
באפליקציות. חשוב לשים לב שהפטורים האלה חלים רק על אפליקציות שהן חלק מהמערכת.
תמונה (או אפליקציות מעודכנות של תמונות מערכת). הרשימה מיועדת רק לאפליקציות
שמבוססים על ממשקי ה-API של הפלטפורמה הפרטית, ולא על ממשקי ה-API של ה-SDK (כאשר
LOCAL_PRIVATE_PLATFORM_APIS := true
).