1. מבוא
במסמך הזה מפורטות הדרישות שצריכות להתקיים כדי שמכשירים יהיו תואמים ל-Android 10.
השימוש במונחים MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY ו-OPTIONAL הוא בהתאם לתקן IETF שמוגדר ב-RFC2119.
במסמך הזה, 'מפתח מכשיר' או 'מפתח' הם אדם או ארגון שמפתחים פתרון חומרה/תוכנה שמריץ Android 10. 'הטמעה במכשיר' או 'הטמעה' היא פתרון החומרה או התוכנה שפותח.
כדי שמכשיר ייחשב כתואם ל-Android 10, ההטמעות של המכשיר חייבות לעמוד בדרישות שמופיעות בהגדרת התאימות הזו, כולל כל המסמכים שמשולבים באמצעות הפניה.
אם ההגדרה הזו או בדיקות התוכנה שמתוארות בקטע 10 לא ברורות, מעורפלות או לא מלאות, האחריות לוודא תאימות להטמעות קיימות מוטלת על מפתח המכשיר.
לכן, פרויקט הקוד הפתוח של Android הוא גם ההפניה וגם ההטמעה המועדפת של Android. מומלץ מאוד למפתחים של מכשירים לבסס את ההטמעות שלהם במידת האפשר על קוד המקור 'במעלה הזרם' שזמין מ-Android Open Source Project. אמנם אפשר להחליף באופן היפותטי חלק מהרכיבים ביישומים חלופיים, אבל מומלץ מאוד לא לעשות זאת, כי יהיה קשה הרבה יותר לעבור את בדיקות התוכנה. באחריות המטמיע לוודא תאימות התנהגותית מלאה להטמעה הרגילה של Android, כולל חבילת הבדיקות לתאימות (CTS) ומעבר לה. לבסוף, חשוב לציין שבמסמך הזה נאסר במפורש לבצע החלפות ושינויים מסוימים ברכיבים.
רבים ממקורות המידע שמקושרים במסמך הזה נגזרים באופן ישיר או עקיף מ-Android SDK, והם זהים מבחינת הפונקציונליות למידע שבתיעוד של ה-SDK הזה. בכל המקרים שבהם יש אי-התאמה בין הגדרת התאימות הזו או חבילת בדיקות התאימות לבין תיעוד ה-SDK, התיעוד של ה-SDK נחשב לסמכותי. כל הפרטים הטכניים שמופיעים במקורות המידע המקושרים לאורך המסמך הזה נחשבים כחלק מהגדרת התאימות הזו.
1.1 מבנה המסמך
1.1.1. דרישות לפי סוג מכשיר
בקטע 2 מפורטות כל הדרישות שחלות על סוג מכשיר ספציפי. כל קטע משנה בקטע 2 מוקדש לסוג מכשיר ספציפי.
כל שאר הדרישות, שחלות באופן אוניברסלי על כל הטמעה של מכשיר Android, מפורטות בקטעים אחרי קטע 2. במסמך הזה, הדרישות האלה נקראות "דרישות ליבה".
1.1.2. מזהה הדרישה
מזהה דרישה מוקצה לדרישות מסוג MUST.
- המזהה מוקצה רק לדרישות חובה.
- דרישות שמומלץ מאוד לעמוד בהן מסומנות ב-[SR] , אבל לא מוקצה מזהה.
- המזהה מורכב מ : מזהה סוג המכשיר – מזהה התנאי – מזהה הדרישה (לדוגמה, C-0-1).
ההגדרות של כל מזהה מפורטות בהמשך:
- מזהה סוג המכשיר (מידע נוסף זמין בקטע 2. סוגי מכשירים)
- C: ליבה (דרישות שחלות על כל הטמעה של מכשיר Android)
- H: מכשיר Android נייד
- T: מכשיר Android TV
- תשובה: הטמעה של Android Automotive
- W: Android Watch implementation
- כרטיסייה: הטמעה בטאבלט Android
- מזהה התנאי
- אם הדרישה היא ללא תנאים, המזהה הזה מוגדר כ-0.
- אם הדרישה היא מותנית, הערך 1 מוקצה לתנאי הראשון, והמספר עולה ב-1 בתוך אותו קטע ואותו סוג מכשיר.
- מזהה הדרישה
- המזהה הזה מתחיל מ-1 ועולה ב-1 בכל פעם באותו קטע ובאותו תנאי.
1.1.3. מזהה הדרישה בחלק 2
מזהה הדרישה בקטע 2 מתחיל במזהה הקטע המתאים, שאחריו מופיע מזהה הדרישה שמתואר למעלה.
- המזהה בקטע 2 מורכב מ : מזהה קטע / מזהה סוג מכשיר – מזהה תנאי – מזהה דרישה (לדוגמה, 7.4.3/A-0-1).
2. סוגי מכשירים
פרויקט הקוד הפתוח של Android מספק מחסנית תוכנה שאפשר להשתמש בה במגוון סוגים של מכשירים וגורמי צורה, אבל יש כמה סוגי מכשירים שבהם יש מערכת אקולוגית מבוססת יותר של הפצת אפליקציות.
בקטע הזה מפורטים סוגי המכשירים האלה, וגם דרישות והמלצות נוספות שרלוונטיות לכל סוג מכשיר.
כל ההטמעות במכשירי Android שלא מתאימות לאף אחד מסוגי המכשירים שמתוארים כאן עדיין צריכות לעמוד בכל הדרישות שבקטעים האחרים של הגדרת התאימות הזו.
2.1 הגדרות במכשירים
בסעיף הבא מפורטות הדרישות הספציפיות למכשירים, שכוללות את ההבדלים העיקריים בהגדרת החומרה לפי סוג המכשיר.
2.2. דרישות לגבי מכשירים ניידים
מכשיר Android נייד הוא מכשיר Android שמשתמשים בו בדרך כלל כשהוא מוחזק ביד, כמו נגן MP3, טלפון או טאבלט.
הטמעות של מכשירי Android מסווגות כ'מכשיר נייד' אם הן עומדות בכל הקריטריונים הבאים:
- להיות מחובר למקור מתח שמאפשר ניידות, כמו סוללה.
- גודל המסך באלכסון הוא בין 2.5 ל-8 אינץ'.
הדרישות הנוספות שמופיעות בהמשך הקטע הזה ספציפיות להטמעה של מכשירי Android ניידים.
2.2.1. חומרה
הטמעות במכשירים ניידים:
- [7.1.1.1/H-0-1] חובה להשתמש לפחות בצג אחד שתואם ל-Android, בגודל אלכסוני פיזי של לפחות 2.5 אינץ', וכל צג שתואם ל-Android חייב לעמוד בכל הדרישות שמתוארות במסמך הזה.
- [7.1.1.3/H-SR] מומלץ מאוד לספק למשתמשים אפשרות לשנות את גודל התצוגה (צפיפות המסך).
אם הטמעות של מכשירים ניידים טוענות לתמיכה במסכים עם טווח דינמי גבוה (HDR) באמצעות Configuration.isScreenHdr()
, הן:
- [7.1.4.5/H-1-1] חובה לפרסם תמיכה בתוספים
EGL_EXT_gl_colorspace_bt2020_pq
,EGL_EXT_surface_SMPTE2086_metadata
,EGL_EXT_surface_CTA861_3_metadata
,VK_EXT_swapchain_colorspace
ו-VK_EXT_hdr_metadata
.
הטמעות במכשירים ניידים:
- [7.1.5/H-0-1] חובה לכלול תמיכה במצב תאימות לאחור של אפליקציות, כפי שמיושם בקוד המקור הפתוח של Android. כלומר, הטמעות במכשירים לא יכולות לשנות את הטריגרים או את ערכי הסף שגורמים להפעלת מצב התאימות, והן לא יכולות לשנות את ההתנהגות של מצב התאימות עצמו.
- [7.2.1/H-0-1] חובה לכלול תמיכה באפליקציות של עורך שיטות קלט (IME) של צד שלישי.
- [7.2.3/H-0-3] חובה לספק את הפונקציה 'דף הבית' בכל המסכים שתואמים ל-Android ומספקים את מסך הבית.
- [7.2.3/H-0-4] חובה לספק את הפונקציה 'הקודם' בכל המסכים שתואמים ל-Android, ואת הפונקציה 'אחרונים' לפחות באחד מהמסכים שתואמים ל-Android.
- [7.2.3/H-0-2] חובה לשלוח לאפליקציה שבחזית גם את האירוע הרגיל וגם את האירוע של הלחיצה הארוכה על הפונקציה 'הקודם' (
KEYCODE_BACK
). המערכת לא יכולה להשתמש באירועים האלה, ואפשר להפעיל אותם מחוץ למכשיר Android (למשל, באמצעות מקלדת חומרה חיצונית שמחוברת למכשיר Android). - [7.2.4/H-0-1] חובה לתמוך בקלט ממסך מגע.
- [7.2.4/H-SR] מומלץ מאוד להפעיל את אפליקציית העזרה שנבחרה על ידי המשתמש, כלומר האפליקציה שמטמיעה את VoiceInteractionService, או פעילות שמטפלת ב-
ACTION_ASSIST
בלחיצה ארוכה עלKEYCODE_MEDIA_PLAY_PAUSE
או עלKEYCODE_HEADSETHOOK
אם הפעילות בחזית לא מטפלת באירועי הלחיצה הארוכה האלה. - [7.3.1/H-SR] מומלץ מאוד לכלול מד תאוצה ב-3 צירים.
אם הטמעות של מכשירים ניידים כוללות מד תאוצה ב-3 צירים, הן:
- [7.3.1/H-1-1] חובה לדווח על אירועים בתדירות של לפחות 100 הרץ.
אם הטמעות של מכשירים ניידים כוללות מקלט GPS/GNSS ומדווחות על היכולת לאפליקציות באמצעות android.hardware.location.gps
דגל התכונה, הן:
- [7.3.3/H-2-1] חובה לדווח על מדידות GNSS ברגע שהן נמצאות, גם אם עדיין לא דווח על מיקום שחושב מ-GPS/GNSS.
- [7.3.3/H-2-2] חובה לדווח על טווחי פסאודו ועל שיעורי טווחי פסאודו של GNSS, שבתנאים של שמיים פתוחים אחרי קביעת המיקום, בזמן שהמכשיר נייח או נע בתאוצה של פחות מ-0.2 מטר לשנייה בריבוע, מספיקים לחישוב המיקום בטווח של 20 מטרים, ולחישוב המהירות בטווח של 0.2 מטרים לשנייה, לפחות ב-95% מהזמן.
אם הטמעות של מכשירים ניידים כוללות גירוסקופ בעל 3 צירים, הן:
- [7.3.4/H-3-1] חובה לדווח על אירועים בתדירות של לפחות 100 הרץ.
- [7.3.4/H-3-2] חובה למדוד שינויים בכיוון עד 1,000 מעלות לשנייה.
הטמעות של מכשירים ניידים שיכולים לבצע שיחה קולית ולציין כל ערך מלבד PHONE_TYPE_NONE
ב-getPhoneType
:
- [7.3.8/H] המכשיר צריך לכלול חיישן קירבה.
הטמעות במכשירים ניידים:
- [7.3.11/H-SR] מומלץ לתמוך בחיישן תנוחה עם 6 דרגות חופש.
- [7.4.3/H] צריך לכלול תמיכה ב-Bluetooth וב-Bluetooth LE.
אם ההטמעות במכשירים ניידים כוללות חיבור עם תשלום לפי שימוש, הן:
- [7.4.7/H-1-1] חובה לספק את מצב חוסך הנתונים.
אם הטמעות של מכשירים ניידים כוללות מכשיר מצלמה לוגי שמציג את היכולות באמצעות CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
, הן:
- [7.5.4/H-1-1] חייב להיות שדה ראייה רגיל (FOV) כברירת מחדל, והוא חייב להיות בין 50 ל-90 מעלות.
הטמעות במכשירים ניידים:
- [7.6.1/H-0-1] חובה להקצות לפחות 4GB של אחסון לא נדיף לנתונים פרטיים של האפליקציה (כלומר, מחיצת /data).
- [7.6.1/H-0-2] המערכת חייבת להחזיר את הערך true עבור
ActivityManager.isLowRamDevice()
אם יש פחות מ-1GB של זיכרון שזמין לליבת המערכת ולמרחב המשתמש.
אם הטמעות של מכשירים ניידים מצהירות על תמיכה רק ב-ABI של 32 ביט:
-
[7.6.1/H-1-1] הזיכרון שזמין לליבה ולמרחב המשתמש חייב להיות לפחות 416MB אם התצוגה שמוגדרת כברירת מחדל משתמשת ברזולוציות של framebuffer עד qHD (לדוגמה, FWVGA).
-
[7.6.1/H-2-1] הזיכרון שזמין לליבת מערכת ההפעלה ולמרחב המשתמש חייב להיות לפחות 592MB אם התצוגה שמוגדרת כברירת מחדל משתמשת ברזולוציות של framebuffer עד HD+ (למשל HD, WSVGA).
-
[7.6.1/H-3-1] הזיכרון שזמין לליבת המערכת ולמרחב המשתמש חייב להיות לפחות 896MB אם התצוגה שמוגדרת כברירת מחדל משתמשת ברזולוציות של מאגר מסגרות עד FHD (למשל WSXGA+).
-
[7.6.1/H-4-1] הזיכרון שזמין לליבת המערכת ולמרחב המשתמש חייב להיות לפחות 1,344MB אם התצוגה שמוגדרת כברירת מחדל משתמשת ברזולוציות של מאגר מסגרות עד QHD (למשל QWXGA).
אם הטמעות של מכשירים ניידים מצהירות על תמיכה ב-ABI של 64 ביט (עם או בלי ABI של 32 ביט):
-
[7.6.1/H-5-1] הזיכרון שזמין לליבה ולמרחב המשתמש חייב להיות לפחות 816MB אם התצוגה שמוגדרת כברירת מחדל משתמשת ברזולוציות של framebuffer עד qHD (למשל FWVGA).
-
[7.6.1/H-6-1] הזיכרון שזמין לליבה ולמרחב המשתמש חייב להיות לפחות 944MB אם התצוגה שמוגדרת כברירת מחדל משתמשת ברזולוציות של מאגר מסגרות עד HD+ (למשל HD, WSVGA).
-
[7.6.1/H-7-1] הזיכרון שזמין לליבת המערכת ולמרחב המשתמש חייב להיות לפחות 1,280MB אם התצוגה שמוגדרת כברירת מחדל משתמשת ברזולוציות של מאגר מסגרות עד FHD (למשל WSXGA+).
-
[7.6.1/H-8-1] הזיכרון שזמין לליבת המערכת ולמרחב המשתמש חייב להיות לפחות 1,824MB אם המסך שמוגדר כברירת מחדל משתמש ברזולוציות של מאגר מסגרות עד QHD (למשל QWXGA).
הערה: הזיכרון שזמין לליבה ולמרחב המשתמש שצוין למעלה מתייחס למרחב הזיכרון שמוקצה בנוסף לזיכרון שכבר מוקצה לרכיבי חומרה כמו רדיו, וידאו וכו' שלא נמצאים בשליטת הליבה בהטמעות של המכשיר.
אם יישומי מכשירים ניידים כוללים זיכרון של 1GB או פחות שזמין לליבת המערכת ולמרחב המשתמש, הם:
- [7.6.1/H-9-1] חובה להצהיר על ה-feature flag
android.hardware.ram.low
. - [7.6.1/H-9-2] חובה שיהיה לפחות 1.1GB של אחסון לא נדיף לנתונים פרטיים של האפליקציה (כלומר, מחיצת /data).
אם הטמעות של מכשירים ניידים כוללות יותר מ-1GB של זיכרון שזמין לליבת המערכת ולמרחב המשתמש, הן:
- [7.6.1/H-10-1] חובה להקצות לפחות 4GB של אחסון לא נדיף לנתונים פרטיים של האפליקציה (כלומר, מחיצת /data).
- צריך להצהיר על ה-feature flag
android.hardware.ram.normal
.
הטמעות במכשירים ניידים:
- [7.6.2/H-0-1] אסור לספק אחסון משותף לאפליקציה בגודל קטן מ-1 גיגה-בייט.
- [7.7.1/H] צריך לכלול יציאת USB שתומכת במצב ציוד היקפי.
אם יישומים של מכשירים ניידים כוללים יציאת USB שתומכת במצב ציוד היקפי, הם:
- [7.7.1/H-1-1] חובה להטמיע את Android Open Accessory (AOA) API.
אם הטמעות של מכשירים ניידים כוללות יציאת USB שתומכת במצב מארח, הן:
- [7.7.2/H-1-1] חובה להטמיע את מחלקת האודיו של USB כפי שמתואר במסמכי Android SDK.
הטמעות במכשירים ניידים:
- [7.8.1/H-0-1] חובה לכלול מיקרופון.
- [7.8.2/H-0-1] חובה שיהיה פלט אודיו ושהמכשיר יצהיר על
android.hardware.audio.output
.
אם הטמעות במכשירים ניידים עומדות בכל דרישות הביצועים לתמיכה במצב VR וכוללות תמיכה במצב הזה, הן:
- [7.9.1/H-1-1] חובה להצהיר על feature flag
android.hardware.vr.high_performance
. - [7.9.1/H-1-2] חובה לכלול אפליקציה שמטמיעה את
android.service.vr.VrListenerService
שאפשר להפעיל באמצעות אפליקציות VR דרךandroid.app.Activity#setVrModeEnabled
.
אם הטמעות של מכשירים ניידים כוללות יציאת USB-C אחת או יותר במצב מארח ומיישמות (USB audio class), בנוסף לדרישות שבקטע 7.7.2, הן:
- [7.8.2.2/H-1-1] חובה לספק את מיפוי התוכנה הבא של קודי HID:
פעולה | מיפויים | הקשר | התנהגות |
---|---|---|---|
A |
HID usage page: 0x0C HID usage: 0x0CD Kernel key: KEY_PLAYPAUSE Android key: KEYCODE_MEDIA_PLAY_PAUSE
|
הפעלת מדיה |
קלט: לחיצה קצרה פלט: הפעלה או השהיה |
קלט: לחיצה ארוכה פלט: הפעלת פקודה קולית שליחה: android.speech.action.VOICE_SEARCH_HANDS_FREE אם המכשיר נעול או שהמסך שלו כבוי. שליחה של android.speech.RecognizerIntent.ACTION_WEB_SEARCH בכל מקרה אחר
|
|||
שיחה נכנסת |
קלט: לחיצה קצרה פלט: מענה לשיחה |
||
קלט: לחיצה ארוכה על פלט: דחיית השיחה |
|||
שיחה פעילה |
קלט: לחיצה קצרה פלט: סיום השיחה |
||
קלט: לחיצה ארוכה על פלט: השתקה או ביטול השתקה של המיקרופון |
|||
B |
HID usage page: 0x0C HID usage: 0x0E9 Kernel key: KEY_VOLUMEUP Android key: VOLUME_UP
|
הפעלת מדיה, שיחה פעילה |
קלט: לחיצה קצרה או ארוכה פלט: הגדלת עוצמת הקול במערכת או באוזניות |
C |
דף השימוש ב-HID: 0x0C השימוש ב-HID: 0x0EA מפתח ליבה: KEY_VOLUMEDOWN מפתח Android: VOLUME_DOWN
|
הפעלת מדיה, שיחה פעילה |
קלט: לחיצה קצרה או ארוכה פלט: עוצמת הקול של המערכת או האוזניות תוחלש |
D |
דף השימוש ב-HID: 0x0C השימוש ב-HID: 0x0CF מפתח ליבה: KEY_VOICECOMMAND מפתח Android: KEYCODE_VOICE_ASSIST
|
כל ההתראות. אפשר להפעיל אותם בכל מופע. |
קלט: לחיצה קצרה או ארוכה פלט: הפעלת פקודה קולית |
- [7.8.2.2/H-1-2] חובה להפעיל ACTION_HEADSET_PLUG כשמחברים אוזניות, אבל רק אחרי שממשקי האודיו של ה-USB ונקודות הקצה מפורטים בצורה נכונה כדי לזהות את סוג המסוף שמחובר.
כשמזוהים סוגי מסופי אודיו של USB 0x0302, הם:
- [7.8.2.2/H-2-1] המכשיר חייב לשדר את Intent ACTION_HEADSET_PLUG עם הערך 0 של התוסף microphone.
כשמזוהים סוגים של נקודות חיבור לאודיו ב-USB 0x0402, המערכת:
- [7.8.2.2/H-3-1] חובה לשדר את Intent ACTION_HEADSET_PLUG עם הערך 1 בתוספת microphone.
כשקוראים ל-API AudioManager.getDevices() בזמן שהציוד ההיקפי בחיבור USB מחובר:
-
[7.8.2.2/H-4-1] חייבת להיות רשימה של מכשיר מהסוג AudioDeviceInfo.TYPE_USB_HEADSET והתפקיד isSink() אם השדה של סוג מסוף ה-USB לאודיו הוא 0x0302.
-
[7.8.2.2/H-4-2] חייב לכלול רשימה של מכשיר מסוג AudioDeviceInfo.TYPE_USB_HEADSET והתפקיד isSink() אם שדה סוג מסוף האודיו של ה-USB הוא 0x0402.
-
[7.8.2.2/H-4-3] חייב לכלול רשימה של מכשיר מסוג AudioDeviceInfo.TYPE_USB_HEADSET והתפקיד הוא isSource() אם השדה של סוג מסוף האודיו ב-USB הוא 0x0402.
-
[7.8.2.2/H-4-4] חובה לכלול ברשימה מכשיר מסוג AudioDeviceInfo.TYPE_USB_DEVICE והתפקיד הוא isSink() אם השדה של סוג מסוף האודיו ב-USB הוא 0x603.
-
[7.8.2.2/H-4-5] חובה לכלול ברשימה מכשיר מסוג AudioDeviceInfo.TYPE_USB_DEVICE, והתפקיד הוא isSource() אם השדה של סוג מסוף ה-USB לאודיו הוא 0x604.
-
[7.8.2.2/H-4-6] חובה לכלול ברשימה מכשיר מסוג AudioDeviceInfo.TYPE_USB_DEVICE, והתפקיד הוא isSink() אם השדה של סוג מסוף ה-USB לאודיו הוא 0x400.
-
[7.8.2.2/H-4-7] חובה לפרט מכשיר מסוג AudioDeviceInfo.TYPE_USB_DEVICE ולציין שהתפקיד הוא isSource() אם השדה של סוג מסוף האודיו ב-USB הוא 0x400.
-
[7.8.2.2/H-SR] מומלץ מאוד לבצע ספירה של מתארי USB, לזהות סוגי מסופים ולשדר את Intent ACTION_HEADSET_PLUG תוך פחות מ-1,000 מילישניות, כשמחברים ציוד היקפי של אודיו עם USB-C.
2.2.2. מולטימדיה
הטמעות במכשירים ניידים חייבות לתמוך בפורמטים הבאים של קידוד ופענוח אודיו, ולהפוך אותם לזמינים לאפליקציות של צד שלישי:
- [5.1/H-0-1] AMR-NB
- [5.1/H-0-2] AMR-WB
- [5.1/H-0-3] פרופיל MPEG-4 AAC (AAC LC)
- [5.1/H-0-4] פרופיל MPEG-4 HE AAC (AAC+)
- [5.1/H-0-5] AAC ELD (enhanced low delay AAC)
הטמעות במכשירים ניידים חייבות לתמוך בפורמטים הבאים של קידוד וידאו ולהפוך אותם לזמינים לאפליקציות של צד שלישי:
הטמעות במכשירים ניידים חייבות לתמוך בפורמטים הבאים של פענוח סרטונים ולהפוך אותם לזמינים לאפליקציות של צד שלישי:
- [5.3/H-0-1] H.264 AVC
- [5.3/H-0-2] H.265 HEVC
- [5.3/H-0-3] MPEG-4 SP
- [5.3/H-0-4] VP8
- [5.3/H-0-5] VP9
2.2.3. תוכנות
הטמעות במכשירים ניידים:
- [3.2.3.1/H-0-1] חובה להשתמש באפליקציה שמטפלת ב-Intents
ACTION_GET_CONTENT
,ACTION_OPEN_DOCUMENT
,ACTION_OPEN_DOCUMENT_TREE
ו-ACTION_CREATE_DOCUMENT
כפי שמתואר במסמכי ה-SDK, ולספק למשתמש אמצעי גישה לנתונים של ספק המסמכים באמצעותDocumentsProvider
API. - [3.4.1/H-0-1] חובה לספק הטמעה מלאה של
android.webkit.Webview
API. - [3.4.2/H-0-1] חובה לכלול אפליקציית דפדפן עצמאית לגלישה באינטרנט של משתמשים רגילים.
- [3.8.1/H-SR] מומלץ מאוד להטמיע מרכז אפליקציות שמוגדר כברירת מחדל ותומך בהצמדת קיצורי דרך, ווידג'טים וwidgetFeatures בתוך האפליקציה.
- [3.8.1/H-SR] מומלץ מאוד להטמיע משגר ברירת מחדל שמספק גישה מהירה לקיצורי הדרך הנוספים שמוצעים על ידי אפליקציות של צד שלישי באמצעות ShortcutManager API.
- [3.8.1/H-SR] מומלץ מאוד לכלול אפליקציית מרכז אפליקציות שמוצגים בה תגים לסמלי האפליקציות.
- [3.8.2/H-SR] מומלץ מאוד לתמוך בווידג'טים של אפליקציות צד שלישי.
- [3.8.3/H-0-1] חובה לאפשר לאפליקציות צד שלישי להודיע למשתמשים על אירועים חשובים באמצעות מחלקות ה-API
Notification
ו-NotificationManager
. - [3.8.3/H-0-2] חובה לתמוך בהתראות מתקדמות.
- [3.8.3/H-0-3] חובה לתמוך בהתראות קופצות.
- [3.8.3/H-0-4] חובה לכלול את מגש ההתראות, כדי לאפשר למשתמש לשלוט ישירות בהתראות (למשל, לענות, להעביר למצב נודניק, לבטל או לחסום) באמצעות אמצעי גישה למשתמש כמו לחצני פעולה או לוח הבקרה, כפי שמיושם ב-AOSP.
- [3.8.3/H-0-5] חובה להציג את האפשרויות שמופיעות דרך
RemoteInput.Builder setChoices()
בלוח ההתראות. - [3.8.3/H-SR] מומלץ מאוד להציג את האפשרות הראשונה שמופיעה דרך
RemoteInput.Builder setChoices()
במגש ההתראות בלי שהמשתמש יצטרך לבצע אינטראקציה נוספת. - [3.8.3/H-SR] מומלץ מאוד להציג את כל האפשרויות שמופיעות ב-
RemoteInput.Builder setChoices()
בלוח ההתראות, כשהמשתמש מרחיב את כל ההתראות בלוח ההתראות. - [3.8.3.1/H-SR] מומלץ מאוד להציג פעולות שבהן
Notification.Action.Builder.setContextual
מוגדר כ-true
בשורה עם התשובות שמוצגות על ידיNotification.Remoteinput.Builder.setChoices
. - [3.8.4/H-SR] מומלץ מאוד להטמיע במכשיר עוזר וירטואלי שיטפל בפעולת העזרה.
אם הטמעות של מכשירים ניידים תומכות בפעולת העזרה, הן:
- [3.8.4/H-SR] מומלץ מאוד להשתמש בלחיצה ארוכה על המקש
HOME
כאינטראקציה המיועדת להפעלת אפליקציית העזרה, כפי שמתואר בקטע 7.2.3. חובה להפעיל את אפליקציית העזרה שנבחרה על ידי המשתמש, כלומר את האפליקציה שמטמיעה אתVoiceInteractionService
או פעילות שמטפלת ב-intentACTION_ASSIST
.
אם הטמעות של מכשירי Android ניידים תומכות במסך נעילה, הן:
- [3.8.10/H-1-1] חובה להציג את ההתראות במסך הנעילה, כולל תבנית ההתראה על מדיה.
אם הטמעות של מכשירים ניידים תומכות במסך נעילה מאובטח, הן:
- [3.9/H-1-1] חובה להטמיע את כל טווח המדיניות של ניהול המכשיר שמוגדר במסמכי ה-SDK של Android.
- [3.9/H-1-2] חובה להצהיר על תמיכה בפרופילים מנוהלים באמצעות
android.software.managed_users
דגל התכונה, אלא אם המכשיר מוגדר כך שהוא ידווח על עצמו כמכשיר עם RAM נמוך או כך שהוא מקצה אחסון פנימי (לא ניתן להסרה) כאחסון משותף.
הטמעות במכשירים ניידים:
- [3.10/H-0-1] חובה לתמוך בשירותי נגישות של צד שלישי.
- [3.10/H-SR] מומלץ מאוד לטעון מראש במכשיר שירותי נגישות שדומים לשירותי הנגישות 'גישה באמצעות מתג' ו-TalkBack (בשפות שנתמכות על ידי מנוע המרת הטקסט לדיבור שמותקן מראש) או עולים עליהם מבחינת הפונקציונליות, כפי שמופיע בפרויקט הקוד הפתוח של TalkBack.
- [3.11/H-0-1] חובה לתמוך בהתקנה של מנועי TTS של צד שלישי.
- [3.11/H-SR] מומלץ מאוד לכלול מנוע TTS שתומך בשפות שזמינות במכשיר.
- [3.13/H-SR] מומלץ מאוד לכלול רכיב ממשק משתמש של הגדרות מהירות.
אם הטמעות של מכשירי כף יד עם Android מצהירות על תמיכה ב-FEATURE_BLUETOOTH
או ב-FEATURE_WIFI
, הן:
- [3.16/H-1-1] המכשיר חייב לתמוך בתכונה של התאמת מכשיר משני.
אם פונקציית הניווט מסופקת כפעולה מבוססת-תנועות במסך:
- [7.2.3/H] אזור זיהוי התנועות לפונקציית מסך הבית לא צריך להיות גבוה מ-32dp מהחלק התחתון של המסך.
אם הטמעות של מכשירים ניידים מספקות פונקציית ניווט כמחווה מכל מקום בקצוות השמאלי והימני של המסך:
- [7.2.3/H-0-1] אזור התנועות של פונקציית הניווט חייב להיות ברוחב של פחות מ-40dp בכל צד. כברירת מחדל, רוחב אזור המחוות צריך להיות 24dp.
2.2.4. ביצועים וצריכת חשמל
- [8.1/H-0-1] זמן אחזור עקבי של פריימים. השהיה של פריימים או העיכוב בעיבוד פריימים לא יכולים להיות גבוהים מ-5 פריימים בשנייה, והם צריכים להיות נמוכים מפריימ אחד בשנייה.
- [8.1/H-0-2] השהיה בממשק המשתמש. הטמעות של מכשירים חייבות להבטיח חוויית משתמש עם זמן אחזור נמוך. לשם כך, צריך לגלול ברשימה של 10,000 רשומות כפי שמוגדר ב-Android Compatibility Test Suite (CTS) תוך פחות מ-36 שניות.
- [8.1/H-0-3] החלפת משימות. אם הופעלו כמה אפליקציות, הפעלה מחדש של אפליקציה שכבר פועלת אחרי שהיא הופעלה חייבת להימשך פחות משנייה אחת.
הטמעות במכשירים ניידים:
- [8.2/H-0-1] חובה לוודא ביצועים של כתיבה רציפה במהירות של לפחות 5MB/s.
- [8.2/H-0-2] חובה להבטיח ביצועים של כתיבה אקראית של לפחות 0.5MB/s.
- [8.2/H-0-3] חובה לוודא ביצועי קריאה רציפה של לפחות 15MB/s.
- [8.2/H-0-4] חובה לוודא ביצועי קריאה אקראית של לפחות 3.5 MB/s.
אם יישומי מכשירים ניידים כוללים תכונות לשיפור ניהול צריכת החשמל של המכשיר, שנכללות ב-AOSP או מרחיבות את התכונות שנכללות ב-AOSP, הם:
- [8.3/H-1-1] חובה לספק למשתמשים אפשרות להפעיל ולהשבית את התכונה לחיסכון בסוללה.
- [8.3/H-1-2] חובה לספק למשתמשים אפשרות להצגת כל האפליקציות שלא נכללות במצב המתנה של האפליקציה ובמצב שינה לחיסכון בסוללה.
הטמעות במכשירים ניידים:
- [8.4/H-0-1] חובה לספק פרופיל צריכת חשמל לכל רכיב שמגדיר את ערך צריכת הזרם לכל רכיב חומרה ואת קצב ניקוז הסוללה המשוער שנגרם על ידי הרכיבים לאורך זמן, כפי שמתואר באתר Android Open Source Project.
- [8.4/H-0-2] חובה לדווח על כל ערכי צריכת החשמל במיליאמפר לשעה (mAh).
- [8.4/H-0-3] חובה לדווח על צריכת החשמל של ה-CPU לכל UID של תהליך. פרויקט הקוד הפתוח של Android עומד בדרישה באמצעות הטמעה של מודול ליבת
uid_cputime
. - [8.4/H-0-4] חובה להפוך את נתוני צריכת החשמל האלה לזמינים למפתח האפליקציה באמצעות פקודת ה-shell
adb shell dumpsys batterystats
. - [8.4/H] צריך להיות משויך לרכיב החומרה עצמו אם אי אפשר לשייך את צריכת החשמל של רכיב החומרה לאפליקציה.
אם הטמעות של מכשירים ניידים כוללות מסך או פלט וידאו, הן:
- [8.4/H-1-1] חובה לכבד את הכוונה של
android.intent.action.POWER_USAGE_SUMMARY
ולהציג תפריט הגדרות שבו מוצג השימוש הזה בחשמל.
2.2.5. מודל אבטחה
הטמעות במכשירים ניידים:
- [9.1/H-0-1] חובה לאפשר לאפליקציות צד שלישי לגשת לסטטיסטיקות השימוש באמצעות ההרשאה
android.permission.PACKAGE_USAGE_STATS
, ולספק מנגנון שנגיש למשתמשים כדי להעניק או לבטל גישה לאפליקציות כאלה בתגובה ל-intentandroid.settings.ACTION_USAGE_ACCESS_SETTINGS
.
הטמעות במכשירים ניידים (* לא רלוונטי לטאבלטים):
- [9.11/H-0-2]* חובה לגבות את ההטמעה של מאגר המפתחות באמצעות סביבת ביצוע מבודדת.
- [9.11/H-0-3]* חובה להטמיע אלגוריתמים קריפטוגרפיים מסוג RSA, AES, ECDSA ו-HMAC ופונקציות גיבוב מסוג MD5, SHA1 ו-SHA-2 כדי לתמוך בצורה תקינה באלגוריתמים הנתמכים של מערכת Android Keystore באזור שמבודד בצורה מאובטחת מהקוד שפועל בקרנל ומעליו. בידוד מאובטח חייב לחסום את כל המנגנונים הפוטנציאליים שבאמצעותם קוד במצב ליבה או במרחב משתמשים יכול לגשת למצב הפנימי של הסביבה המבודדת, כולל DMA. פרויקט הקוד הפתוח של Android (AOSP) עומד בדרישה הזו באמצעות ההטמעה של Trusty, אבל אפשרות חלופית היא פתרון אחר שמבוסס על ARM TrustZone או הטמעה מאובטחת שנבדקה על ידי צד שלישי של היפר-ויז'ר מתאים שמבוסס על בידוד.
- [9.11/H-0-4]* חובה לבצע את האימות במסך הנעילה בסביבת הביצוע המבודדת, ורק אם האימות יצליח, לאפשר שימוש במפתחות שקשורים לאימות. פרטי הכניסה למסך הנעילה חייבים להישמר באופן שמאפשר רק לסביבת הביצוע המבודדת לבצע אימות של מסך הנעילה. פרויקט הקוד הפתוח של Android מספק את שכבת ההפשטה של חומרה (HAL) של Gatekeeper ואת Trusty, שאפשר להשתמש בהם כדי לעמוד בדרישה הזו.
- [9.11/H-0-5]* חובה לתמוך באימות (attestation) של מפתחות, כאשר מפתח החתימה של האימות מוגן על ידי חומרה מאובטחת והחתימה מתבצעת בחומרה מאובטחת. חובה לשתף את מפתחות החתימה של האימות במספר גדול מספיק של מכשירים כדי למנוע שימוש במפתחות כמזהי מכשירים. אחת הדרכים לעמוד בדרישה הזו היא לשתף את אותו מפתח אישור, אלא אם מיוצרות לפחות 100,000 יחידות של מק"ט נתון. אם מיוצרות יותר מ-100,000 יחידות של מק"ט מסוים, אפשר להשתמש במפתח אחר לכל 100,000 יחידות.
הערה: אם הטמעת מכשיר כבר הושקה בגרסת Android קודמת, המכשיר הזה פטור מהדרישה להשתמש במאגר מפתחות שמגובה על ידי סביבת ביצוע מבודדת ולתמוך באימות מפתחות, אלא אם הוא מצהיר על התכונה android.hardware.fingerprint
, שדורשת מאגר מפתחות שמגובה על ידי סביבת ביצוע מבודדת.
כשיישומים של מכשירים ניידים תומכים במסך נעילה מאובטח, הם:
- [9.11/H-1-1] המכשיר חייב לאפשר למשתמש לבחור את הזמן הקצר ביותר לתפוגת מצב שינה, כלומר זמן מעבר ממצב לא נעול למצב נעול, כ-15 שניות או פחות.
- [9.11/H-1-2] חובה לספק למשתמש אפשרות להסתיר התראות ולהשבית את כל סוגי האימות, למעט האימות הראשי שמתואר בקטע 9.11.1 מסך נעילה מאובטח. מערכת AOSP עומדת בדרישה הזו כמצב נעילה.
אם הטמעות של מכשירים ניידים כוללות כמה משתמשים ולא מצהירות על דגל התכונה android.hardware.telephony
, הן:
- [9.5/H-2-1] המכשיר חייב לתמוך בפרופילים מוגבלים, תכונה שמאפשרת לבעלי המכשיר לנהל משתמשים נוספים ואת היכולות שלהם במכשיר. באמצעות פרופילים מוגבלים, בעלי המכשירים יכולים להגדיר במהירות סביבות נפרדות למשתמשים נוספים לעבודה, עם אפשרות לנהל מגבלות מפורטות יותר באפליקציות שזמינות בסביבות האלה.
אם הטמעות של מכשירים ניידים כוללות כמה משתמשים ומוצהר בהן על דגל התכונה android.hardware.telephony
, הן:
- [9.5/H-3-1] אסור לתמוך בפרופילים מוגבלים, אבל צריך להתאים להטמעה של אמצעי בקרה ב-AOSP כדי לאפשר למשתמשים אחרים לגשת לשיחות קוליות ולהודעות SMS או להשבית את הגישה שלהם.
2.2.6. תאימות של כלים ואפשרויות למפתחים
הטמעות במכשירים ניידים (* לא רלוונטי לטאבלטים):
- [6.1/H-0-1]* חובה לתמוך בפקודת המעטפת
cmd testharness
.
הטמעות במכשירים ניידים (* לא רלוונטי לטאבלטים):
-
Perfetto
- [6.1/H-0-2]* חובה לחשוף קובץ בינארי
/system/bin/perfetto
למשתמש במעטפת, ששורת הפקודה שלו תואמת למסמכי התיעוד של Perfecto. - [6.1/H-0-3]* קובץ ה-binary של perfetto חייב לקבל כקלט הגדרות של protobuf שתואמות לסכימה שמוגדרת במסמכי התיעוד של perfetto.
- [6.1/H-0-4]* קובץ ה-binary של perfetto חייב לכתוב כפלט נתוני מעקב בפורמט protobuf שתואמים לסכימה שמוגדרת במסמכי התיעוד של perfetto.
- [6.1/H-0-5]* חובה לספק, באמצעות קובץ הבינארי של perfetto, לפחות את מקורות הנתונים שמתוארים במסמכי התיעוד של perfetto.
- [6.1/H-0-2]* חובה לחשוף קובץ בינארי
2.3. דרישות לטלוויזיה
מכשיר Android TV הוא הטמעה של מכשיר Android שמשמש כממשק בידור לצריכת מדיה דיגיטלית, סרטים, משחקים, אפליקציות או שידורי טלוויזיה חיים, עבור משתמשים שיושבים במרחק של כ-3 מטרים (ממשק משתמש מסוג 'הישענות לאחור' או 'ממשק משתמש של 3 מטרים').
הטמעות במכשירי Android מסווגות כטלוויזיה אם הן עומדות בכל הקריטריונים הבאים:
- סיפקתם מנגנון לשליטה מרחוק בממשק המשתמש שעבר רינדור בתצוגה, שיכולה להיות במרחק של שלושה מטרים מהמשתמש.
- יש לו מסך מוטבע באורך אלכסוני של יותר מ-24 אינץ' או שהוא כולל יציאת וידאו, כמו VGA, HDMI, DisplayPort או יציאה אלחוטית לתצוגה.
הדרישות הנוספות שמופיעות בהמשך הקטע הזה ספציפיות להטמעות במכשירי Android TV.
2.3.1. חומרה
הטמעות של מכשירי טלוויזיה:
- [7.2.2/T-0-1] חובה לתמוך בלחצני ניווט.
- [7.2.3/T-0-1] חובה לספק את הפונקציות 'דף הבית' ו'הקודם'.
- [7.2.3/T-0-2] חובה לשלוח לאפליקציה שבחזית גם את האירוע הרגיל וגם את אירוע הלחיצה הארוכה של פונקציית החזרה (
KEYCODE_BACK
). - [7.2.6.1/T-0-1] חובה לכלול תמיכה בבקרי משחקים ולהצהיר על דגל התכונה
android.hardware.gamepad
. - [7.2.7/T] המכשיר צריך לספק שלט רחוק שמאפשר למשתמשים לגשת לניווט ללא מגע ולקלט של מקשי ניווט מרכזיים.
אם הטמעות של מכשירי טלוויזיה כוללות ג'ירוסקופ ב-3 צירים, הן:
- [7.3.4/T-1-1] חובה לדווח על אירועים בתדירות של לפחות 100 הרץ.
- [7.3.4/T-1-2] המכשיר חייב להיות מסוגל למדוד שינויים בכיוון עד 1,000 מעלות לשנייה.
הטמעות של מכשירי טלוויזיה:
- [7.4.3/T-0-1] המכשיר חייב לתמוך ב-Bluetooth וב-Bluetooth LE.
- [7.6.1/T-0-1] חובה שיהיה לפחות 4GB של אחסון לא נדיף שזמין לנתונים פרטיים של האפליקציה (כלומר, מחיצת /data).
אם הטמעות של מכשירי טלוויזיה כוללות יציאת USB שתומכת במצב מארח, הן:
- [7.5.3/T-1-1] חובה לכלול תמיכה במצלמה חיצונית שמתחברת דרך יציאת ה-USB הזו, אבל לא בהכרח מחוברת תמיד.
אם ההטמעות של מכשירי הטלוויזיה הן 32 ביט:
-
[7.6.1/T-1-1] הזיכרון שזמין לליבת המערכת ולמרחב המשתמש חייב להיות לפחות 896MB אם נעשה שימוש באחת מהצפיפויות הבאות:
- 400dpi או יותר במסכים קטנים או רגילים
- xhdpi או יותר במסכים גדולים
- tvdpi או יותר במסכים גדולים במיוחד
אם ההטמעות של מכשירי הטלוויזיה הן 64 ביט:
-
[7.6.1/T-2-1] הזיכרון שזמין לליבת המערכת ולמרחב המשתמש חייב להיות לפחות 1,280MB אם נעשה שימוש באחת מהצפיפויות הבאות:
- 400dpi או יותר במסכים קטנים או רגילים
- xhdpi או יותר במסכים גדולים
- tvdpi או יותר במסכים גדולים במיוחד
הערה: הזיכרון שזמין לליבה ולמרחב המשתמש שצוין למעלה מתייחס למרחב הזיכרון שמוקצה בנוסף לזיכרון שכבר מוקצה לרכיבי חומרה כמו רדיו, וידאו וכו' שלא נמצאים בשליטת הליבה בהטמעות של המכשיר.
הטמעות של מכשירי טלוויזיה:
- [7.8.1/T] צריך לכלול מיקרופון.
- [7.8.2/T-0-1] חובה שיהיה פלט אודיו וצריך להצהיר על
android.hardware.audio.output
.
2.3.2. מולטימדיה
ההטמעות במכשירי טלוויזיה חייבות לתמוך בפורמטים הבאים של קידוד ופענוח אודיו, ולהפוך אותם לזמינים לאפליקציות של צד שלישי:
- [5.1/T-0-1] פרופיל MPEG-4 AAC (AAC LC)
- [5.1/T-0-2] פרופיל MPEG-4 HE AAC (AAC+)
- [5.1/T-0-3] AAC ELD (enhanced low delay AAC)
ההטמעות במכשירי טלוויזיה חייבות לתמוך בפורמטים הבאים של קידוד וידאו ולהפוך אותם לזמינים לאפליקציות של צד שלישי:
הטמעות של מכשירי טלוויזיה:
- [5.2.2/T-SR] מומלץ מאוד לתמוך בקידוד H.264 של סרטונים ברזולוציה 720p ו-1080p ב-30 פריימים לשנייה.
ההטמעות במכשירי טלוויזיה חייבות לתמוך בפורמטים הבאים של פענוח וידאו ולהפוך אותם לזמינים לאפליקציות של צד שלישי:
- [5.3.3/T-0-1] MPEG-4 SP
- [5.3.4/T-0-2] H.264 AVC
- [5.3.5/T-0-3] H.265 HEVC
- [5.3.6/T-0-4] VP8
- [5.3.7/T-0-5] VP9
- [5.3.1/T-0-6] MPEG-2
הטמעות של מכשירי טלוויזיה חייבות לתמוך בפענוח MPEG-2, כפי שמפורט בקטע 5.3.1, בקצבי פריימים וברזולוציות של סרטונים רגילים, עד לרזולוציה הבאה כולל:
- [5.3.1/T-1-1] HD 1080p במהירות של 29.97 פריימים לשנייה עם פרופיל ראשי ברמה גבוהה.
- [5.3.1/T-1-2] HD 1080i במהירות של 59.94 פריימים לשנייה עם Main Profile High Level. הם חייבים לבטל את השזירה של סרטוני MPEG-2 שזורים ולהפוך אותם לזמינים לאפליקציות של צד שלישי.
הטמעות של מכשירי טלוויזיה חייבות לתמוך בפענוח H.264, כפי שמפורט בסעיף 5.3.4, בקצבי פריימים וברזולוציות של וידאו רגיל עד לרזולוציות הבאות כולל:
- [5.3.4/T-1-1] HD 1080p בקצב של 60 פריימים לשנייה עם פרופיל Baseline
- [5.3.4/T-1-2] HD 1080p בקצב של 60 פריימים לשנייה עם פרופיל ראשי
- [5.3.4/T-1-3] HD 1080p בקצב של 60 פריימים לשנייה עם High Profile Level 4.2
הטמעות של מכשירי טלוויזיה עם מפענחי חומרה H.265 חייבות לתמוך בפענוח H.265, כפי שמפורט בסעיף 5.3.5, בקצבי פריימים וברזולוציות של וידאו רגיל עד וכולל:
- [5.3.5/T-1-1] HD 1080p בקצב של 60 פריימים לשנייה עם Main Profile Level 4.1
אם הטמעות של מכשירי טלוויזיה עם מפענחי חומרה H.265 תומכות בפענוח H.265 ובפרופיל הפענוח UHD, הן:
- [5.3.5/T-2-1] חובה לתמוך בפרופיל פענוח UHD ב-60 פריימים לשנייה עם פרופיל Main10 Level 5 Main Tier.
הטמעות של מכשירי טלוויזיה חייבות לתמוך בפענוח VP8, כפי שמפורט בסעיף 5.3.6, בקצב פריימים וברזולוציות רגילים של סרטונים, עד לרזולוציה של:
- [5.3.6/T-1-1] פרופיל פענוח HD 1080p בקצב של 60 פריימים לשנייה
הטמעות של מכשירי טלוויזיה עם מפענחי חומרה VP9 חייבות לתמוך בפענוח VP9, כפי שמפורט בסעיף 5.3.7, בקצבי פריימים וברזולוציות של וידאו רגיל עד לרזולוציה של:
- [5.3.7/T-1-1] HD 1080p בקצב של 60 פריימים לשנייה עם פרופיל 0 (עומק צבע של 8 ביט)
אם הטמעות של מכשירי טלוויזיה עם מפענחי חומרה של VP9 תומכות בפענוח VP9 ובפרופיל הפענוח של UHD, הן:
- [5.3.7/T-2-1] חובה לתמוך בפרופיל פענוח UHD ב-60 פריימים לשנייה עם פרופיל 0 (עומק צבע של 8 ביט).
- [5.3.7/T-2-1] מומלץ מאוד לתמוך בפרופיל הפענוח של UHD ב-60 פריימים לשנייה עם פרופיל 2 (עומק צבע של 10 ביט).
הטמעות של מכשירי טלוויזיה:
- [5.5/T-0-1] חובה לכלול תמיכה בעוצמת הקול הראשית של המערכת ובהנחתה של עוצמת הקול של פלט האודיו הדיגיטלי בפלטים נתמכים, למעט פלט של העברת אודיו דחוס (שבו לא מתבצע פענוח אודיו במכשיר).
אם הטלוויזיה לא כוללת מסך מובנה, אלא תומכת במסך חיצוני שמחובר באמצעות HDMI, היא:
- [5.8/T-0-1] חובה להגדיר את מצב פלט ה-HDMI כדי לבחור את הרזולוציה המקסימלית שאפשר לתמוך בה עם קצב רענון של 50Hz או 60Hz.
- [5.8/T-SR] מומלץ מאוד לספק למשתמשים אפשרות לבחור את קצב הרענון של HDMI.
- [5.8] המכשיר צריך להגדיר את קצב הרענון של פלט ה-HDMI ל-50Hz או ל-60Hz, בהתאם לקצב הרענון של הסרטון באזור שבו המכשיר נמכר.
אם הטלוויזיה לא כוללת מסך מובנה, אלא תומכת במסך חיצוני שמחובר באמצעות HDMI, היא:
- [5.8/T-1-1] חובה לתמוך ב-HDCP 2.2.
אם הטמעות של מכשירי טלוויזיה לא תומכות בפענוח UHD, אלא תומכות במסך חיצוני שמחובר באמצעות HDMI, הן:
- [5.8/T-2-1] חובה לתמוך ב-HDCP 1.4
2.3.3. תוכנות
הטמעות של מכשירי טלוויזיה:
- [3/T-0-1] חובה להצהיר על התכונות
android.software.leanback
ו-android.hardware.type.television
. - [3.4.1/T-0-1] חובה לספק הטמעה מלאה של
android.webkit.Webview
API.
אם הטמעות של מכשירי Android TV תומכות במסך נעילה,הן:
- [3.8.10/T-1-1] חובה להציג את ההתראות במסך הנעילה, כולל תבנית ההתראות על מדיה.
הטמעות של מכשירי טלוויזיה:
- [3.8.14/T-SR] מומלץ מאוד לתמוך במצב 'תמונה בתוך תמונה' (PIP) של חלונות מרובים.
- [3.10/T-0-1] חובה לתמוך בשירותי נגישות של צד שלישי.
- [3.10/T-SR] מומלץ מאוד לטעון מראש במכשיר שירותי נגישות שדומים לשירותי הנגישות 'גישה באמצעות מתג' ו-TalkBack (בשפות שנתמכות על ידי מנוע המרת הטקסט לדיבור שמותקן מראש) או עולים עליהם מבחינת הפונקציונליות, כפי שמפורט בפרויקט הקוד הפתוח של TalkBack.
אם הטמעות של מכשירי טלוויזיה מדווחות על התכונה android.hardware.audio.output
, הן:
- [3.11/T-SR] מומלץ מאוד לכלול מנוע TTS שתומך בשפות שזמינות במכשיר.
- [3.11/T-1-1] חובה לתמוך בהתקנה של מנועי TTS של צד שלישי.
הטמעות של מכשירי טלוויזיה:
- [3.12/T-0-1] חובה לתמוך ב-TV Input Framework.
2.3.4. ביצועים וצריכת חשמל
- [8.1/T-0-1] זמן אחזור עקבי של פריימים. השהיה של פריימים או העיכוב בעיבוד פריימים לא יכולים להיות גבוהים מ-5 פריימים בשנייה, והם צריכים להיות נמוכים מפריימ אחד בשנייה.
- [8.2/T-0-1] חובה לוודא ביצועים של כתיבה רציפה במהירות של לפחות 5MB/s.
- [8.2/T-0-2] חובה לוודא ביצועי כתיבה אקראית של לפחות 0.5MB/s.
- [8.2/T-0-3] חובה לוודא ביצועי קריאה רציפים של לפחות 15MB/s.
- [8.2/T-0-4] חובה לוודא ביצועי קריאה אקראית של לפחות 3.5MB/s.
אם הטמעות של מכשירי טלוויזיה כוללות תכונות לשיפור ניהול צריכת החשמל של המכשיר שנכללות ב-AOSP או מרחיבות את התכונות שנכללות ב-AOSP, הן:
- [8.3/T-1-1] חובה לספק למשתמשים אפשרות להפעיל ולהשבית את התכונה 'חיסכון בסוללה'.
אם הטלוויזיה לא כוללת סוללה:
- [8.3/T-1-2] חובה לרשום את המכשיר כמכשיר ללא סוללה, כפי שמתואר במאמר תמיכה במכשירים ללא סוללה.
אם הטלוויזיה היא מכשיר עם סוללה:
- [8.3/T-1-3] חובה לספק למשתמשים אפשרות להציג את כל האפליקציות שמוחרגות ממצב המתנה של האפליקציה וממצב שינה לחיסכון בסוללה.
הטמעות של מכשירי טלוויזיה:
- [8.4/T-0-1] חובה לספק פרופיל צריכת חשמל לכל רכיב שמגדיר את ערך צריכת הזרם לכל רכיב חומרה ואת ניקוז הסוללה המשוער שנגרם על ידי הרכיבים לאורך זמן, כפי שמתועד באתר Android Open Source Project.
- [8.4/T-0-2] חובה לדווח על כל ערכי צריכת החשמל במיליאמפר לשעה (mAh).
- [8.4/T-0-3] חובה לדווח על צריכת החשמל של ה-CPU לכל UID של תהליך. פרויקט הקוד הפתוח של Android עומד בדרישה באמצעות הטמעה של מודול ליבת
uid_cputime
. - [8.4/T] אם אי אפשר לשייך את צריכת החשמל של רכיב החומרה לאפליקציה, צריך לשייך אותה לרכיב החומרה עצמו.
- [8.4/T-0-4] חובה להפוך את נתוני צריכת החשמל האלה לזמינים למפתח האפליקציה באמצעות פקודת ה-Shell
adb shell dumpsys batterystats
.
2.3.5. מודל אבטחה
הטמעות של מכשירי טלוויזיה:
- [9.11/T-0-1] חובה לגבות את ההטמעה של מאגר המפתחות באמצעות סביבת מחשוב מבודדת.
- [9.11/T-0-2] חובה להטמיע אלגוריתמים קריפטוגרפיים מסוג RSA, AES, ECDSA ו-HMAC ופונקציות גיבוב מסוג MD5, SHA1 ו-SHA-2 כדי לתמוך כראוי באלגוריתמים הנתמכים של מערכת Android Keystore באזור שמבודד בצורה מאובטחת מהקוד שפועל בקרנל ומעליו. בידוד מאובטח חייב לחסום את כל המנגנונים הפוטנציאליים שבאמצעותם קוד במצב ליבה או במרחב משתמשים יכול לגשת למצב הפנימי של הסביבה המבודדת, כולל DMA. פרויקט הקוד הפתוח של Android (AOSP) עומד בדרישה הזו באמצעות ההטמעה של Trusty, אבל אפשרות חלופית היא פתרון אחר שמבוסס על ARM TrustZone או הטמעה מאובטחת שנבדקה על ידי צד שלישי של היפר-ויז'ר מתאים שמבוסס על בידוד.
- [9.11/T-0-3] חובה לבצע את האימות במסך הנעילה בסביבת ביצוע מבודדת, ורק אם האימות מצליח, לאפשר שימוש במפתחות שקשורים לאימות. פרטי הכניסה למסך הנעילה חייבים להישמר באופן שמאפשר רק לסביבת הביצוע המבודדת לבצע אימות של מסך הנעילה. פרויקט הקוד הפתוח של Android מספק את שכבת ההפשטה של חומרה (HAL) של Gatekeeper ואת Trusty, שאפשר להשתמש בהם כדי לעמוד בדרישה הזו.
- [9.11/T-0-4] המכשיר חייב לתמוך באימות מפתחות, כאשר מפתח החתימה של האימות מוגן על ידי חומרה מאובטחת והחתימה מתבצעת בחומרה מאובטחת. חובה לשתף את מפתחות החתימה של האימות במספר גדול מספיק של מכשירים כדי למנוע שימוש במפתחות כמזהי מכשירים. אחת הדרכים לעמוד בדרישה הזו היא לשתף את אותו מפתח אישור, אלא אם מיוצרות לפחות 100,000 יחידות של מק"ט נתון. אם מיוצרות יותר מ-100,000 יחידות של מק"ט מסוים, אפשר להשתמש במפתח אחר לכל 100,000 יחידות.
הערה: אם הטמעת מכשיר כבר הושקה בגרסת Android קודמת, המכשיר הזה פטור מהדרישה להשתמש במאגר מפתחות שמגובה על ידי סביבת ביצוע מבודדת ולתמוך באימות מפתחות, אלא אם הוא מצהיר על התכונה android.hardware.fingerprint
, שדורשת מאגר מפתחות שמגובה על ידי סביבת ביצוע מבודדת.
אם הטמעות של מכשירי טלוויזיה תומכות במסך נעילה מאובטח, הן:
- [9.11/T-1-1] חובה לאפשר למשתמש לבחור את הזמן הקצוב לתפוגה של מצב השינה למעבר ממצב לא נעול למצב נעול, עם זמן קצוב לתפוגה מינימלי של עד 15 שניות.
אם הטמעות של מכשירי טלוויזיה כוללות כמה משתמשים ולא מצהירות על דגל התכונה android.hardware.telephony
, הן:
- [9.5/T-2-1] המכשיר חייב לתמוך בפרופילים מוגבלים, תכונה שמאפשרת לבעלי המכשיר לנהל משתמשים נוספים ואת היכולות שלהם במכשיר. באמצעות פרופילים מוגבלים, בעלי המכשירים יכולים להגדיר במהירות סביבות נפרדות למשתמשים נוספים לעבודה, עם אפשרות לנהל מגבלות מפורטות יותר באפליקציות שזמינות בסביבות האלה.
אם הטמעות של מכשירי טלוויזיה כוללות כמה משתמשים ומוצהר בהן על android.hardware.telephony
דגל התכונה, הן:
- [9.5/T-3-1] אסור לתמוך בפרופילים מוגבלים, אבל חובה להתאים ליישום AOSP של אמצעי בקרה להפעלה או להשבתה של גישה של משתמשים אחרים לשיחות קוליות ולהודעות SMS.
2.3.6. תאימות של כלים ואפשרויות למפתחים
הטמעות של מכשירי טלוויזיה:
-
Perfetto
- [6.1/T-0-1] חובה לחשוף קובץ בינארי
/system/bin/perfetto
למשתמש במעטפת, ששורת הפקודה שלו תואמת לתיעוד של perfetto. - [6.1/T-0-2] קובץ ה-binary של perfetto חייב לקבל כקלט קובץ הגדרות protobuf שתואם לסכימה שמוגדרת במסמכי התיעוד של perfetto.
- [6.1/T-0-3] קובץ הבינארי של perfetto חייב לכתוב כפלט נתוני מעקב בפורמט protobuf שתואמים לסכימה שמוגדרת במסמכי התיעוד של perfetto.
- [6.1/T-0-4] חובה לספק, באמצעות קובץ הבינארי של Perfecto, לפחות את מקורות הנתונים שמתוארים במסמכי התיעוד של Perfecto.
- [6.1/T-0-1] חובה לחשוף קובץ בינארי
2.4. דרישות הצפייה
מכשיר שעון Android הוא הטמעה של מכשיר Android שמיועד לענידה על הגוף, למשל על פרק כף היד.
הטמעות במכשירי Android מסווגות כצפייה אם הן עומדות בכל הקריטריונים הבאים:
- יש להם מסך עם אורך אלכסוני פיזי בטווח של 1.1 עד 2.5 אינץ'.
- יש מנגנון שמאפשר לענוד אותו על הגוף.
הדרישות הנוספות שמופיעות בהמשך הקטע הזה ספציפיות להטמעות של מכשירי Android Watch.
2.4.1. חומרה
צפייה בהטמעות במכשירים:
-
[7.1.1.1/W-0-1] חובה שיהיה למכשיר מסך עם גודל פיזי אלכסוני בטווח של 1.1 עד 2.5 אינץ'.
-
[7.2.3/W-0-1] חובה שהפונקציה 'בית' תהיה זמינה למשתמש, וגם הפונקציה 'הקודם' למעט כשהיא נמצאת ב-
UI_MODE_TYPE_WATCH
. -
[7.2.4/W-0-1] חובה לתמוך בהזנה באמצעות מסך מגע.
-
[7.3.1/W-SR] מומלץ מאוד לכלול מד תאוצה ב-3 צירים.
אם הטמעות של מכשירי Watch כוללות מקלט GPS/GNSS ומדווחות על היכולת לאפליקציות באמצעות תג התכונה android.hardware.location.gps
, הן:
- [7.3.3/W-1-1] חובה לדווח על מדידות GNSS ברגע שהן נמצאות, גם אם מיקום שמחושב מ-GPS/GNSS עדיין לא דווח.
- [7.3.3/W-1-2] חובה לדווח על טווחי פסאודו ועל שיעורי טווחי פסאודו של GNSS, שבתנאי שמיים פתוחים אחרי קביעת המיקום, בזמן שהמכשיר נייח או נע בתאוצה של פחות מ-0.2 מטר לשנייה בריבוע, מספיקים לחישוב המיקום בטווח של 20 מטרים, והמהירות בטווח של 0.2 מטר לשנייה, לפחות ב-95% מהזמן.
אם הטמעות של מכשירי Watch כוללות ג'ירוסקופ ב-3 צירים, הן:
- [7.3.4/W-2-1] המכשיר חייב להיות מסוגל למדוד שינויים בכיוון עד 1,000 מעלות לשנייה.
צפייה בהטמעות במכשירים:
-
[7.4.3/W-0-1] חובה לתמוך ב-Bluetooth.
-
[7.6.1/W-0-1] חובה להקצות לפחות 1GB של אחסון לא נדיף לנתונים פרטיים של האפליקציה (כלומר, מחיצת /data).
-
[7.6.1/W-0-2] חובה להקצות לפחות 416MB של זיכרון לליבת המערכת ולמרחב המשתמש.
-
[7.8.1/W-0-1] חובה לכלול מיקרופון.
-
[7.8.2/W] יכול להיות שיהיה פלט אודיו, אבל לא מומלץ.
2.4.2. מולטימדיה
אין דרישות נוספות.
2.4.3. תוכנות
צפייה בהטמעות במכשירים:
- [3/W-0-1] חובה להצהיר על התכונה
android.hardware.type.watch
. - [3/W-0-2] חובה לתמוך ב-uiMode = UI_MODE_TYPE_WATCH.
צפייה בהטמעות במכשירים:
- [3.8.4/W-SR] מומלץ מאוד להטמיע במכשיר עוזר וירטואלי שיטפל בפעולת העזרה.
מכשירים שמוטמעים בהם דגל התכונה android.hardware.audio.output
:
- [3.10/W-1-1] חובה לתמוך בשירותי נגישות של צד שלישי.
-
[3.10/W-SR] מומלץ מאוד לטעון מראש שירותי נגישות במכשיר שפועלים באופן דומה לשירותי הנגישות 'גישה באמצעות מתג' ו-TalkBack (עבור שפות שנתמכות על ידי מנוע המרת הטקסט לדיבור שמותקן מראש), או אפילו טוב יותר, כפי שמופיע בפרויקט הקוד הפתוח של TalkBack.
-
[3.11/W-SR] מומלץ מאוד לכלול מנוע TTS שתומך בשפות שזמינות במכשיר.
-
[3.11/W-0-1] חובה לתמוך בהתקנה של מנועי TTS של צד שלישי.
2.4.4. ביצועים וצריכת חשמל
אם הטמעות של מכשירי Watch כוללות תכונות לשיפור ניהול צריכת החשמל במכשיר, שנכללות ב-AOSP או מרחיבות את התכונות שנכללות ב-AOSP, הן:
- [8.3/W-SR] מומלץ מאוד לספק למשתמשים אפשרות להציג את כל האפליקציות שמוחרגות ממצב המתנה של האפליקציה וממצב שינה לחיסכון בסוללה.
- [8.3/W-SR] מומלץ מאוד לספק למשתמשים אפשרות להפעיל ולהשבית את התכונה לחיסכון בסוללה.
צפייה בהטמעות במכשירים:
- [8.4/W-0-1] חובה לספק פרופיל צריכת חשמל לכל רכיב שמגדיר את ערך צריכת הזרם לכל רכיב חומרה ואת קצב ניקוז הסוללה המשוער שנגרם על ידי הרכיבים לאורך זמן, כפי שמתועד באתר Android Open Source Project.
- [8.4/W-0-2] חובה לדווח על כל ערכי צריכת החשמל במיליאמפר לשעה (mAh).
- [8.4/W-0-3] חובה לדווח על צריכת החשמל של ה-CPU לכל UID של תהליך. פרויקט הקוד הפתוח של Android עומד בדרישה באמצעות הטמעה של מודול ליבת
uid_cputime
. - [8.4/W-0-4] חובה להפוך את נתוני צריכת החשמל האלה לזמינים למפתח האפליקציה באמצעות פקודת ה-Shell
adb shell dumpsys batterystats
. - [8.4/W] צריך להיות משויך לרכיב החומרה עצמו אם אי אפשר לשייך את צריכת החשמל של רכיב החומרה לאפליקציה.
2.4.5. מודל אבטחה
אם הטמעות של מכשירי Watch כוללות כמה משתמשים ולא מצהירות על דגל התכונה android.hardware.telephony
, הן:
- [9.5/W-1-1] המכשיר חייב לתמוך בפרופילים מוגבלים, תכונה שמאפשרת לבעלי המכשיר לנהל משתמשים נוספים ואת היכולות שלהם במכשיר. באמצעות פרופילים מוגבלים, בעלי המכשירים יכולים להגדיר במהירות סביבות נפרדות למשתמשים נוספים לעבודה, עם אפשרות לנהל מגבלות מפורטות יותר באפליקציות שזמינות בסביבות האלה.
אם הטמעות של מכשירי צפייה כוללות כמה משתמשים ומוצהר בהן על דגל התכונה android.hardware.telephony
, הן:
- [9.5/W-2-1] אסור לתמוך בפרופילים מוגבלים, אבל חובה להתאים להטמעה של אמצעי בקרה ב-AOSP כדי לאפשר למשתמשים אחרים לגשת לשיחות קוליות ולהודעות SMS או להשבית את הגישה שלהם.
2.5. דרישות בנושא רכב
הטמעה של Android Automotive מתייחסת ליחידה ראשית ברכב שמופעלת על ידי Android כמערכת הפעלה לחלק מהמערכת או לכל המערכת ו/או לפונקציונליות של מערכת המידע והבידור.
הטמעות של מכשירי Android מסווגות כ-Automotive אם הן מצהירות על התכונה android.hardware.type.automotive
או עומדות בכל הקריטריונים הבאים.
- מוטמעים כחלק מכלי רכב או ניתנים לחיבור לכלי רכב.
- משתמשים במסך בשורת המושבים של הנהג כתצוגה הראשית.
הדרישות הנוספות שמופיעות בהמשך הסעיף הזה ספציפיות להטמעות של מכשירי Android Automotive.
2.5.1. חומרה
הטמעות של מכשירים לרכב:
- [7.1.1.1/A-0-1] חובה שגודל המסך יהיה לפחות 6 אינץ' באלכסון פיזי.
-
[7.1.1.1/A-0-2] חובה שגודל המסך יהיה לפחות 750 dp x 480 dp.
-
[7.2.3/A-0-1] חובה לספק את הפונקציה 'מסך הבית' ואפשר לספק את הפונקציות 'הקודם' ו'אחרונים'.
- [7.2.3/A-0-2] חובה לשלוח את האירוע הרגיל ואת אירוע הלחיצה הארוכה של פונקציית החזרה (
KEYCODE_BACK
) לאפליקציה שפועלת בחזית. - [7.3/A-0-1] חובה להטמיע ולדווח על
GEAR_SELECTION
, NIGHT_MODE
, PERF_VEHICLE_SPEED
ו-PARKING_BRAKE_ON
. - [7.3/A-0-2] הערך של הדגל
NIGHT_MODE
חייב להיות עקבי עם מצב יום/לילה בלוח הבקרה, וצריך להתבסס על קלט של חיישן אור סביבתי. יכול להיות שחיישן האור הרגיש לסביבה זהה לפוטומטר. - [7.3/A-0-3] חובה לספק את שדה המידע הנוסף של החיישן
TYPE_SENSOR_PLACEMENT
כחלק מהשדה SensorAdditionalInfo לכל חיישן שמסופק. - [7.3/A-0-1] המכשיר עשוי להשתמש בחישוב משוער כדי לקבוע את המיקום על ידי שילוב של GPS/GNSS עם חיישנים נוספים. אם המיקום מחושב באמצעות ניווט משוער, מומלץ מאוד להטמיע ולדווח על סוגי החיישנים המתאימים ו/או על מזהי מאפייני הרכב שבהם נעשה שימוש.
- [7.3/A-0-2] אסור לבצע התאמה של המיקום שמתקבל באמצעות LocationManager#requestLocationUpdates() למפה.
אם הטמעות של מכשירים לשימוש ברכב כוללות מד תאוצה ב-3 צירים, הן:
- [7.3.1/A-1-1] חובה לדווח על אירועים בתדירות של לפחות 100 הרץ.
- [7.3.1/A-1-2] חייב לעמוד בדרישות של מערכת הקואורדינטות של חיישני הרכב ב-Android.
אם הטמעות של מכשירים לרכב כוללות ג'ירוסקופ ב-3 צירים, הן:
- [7.3.4/A-2-1] חובה לתמוך בדיווח על אירועים בתדירות של לפחות 100 הרץ.
- [7.3.4/A-2-2] חובה להטמיע גם את חיישן
TYPE_GYROSCOPE_UNCALIBRATED
. - [7.3.4/A-2-3] המכשיר חייב להיות מסוגל למדוד שינויים בכיוון עד 250 מעלות לשנייה.
- [7.3.4/A-SR] מומלץ מאוד להגדיר את טווח המדידה של הג'ירוסקופ לערך של +/-250dps כדי למקסם את הרזולוציה האפשרית
הטמעות של מכשירים לרכב:
- [7.4.3/A-0-1] המכשיר חייב לתמוך ב-Bluetooth ומומלץ לתמוך ב-Bluetooth LE.
-
[7.4.3/A-0-2] הטמעות של Android Automotive חייבות לתמוך בפרופילים הבאים של Bluetooth:
- שיחות טלפון באמצעות פרופיל דיבורית (HFP).
- הפעלת מדיה באמצעות פרופיל הפצת אודיו (A2DP).
- שליטה בהפעלת מדיה באמצעות פרופיל שלט רחוק (AVRCP).
- שיתוף אנשי קשר באמצעות פרופיל הגישה לספר הטלפונים (PBAP).
-
[7.4.3/A-SR] מומלץ מאוד לתמוך בפרופיל גישה להודעות (MAP).
-
[7.4.5/A] המכשיר צריך לכלול תמיכה בקישוריות נתונים שמבוססת על רשת סלולרית.
- [7.4.5/A] מותר להשתמש בקבוע של System API
NetworkCapabilities#NET_CAPABILITY_OEM_PAID
עבור רשתות שזמינות לאפליקציות מערכת.
מצלמה עם תצוגה חיצונית היא מצלמה שמצלמת סצנות מחוץ למכשיר, כמו מצלמת דרך.
הטמעות של מכשירים לרכב:
- מומלץ לכלול מצלמות עם תצוגה חיצונית אחת או יותר.
אם הטמעות של מכשירים לרכב כוללות מצלמה עם תצוגה חיצונית, המצלמה הזו:
- [7.5/A-1-1] אסור שיהיו מצלמות עם תצוגה חיצונית שאפשר לגשת אליהן דרך ממשקי ה-API של מצלמת Android, אלא אם הן עומדות בדרישות הליבה של המצלמה.
- [7.5/A-SR] מומלץ מאוד לא לסובב את התצוגה המקדימה של המצלמה או להפוך אותה אופקית.
- [7.5.5/A-SR] מומלץ מאוד למקם את המצלמה כך שהמימד הארוך שלה יהיה מקביל לאופק.
- [7.5/A-SR] מומלץ מאוד שתהיה רזולוציה של לפחות 1.3 מגה-פיקסלים.
- חובה שיהיה לו חומרה עם פוקוס קבוע או EDOF (עומק שדה מורחב).
- יכול להיות שמוטמע במנהל ההתקן של המצלמה מיקוד אוטומטי בחומרה או מיקוד אוטומטי בתוכנה.
הטמעות של מכשירים לרכב:
-
[7.6.1/A-0-1] חובה להקצות לפחות 4GB של אחסון לא נדיף לנתונים פרטיים של האפליקציה (כלומר, מחיצת /data).
-
[7.6.1/A] מומלץ לפרמט את מחיצת הנתונים כדי לשפר את הביצועים ואת אורך החיים באחסון פלאש, למשל באמצעות מערכת הקבצים
f2fs
.
אם הטמעות של מכשירים לרכב מספקות אחסון חיצוני משותף דרך חלק מהאחסון הפנימי שאי אפשר להסיר, הן:
- [7.6.1/A-SR] מומלץ מאוד לצמצם את התקורה של קלט/פלט בפעולות שמתבצעות באחסון החיצוני, למשל באמצעות
SDCardFS
.
אם ההטמעות של מכשירי Automotive הן 32 ביט:
-
[7.6.1/A-1-1] הזיכרון שזמין לליבת המערכת ולמרחב המשתמש חייב להיות לפחות 512MB אם נעשה שימוש באחת מהצפיפויות הבאות:
- 280dpi או פחות במסכים קטנים או רגילים
- ldpi או פחות במסכים גדולים במיוחד
- mdpi או נמוך יותר במסכים גדולים
-
[7.6.1/A-1-2] הזיכרון שזמין לליבת המערכת ולמרחב המשתמש חייב להיות לפחות 608MB אם נעשה שימוש באחת מהצפיפויות הבאות:
- xhdpi או יותר במסכים קטנים או רגילים
- hdpi או יותר במסכים גדולים
- mdpi או יותר במסכים גדולים במיוחד
-
[7.6.1/A-1-3] הזיכרון שזמין לליבת המערכת ולמרחב המשתמש חייב להיות לפחות 896MB אם נעשה שימוש באחת מהצפיפויות הבאות:
- 400dpi או יותר במסכים קטנים או רגילים
- xhdpi או יותר במסכים גדולים
- tvdpi או יותר במסכים גדולים במיוחד
-
[7.6.1/A-1-4] הזיכרון שזמין לליבת המערכת ולמרחב המשתמש חייב להיות לפחות 1,344MB אם נעשה שימוש באחת מהצפיפויות הבאות:
- 560dpi או יותר במסכים קטנים או רגילים
- 400dpi או יותר במסכים גדולים
- xhdpi או יותר במסכים גדולים במיוחד
אם ההטמעות של מכשירי Automotive הן 64 ביט:
-
[7.6.1/A-2-1] הזיכרון שזמין לליבת המערכת ולמרחב המשתמש חייב להיות לפחות 816MB אם נעשה שימוש באחת מהצפיפויות הבאות:
- 280dpi או פחות במסכים קטנים או רגילים
- ldpi או פחות במסכים גדולים במיוחד
- mdpi או נמוך יותר במסכים גדולים
-
[7.6.1/A-2-2] הזיכרון שזמין לליבת המערכת ולמרחב המשתמש חייב להיות לפחות 944MB אם נעשה שימוש באחת מהצפיפויות הבאות:
- xhdpi או יותר במסכים קטנים או רגילים
- hdpi או יותר במסכים גדולים
- mdpi או יותר במסכים גדולים במיוחד
-
[7.6.1/A-2-3] הזיכרון שזמין לליבה ולמרחב המשתמשים חייב להיות לפחות 1,280MB אם נעשה שימוש באחת מהצפיפויות הבאות:
- 400dpi או יותר במסכים קטנים או רגילים
- xhdpi או יותר במסכים גדולים
- tvdpi או יותר במסכים גדולים במיוחד
-
[7.6.1/A-2-4] הזיכרון שזמין לליבת המערכת ולמרחב המשתמש חייב להיות לפחות 1,824MB אם נעשה שימוש באחת מהצפיפויות הבאות:
- 560dpi או יותר במסכים קטנים או רגילים
- 400dpi או יותר במסכים גדולים
- xhdpi או יותר במסכים גדולים במיוחד
הערה: הזיכרון שזמין לליבה ולמרחב המשתמש שצוין למעלה מתייחס למרחב הזיכרון שמוקצה בנוסף לזיכרון שכבר מוקצה לרכיבי חומרה כמו רדיו, וידאו וכו' שלא נמצאים בשליטת הליבה בהטמעות של המכשיר.
הטמעות של מכשירים לרכב:
- [7.7.1/A] צריך לכלול יציאת USB שתומכת במצב ציוד היקפי.
הטמעות של מכשירים לרכב:
- [7.8.1/A-0-1] חובה לכלול מיקרופון.
הטמעות של מכשירים לרכב:
- [7.8.2/A-0-1] חובה שיהיה פלט אודיו ושהמכשיר יצהיר על
android.hardware.audio.output
.
2.5.2. מולטימדיה
הטמעות של מכשירים לרכב חייבות לתמוך בפורמטים הבאים של קידוד ופענוח אודיו, ולהפוך אותם לזמינים לאפליקציות של צד שלישי:
- [5.1/A-0-1] פרופיל MPEG-4 AAC (AAC LC)
- [5.1/A-0-2] פרופיל MPEG-4 HE AAC (AAC+)
- [5.1/A-0-3] AAC ELD (enhanced low delay AAC)
הטמעות של מכשירים לרכב חייבות לתמוך בפורמטים הבאים של קידוד וידאו ולהפוך אותם לזמינים לאפליקציות של צד שלישי:
הטמעות של מכשירים לרכב חייבות לתמוך בפורמטים הבאים של פענוח קוד של סרטונים, ולהפוך אותם לזמינים לאפליקציות של צד שלישי:
מומלץ מאוד להטמיע במכשירים לרכב תמיכה בפענוח קוד של הסרטונים הבאים:
- [5.3/A-SR] H.265 HEVC
2.5.3. תוכנות
הטמעות של מכשירים לרכב:
-
[3/A-0-1] חובה להצהיר על התכונה
android.hardware.type.automotive
. -
[3/A-0-2] חובה לתמוך ב-uiMode =
UI_MODE_TYPE_CAR
. -
[3/A-0-3] חובה לתמוך בכל ממשקי ה-API הציבוריים במרחב השמות
android.car.*
. -
[3.2.1/A-0-1] המערכת חייבת לתמוך בכל קבועי ההרשאות ולאכוף אותם, כפי שמתואר בדף העזר בנושא הרשאות לרכב.
-
[3.4.1/A-0-1] חובה לספק הטמעה מלאה של
android.webkit.Webview
API. -
[3.8.3/A-0-1] חובה להציג התראות שמשתמשות ב-API
Notification.CarExtender
כשמתקבלת בקשה מאפליקציות של צד שלישי. -
[3.8.4/A-SR] מומלץ מאוד להטמיע במכשיר עוזר וירטואלי שיטפל בפעולת העזרה.
אם הטמעות של מכשירים לרכב כוללות לחצן לדיבור, הן:
- [3.8.4/A-1-1] חובה להשתמש בלחיצה קצרה על לחצן הדיבור כדי להפעיל את אפליקציית העזרה שנבחרה על ידי המשתמש, כלומר האפליקציה שמטמיעה את
VoiceInteractionService
.
הטמעות של מכשירים לרכב:
- [3.8.3.1/A-0-1] חובה להציג את הנכסים בצורה נכונה, כפי שמתואר במסמכי ה-SDK
Notifications on Automotive OS
. - [3.8.3.1/A-0-2] חובה להציג את האפשרויות 'הפעלה' ו'השתקה' לפעולות שקשורות להתראות במקום אלה שמופיעות דרך
Notification.Builder.addAction()
- [3.8.3.1/A] מומלץ להגביל את השימוש במשימות ניהול מתקדמות, כמו אמצעי בקרה לכל ערוץ התראות. יכול להיות שיהיה שימוש בממשק משתמש לכל אפליקציה כדי לצמצם את אמצעי הבקרה.
הטמעות של מכשירים לרכב:
- [3.14/A-0-1] חובה לכלול מסגרת ממשק משתמש לתמיכה באפליקציות של צד שלישי שמשתמשות בממשקי ה-API של המדיה, כפי שמתואר בקטע 3.14.
- [3.14/A-0-2] חובה לאפשר למשתמש אינטראקציה בטוחה עם אפליקציות מדיה בזמן נהיגה.
- [3.14/A-0-3] חובה לתמוך בפעולת ה-Intent המרומזת
CAR_INTENT_ACTION_MEDIA_TEMPLATE
עם התוסףCAR_EXTRA_MEDIA_PACKAGE
. - [3.14/A-0-4] חובה לספק אפשרות ניווט אל פעילות ההעדפות של אפליקציית מדיה, אבל חובה להפעיל אותה רק כשלא חלות הגבלות על חוויית המשתמש ברכב.
- [3.14/A-0-5] חובה להציג הודעות שגיאה שמוגדרות על ידי אפליקציות מדיה, וחובה לתמוך בתוספים האופציונליים
ERROR_RESOLUTION_ACTION_LABEL
ו-ERROR_RESOLUTION_ACTION_INTENT
. - [3.14/A-0-6] חובה לתמוך באפשרות חיפוש בתוך האפליקציה באפליקציות שתומכות בחיפוש.
- [3.14/A-0-7] חובה לכבד את ההגדרות של
CONTENT_STYLE_BROWSABLE_HINT
ושלCONTENT_STYLE_PLAYABLE_HINT
כשמציגים את ההיררכיה של MediaBrowser.
אם הטמעות של מכשירים לרכב כוללות אפליקציית הפעלה שמוגדרת כברירת מחדל, הן:
- [3.14/A-1-1] חובה לכלול שירותי מדיה ולפתוח אותם באמצעות כוונת
CAR_INTENT_ACTION_MEDIA_TEMPLATE
.
הטמעות של מכשירים לרכב:
- [3.8/A] יכולות להיות הגבלות על בקשות האפליקציה כדי להגביל את האפשרות להיכנס למצב מסך מלא כפי שמתואר ב-
immersive documentation
. - [3.8/A] יכול להיות ששורת הסטטוס וסרגל הניווט יהיו גלויים בכל זמן.
- [3.8/A] יכולה להגביל את בקשות האפליקציה כדי להגביל את היכולת לשנות את הצבעים שמאחורי רכיבי ממשק המשתמש של המערכת, כדי להבטיח שהרכיבים האלה יהיו גלויים בבירור בכל עת, כפי שמתואר ב
WindowManager.LayoutParams#FLAG_TRANSLUCENT_STATUS
ובWindowManager.LayoutParams#FLAG_TRANSLUCENT_NAVIGATION
.
2.5.4. ביצועים וצריכת חשמל
הטמעות של מכשירים לרכב:
- [8.2/A-0-1] חובה לדווח על מספר הבייטים שנקראו ונכתבו לאחסון לא נדיף לכל מזהה משתמש של תהליך, כדי שהנתונים הסטטיסטיים יהיו זמינים למפתחים דרך System API
android.car.storagemonitoring.CarStorageMonitoringManager
. פרויקט הקוד הפתוח של Android עומד בדרישה באמצעות מודול הליבהuid_sys_stats
. - [8.3/A-1-3] חובה להיכנס למצב חנייה לפחות פעם אחת לפני כיבוי המכונית.
- [8.3/A-1-4] חובה להפעיל את מצב חנייה למשך 15 דקות לפחות, אלא אם:
- הסוללה מרוקנת.
- לא מתוזמנות משימות במצב המתנה.
- הנהג יוצא ממצב חנייה.
- [8.4/A-0-1] חובה לספק פרופיל צריכת חשמל לכל רכיב שמגדיר את ערך צריכת הזרם לכל רכיב חומרה ואת קצב ניקוז הסוללה המשוער שנגרם על ידי הרכיבים לאורך זמן, כפי שמתואר באתר Android Open Source Project.
- [8.4/A-0-2] חובה לדווח על כל ערכי צריכת החשמל במיליאמפר לשעה (mAh).
- [8.4/A-0-3] חובה לדווח על צריכת החשמל של המעבד (CPU) לכל UID של תהליך. פרויקט הקוד הפתוח של Android עומד בדרישה באמצעות הטמעה של מודול ליבת
uid_cputime
. - [8.4/A] צריך לשייך את צריכת החשמל לרכיב החומרה עצמו אם אי אפשר לשייך אותה לאפליקציה.
- [8.4/A-0-4] חובה להפוך את נתוני צריכת החשמל האלה לזמינים למפתח האפליקציה באמצעות פקודת ה-Shell
adb shell dumpsys batterystats
.
2.5.5. מודל אבטחה
אם הטמעות של מכשירי Automotive תומכות בכמה משתמשים, הן:
- [9.5/A-1-1] אסור לאפשר למשתמשים ליצור אינטראקציה עם משתמש המערכת ללא ממשק או לעבור אליו, למעט הקצאת הרשאות למכשיר.
- [9.5/A-1-2] המכשיר חייב לעבור למשתמש משני לפני
BOOT_COMPLETED
. - [9.5/A-1-3] חובה לתמוך ביכולת ליצור משתמש אורח גם כשמגיעים למספר המקסימלי של משתמשים במכשיר.
הטמעות של מכשירים לרכב:
- [9.11/A-0-1] חובה לגבות את ההטמעה של מאגר המפתחות באמצעות סביבת ביצוע מבודדת.
- [9.11/A-0-2] חובה להטמיע אלגוריתמים קריפטוגרפיים מסוג RSA, AES, ECDSA ו-HMAC ופונקציות גיבוב מסוג MD5, SHA1 ו-SHA-2 כדי לתמוך בצורה תקינה באלגוריתמים הנתמכים של מערכת Android Keystore באזור שמבודד בצורה מאובטחת מהקוד שפועל בקרנל ומעליו. בידוד מאובטח חייב לחסום את כל המנגנונים הפוטנציאליים שבאמצעותם קוד במצב ליבה או במרחב משתמשים יכול לגשת למצב הפנימי של הסביבה המבודדת, כולל DMA. פרויקט הקוד הפתוח של Android (AOSP) עומד בדרישה הזו באמצעות ההטמעה של Trusty, אבל אפשרות חלופית היא פתרון אחר שמבוסס על ARM TrustZone או הטמעה מאובטחת שנבדקה על ידי צד שלישי של היפר-ויז'ר מתאים שמבוסס על בידוד.
- [9.11/A-0-3] חובה לבצע את האימות במסך הנעילה בסביבת ביצוע מבודדת, ורק אם האימות מצליח, לאפשר שימוש במפתחות שקשורים לאימות. פרטי הכניסה למסך הנעילה חייבים להישמר באופן שמאפשר רק לסביבת הביצוע המבודדת לבצע אימות של מסך הנעילה. פרויקט הקוד הפתוח של Android מספק את שכבת ההפשטה של חומרה (HAL) של Gatekeeper ואת Trusty, שאפשר להשתמש בהם כדי לעמוד בדרישה הזו.
- [9.11/A-0-4] חובה לתמוך באימות מפתחות, כאשר מפתח החתימה של האימות מוגן על ידי חומרה מאובטחת והחתימה מתבצעת בחומרה מאובטחת. חובה לשתף את מפתחות החתימה של האימות במספר גדול מספיק של מכשירים כדי למנוע שימוש במפתחות כמזהי מכשירים. אחת הדרכים לעמוד בדרישה הזו היא לשתף את אותו מפתח אישור, אלא אם מיוצרות לפחות 100,000 יחידות של מק"ט נתון. אם מיוצרות יותר מ-100,000 יחידות של מק"ט מסוים, אפשר להשתמש במפתח אחר לכל 100,000 יחידות.
הערה: אם הטמעת מכשיר כבר הושקה בגרסת Android קודמת, המכשיר הזה פטור מהדרישה להשתמש במאגר מפתחות שמגובה על ידי סביבת ביצוע מבודדת ולתמוך באימות מפתחות, אלא אם הוא מצהיר על התכונה android.hardware.fingerprint
, שדורשת מאגר מפתחות שמגובה על ידי סביבת ביצוע מבודדת.
אם הטמעות של מכשירים לרכב תומכות במסך נעילה מאובטח, הן:
- [9.11/A-1-1] המערכת חייבת לאפשר למשתמש לבחור את הזמן הקצוב לתפוגה של מצב השינה למעבר ממצב לא נעול למצב נעול, עם זמן קצוב לתפוגה מינימלי של עד 15 שניות.
הטמעות של מכשירים לרכב:
- [9.14/A-0-1] חובה להגביל את הגישה להודעות ממערכות משנה של מסגרת Android ברכב, למשל באמצעות רשימת היתרים של סוגי הודעות ומקורות הודעות מורשים.
- [9.14/A-0-2] חובה להשתמש במנגנון Watchdog כדי להגן מפני התקפות מניעת שירות (DoS) מ-Android Framework או מאפליקציות של צד שלישי. ההגנה הזו מונעת מתוכנות זדוניות להציף את רשת הרכב בתנועה, מה שעלול לגרום לתת-מערכות ברכב לפעול בצורה לא תקינה.
2.5.6. תאימות של כלים ואפשרויות למפתחים
הטמעות של מכשירים לרכב:
-
Perfetto
- [6.1/A-0-1] חובה לחשוף קובץ בינארי
/system/bin/perfetto
למשתמש של מעטפת הפקודות, ששורת הפקודה שלו תהיה תואמת לתיעוד של perfetto. - [6.1/A-0-2] קובץ ה-binary של perfetto חייב לקבל כקלט קובץ הגדרה של protobuf שעומד בסכימה שמוגדרת במסמכי התיעוד של perfetto.
- [6.1/A-0-3] קובץ ה-binary של perfetto חייב לכתוב כפלט עקבות של protobuf שתואמים לסכימה שמוגדרת במסמכי התיעוד של perfetto.
- [6.1/A-0-4] חובה לספק, באמצעות קובץ הבינארי של perfetto, לפחות את מקורות הנתונים שמתוארים במסמכי התיעוד של perfetto.
- [6.1/A-0-1] חובה לחשוף קובץ בינארי
2.6. דרישות לטאבלטים
מכשיר טאבלט עם Android הוא מכשיר Android שעומד בכל הקריטריונים הבאים:
- בדרך כלל מחזיקים אותו בשתי ידיים.
- לא מדובר במכשיר עם תצורה של צדפה או במכשיר הניתן להמרה.
- כל הטמעה של מקלדת פיזית שמשמשת עם המכשיר חייבת להתחבר באמצעות חיבור רגיל.
- יש לו מקור כוח שמאפשר ניידות, כמו סוללה.
- גודל המסך באלכסון הוא בין 7 ל-18 אינץ'.
הדרישות להטמעה בטאבלטים דומות לדרישות להטמעה במכשירים ניידים. החריגים מסומנים בכוכבית (*) בקטע הזה, ומופיעים כאן כחומר עזר.
2.6.1. חומרה
גודל המסך
- [7.1.1.1/Tab-0-1] חובה שיהיה מסך בטווח של 7 עד 18 אינץ'.
Gyroscope
אם הטמעות של מכשירי טאבלט כוללות ג'ירוסקופ ב-3 צירים, הן:
- [7.3.4/Tab-1-1] המכשיר חייב להיות מסוגל למדוד שינויים בכיוון עד 1,000 מעלות לשנייה.
זיכרון ואחסון מינימליים (סעיף 7.6.1)
הדחיסויות של המסך שמפורטות בדרישות למסכים קטנים/רגילים במכשירים ניידים לא רלוונטיות לטאבלטים.
מצב ציוד היקפי בחיבור USB (סעיף 7.7.1)
אם הטמעות של מכשירי טאבלט כוללות יציאת USB שתומכת במצב ציוד היקפי, הן:
- [7.7.1/Tab] יכול להיות שיוטמע ב-API של Android Open Accessory (AOA).
מצב מציאות מדומה (סעיף 7.9.1)
מציאות מדומה עם ביצועים גבוהים (סעיף 7.9.2)
הדרישות לגבי מציאות מדומה לא חלות על טאבלטים.
2.6.2. מודל אבטחה
מפתחות ופרטי כניסה (סעיף 9.11)
עיינו בסעיף [9.11].
אם הטמעות של מכשירי טאבלט כוללות כמה משתמשים ולא מצהירות על תג התכונה android.hardware.telephony
, הן:
- [9.5/T-1-1] חובה לתמוך בפרופילים מוגבלים, תכונה שמאפשרת לבעלי המכשירים לנהל משתמשים נוספים ואת היכולות שלהם במכשיר. באמצעות פרופילים מוגבלים, בעלי המכשירים יכולים להגדיר במהירות סביבות נפרדות למשתמשים נוספים לעבודה, עם אפשרות לנהל מגבלות מפורטות יותר באפליקציות שזמינות בסביבות האלה.
אם הטמעות של מכשירי טאבלט כוללות כמה משתמשים ומוצהר על דגל התכונה android.hardware.telephony
, הן:
- [9.5/T-2-1] אסור לתמוך בפרופילים מוגבלים, אבל חובה להתאים להטמעה של אמצעי בקרה ב-AOSP כדי לאפשר למשתמשים אחרים לגשת לשיחות קוליות ולהודעות SMS או להשבית את הגישה שלהם.
3. תוכנות
3.1. תאימות מנוהלת של API
סביבת ההפעלה המנוהלת של בייטקוד Dalvik היא האמצעי העיקרי להפעלת אפליקציות ל-Android. ממשק תכנות היישומים (API) של Android הוא קבוצת הממשקים של פלטפורמת Android שנחשפים לאפליקציות שפועלות בסביבת זמן הריצה המנוהלת.
הטמעות במכשיר:
-
[C-0-1] חובה לספק הטמעות מלאות, כולל כל ההתנהגויות המתועדות, של כל API מתועד שנחשף על ידי Android SDK או כל API שמסומן בסמן '@SystemApi' בקוד המקור של Android במעלה הזרם.
-
[C-0-2] חובה לתמוך בכל המחלקות, השיטות והרכיבים המשויכים שמסומנים בהערה TestApi (@TestApi) או לשמור עליהם.
-
[C-0-3] אסור להשמיט ממשקי API מנוהלים, לשנות ממשקי API או חתימות, לחרוג מההתנהגות המתועדת או לכלול פעולות ללא שינוי, אלא אם מותר לעשות זאת באופן ספציפי בהגדרת התאימות הזו.
-
[C-0-4] חובה להשאיר את ממשקי ה-API ולפעול בצורה סבירה, גם אם מושמטות תכונות חומרה מסוימות שעבורן Android כולל ממשקי API. בקטע 7 מפורטות הדרישות הספציפיות לתרחיש הזה.
-
[C-0-5] אסור לאפשר לאפליקציות צד שלישי להשתמש בממשקים שאינם SDK, שמוגדרים כשיטות ושדות בחבילות של שפת Java שנמצאות בנתיב המחלקה של אתחול ב-AOSP, ושלא מהווים חלק מה-SDK הציבורי. הם כוללים ממשקי API עם ההערה
@hide
אבל לא עם@SystemAPI
, כפי שמתואר במסמכי ה-SDK, וגם חברים פרטיים בכיתה וחברים בכיתה שמוגבלים לחבילה. -
[C-0-6] חובה לשלוח עם כל ממשק שאינו SDK באותן רשימות מוגבלות שסופקו באמצעות הדגלים של רשימת ההיתרים הזמנית ורשימת ההיתרים החסומה בנתיב
prebuilts/runtime/appcompat/hiddenapi-flags.csv
עבור הענף המתאים של רמת ה-API ב-AOSP.אבל הם:
- יכול להיות שאם ממשק API מוסתר לא קיים או שהוא מוטמע בצורה שונה בהטמעה של המכשיר, נזיז את ממשק ה-API המוסתר לרשימת הכתובות שנחסמו או נשמיט אותו מכל הרשימות המוגבלות.
- יכול להיות שאם API מוסתר לא קיים כבר ב-AOSP, הוא יתווסף לאחת מהרשימות המוגבלות.
-
[C-0-7] חובה לתמוך במנגנון העדכון הדינמי של ההגדרה החתומה כדי להסיר ממשקים שאינם SDK מרשימה מוגבלת על ידי הטמעת הגדרה חתומה בכל חבילת APK, באמצעות המפתחות הציבוריים הקיימים ב-AOSP.
3.1.1. תוספים ל-Android
מערכת Android כוללת תמיכה בהרחבת ממשקי ה-API המנוהלים תוך שמירה על אותה גרסה של רמת ה-API.
- [C-0-1] הטמעות של מכשירי Android חייבות לטעון מראש את ההטמעה של AOSP של הספרייה המשותפת
ExtShared
ושל השירותיםExtServices
עם גרסאות שגבוהות מהגרסאות המינימליות המותרות לכל רמת API או שוות להן. לדוגמה, הטמעות של מכשירי Android 7.0, שפועלת בהם רמת API 24, חייבות לכלול לפחות גרסה 1.
3.1.2. ספריית Android
בגלל הוצאה משימוש של לקוח HTTP של Apache, הטמעות במכשירים:
- [C-0-1] אסור להציב את ספריית
org.apache.http.legacy
בנתיב האתחול. - [C-0-2] חובה להוסיף את ספריית
org.apache.http.legacy
לנתיב המחלקה של האפליקציה רק אם האפליקציה עומדת באחד מהתנאים הבאים:- מטרגטת לרמת API 28 ומטה.
- האפליקציה מצהירה בקובץ המניפסט שלה שהיא צריכה את הספרייה על ידי הגדרת המאפיין
android:name
של<uses-library>
לערךorg.apache.http.legacy
.
ההטמעה של AOSP עומדת בדרישות האלה.
3.2. תאימות API רכה
בנוסף לממשקי ה-API המנוהלים שמוזכרים בקטע 3.1, מערכת Android כוללת גם ממשק API 'רך' משמעותי שפועל רק בזמן הריצה, בצורה של פעולות Intent, הרשאות והיבטים דומים של אפליקציות ל-Android שלא ניתן לאכוף בזמן קומפילציית האפליקציה.
3.2.1. הרשאות
- [C-0-1] מפתחי מכשירים חייבים לתמוך בכל קבועי ההרשאות ולאכוף אותם, כפי שמתואר בדף ההפניה להרשאות. שימו לב שבסעיף 9 מפורטות דרישות נוספות שקשורות למודל האבטחה של Android.
3.2.2. פרמטרים של Build
ממשקי ה-API של Android כוללים מספר קבועים במחלקה android.os.Build שמיועדים לתיאור המכשיר הנוכחי.
- [C-0-1] כדי לספק ערכים עקביים ומשמעותיים בכל הטמעות המכשירים, הטבלה שלמטה כוללת הגבלות נוספות על הפורמטים של הערכים האלה, שהטמעות המכשירים חייבות להתאים להן.
פרמטר | פרטים |
---|---|
VERSION.RELEASE | הגרסה של מערכת Android שפועלת כרגע, בפורמט קריא (לבני אדם). בשדה הזה צריך להזין אחד מערכי המחרוזת שמוגדרים במאמר 10. |
גרסה.SDK | הגרסה של מערכת Android שפועלת כרגע, בפורמט שקוד האפליקציה של צד שלישי יכול לגשת אליו. ב-Android 10, השדה הזה חייב להכיל את הערך השלם 10_INT. |
VERSION.SDK_INT | הגרסה של מערכת Android שפועלת כרגע, בפורמט שקוד האפליקציה של צד שלישי יכול לגשת אליו. ב-Android 10, השדה הזה חייב להכיל את הערך השלם 10_INT. |
VERSION.INCREMENTAL | ערך שנבחר על ידי מי שמטמיע את המכשיר ומציין את הגרסה הספציפית של מערכת Android שפועלת כרגע, בפורמט שנוח לקריאה. אסור להשתמש שוב בערך הזה בגרסאות שונות שזמינות למשתמשי קצה. שימוש אופייני בשדה הזה הוא לציין את מספר ה-build או את מזהה השינוי בבקרת המקור ששימשו ליצירת ה-build. הערך בשדה הזה חייב להיות ניתן לקידוד כ-ASCII בן 7 ביט שניתן להדפסה, ולהתאים לביטוי הרגולרי '^[^ :\/~]+$'. |
משחקי לוח | ערך שנבחר על ידי מי שמטמיע את המכשיר ומזהה את החומרה הפנימית הספציפית שבה נעשה שימוש במכשיר, בפורמט שקריא לבני אדם. אפשר להשתמש בשדה הזה כדי לציין את הגרסה הספציפית של הלוח שמפעיל את המכשיר. הערך בשדה הזה חייב להיות ניתן לקידוד כ-ASCII בן 7 ביט ולהתאים לביטוי הרגולרי '^[a-zA-Z0-9_-]+$'. |
מותג | ערך שמשקף את שם המותג שמשויך למכשיר, כפי שהוא מוכר למשתמשי הקצה. הערך צריך להיות בפורמט שניתן לקריאה על ידי בני אדם, ולייצג את יצרן המכשיר או את מותג החברה שמשווקת את המכשיר. הערך בשדה הזה חייב להיות ניתן לקידוד כ-ASCII בן 7 ביט ולהתאים לביטוי הרגולרי '^[a-zA-Z0-9_-]+$'. |
SUPPORTED_ABIS | השם של ערכת ההוראות (סוג ה-CPU + מוסכמת ה-ABI) של קוד מקורי. מידע נוסף תאימות ל-API מקורי. |
SUPPORTED_32_BIT_ABIS | השם של ערכת ההוראות (סוג ה-CPU + מוסכמת ה-ABI) של קוד מקורי. מידע נוסף תאימות ל-API מקורי. |
SUPPORTED_64_BIT_ABIS | השם של קבוצת ההוראות השנייה (סוג ה-CPU + מוסכמת ה-ABI) של קוד מקורי. מידע נוסף תאימות ל-API מקורי. |
CPU_ABI | השם של ערכת ההוראות (סוג ה-CPU + מוסכמת ה-ABI) של קוד מקורי. מידע נוסף תאימות ל-API מקורי. |
CPU_ABI2 | השם של קבוצת ההוראות השנייה (סוג ה-CPU + מוסכמת ה-ABI) של קוד מקורי. מידע נוסף תאימות ל-API מקורי. |
מכשיר | ערך שנבחר על ידי מי שמטמיע את המכשיר, שמכיל את שם הפיתוח או את שם הקוד שמזהה את התצורה של תכונות החומרה והעיצוב התעשייתי של המכשיר. הערך בשדה הזה חייב להיות ניתן לקידוד כ-ASCII של 7 ביט, ולהתאים לביטוי הרגולרי '^[a-zA-Z0-9_-]+$'. שם המכשיר הזה לא יכול להשתנות במהלך חיי המוצר. |
FINGERPRINT |
מחרוזת שמזהה באופן ייחודי את הגרסה הזו. הוא צריך להיות קריא לאנשים. היא צריכה להיות בפורמט הבא:
$(BRAND)/$(PRODUCT)/ לדוגמה:
acme/myproduct/ טביעת האצבע לא יכולה לכלול רווחים. הערך בשדה הזה חייב להיות ניתן לקידוד כ-ASCII של 7 ביט. |
חומרה | השם של החומרה (משורת הפקודה של ליבת המערכת או מ-/proc). הוא צריך להיות קריא לאנשים. הערך בשדה הזה חייב להיות ניתן לקידוד כ-ASCII בן 7 ביט ולהתאים לביטוי הרגולרי '^[a-zA-Z0-9_-]+$'. |
מארח | מחרוזת שמזהה באופן ייחודי את המארח שעליו נוצרת הגרסה, בפורמט קריא. אין דרישות לגבי הפורמט הספציפי של השדה הזה, אבל אסור שהערך שלו יהיה null או מחרוזת ריקה (""). |
מזהה | מזהה שנבחר על ידי מי שמטמיע את המכשיר כדי להתייחס לגרסה ספציפית, בפורמט קריא. הערך של השדה הזה יכול להיות זהה לערך של android.os.Build.VERSION.INCREMENTAL, אבל הוא צריך להיות בעל משמעות מספקת למשתמשי הקצה כדי להבחין בין גרסאות תוכנה. הערך בשדה הזה חייב להיות ניתן לקידוד כ-ASCII בן 7 ביט ולהתאים לביטוי הרגולרי '^[a-zA-Z0-9._-]+$'. |
יצרן | השם המסחרי של יצרן הציוד המקורי (OEM) של המוצר. אין דרישות לגבי הפורמט הספציפי של השדה הזה, מלבד העובדה שהוא לא יכול להיות null או מחרוזת ריקה (""). השדה הזה לא יכול להשתנות במהלך חיי המוצר. |
MODEL | ערך שנבחר על ידי מי שמטמיע את המכשיר, שמכיל את שם המכשיר כפי שהוא מוכר למשתמש הקצה. השם הזה צריך להיות זהה לשם שמשמש לשיווק המכשיר ולמכירתו למשתמשי קצה. אין דרישות לגבי הפורמט הספציפי של השדה הזה, מלבד העובדה שהוא לא יכול להיות null או מחרוזת ריקה (""). השדה הזה לא יכול להשתנות במהלך חיי המוצר. |
מוצר | ערך שנבחר על ידי מי שמטמיע את המכשיר, שמכיל את שם הפיתוח או את שם הקוד של המוצר הספציפי (מק"ט) שחייב להיות ייחודי באותו מותג. חובה שיהיה קריא לבני אדם, אבל הוא לא בהכרח מיועד לצפייה של משתמשי קצה. הערך בשדה הזה חייב להיות ניתן לקידוד כ-ASCII בן 7 ביט ולהתאים לביטוי הרגולרי '^[a-zA-Z0-9_-]+$'. שם המוצר הזה לא יכול להשתנות במהלך חיי המוצר. |
SERIAL | חייבת להחזיר את הערך UNKNOWN. |
תגים | רשימה של תגים שמופרדים בפסיקים, שנבחרו על ידי מי שמטמיע את המכשיר, ומבחינים בין הגרסאות. התגים חייבים להיות ניתנים לקידוד כ-ASCII בן 7 ביט, להתאים לביטוי הרגולרי '^[a-zA-Z0-9._-]+' ולכלול אחד מהערכים שמתאימים לשלוש הגדרות החתימה האופייניות של פלטפורמת Android: release-keys, dev-keys ו-test-keys. |
שעה | ערך שמייצג את חותמת הזמן של מועד הבנייה. |
סוג | ערך שנבחר על ידי מי שמטמיע את המכשיר ומציין את הגדרות זמן הריצה של הגרסה. הערך בשדה הזה חייב להיות אחד מהערכים שמתאימים לשלושת ההגדרות הטיפוסיות של זמן הריצה ב-Android: user, userdebug או eng. |
משתמש | שם או מזהה משתמש של המשתמש (או משתמש אוטומטי) שיצר את ה-build. אין דרישות לגבי הפורמט הספציפי של השדה הזה, אבל אסור שהערך שלו יהיה null או מחרוזת ריקה (""). |
SECURITY_PATCH | ערך שמציין את רמת תיקון האבטחה של גרסת build. הוא חייב לציין שהגרסה לא פגיעה בשום אופן לאף אחת מהבעיות שמתוארות בחדשות האבטחה הציבוריות של Android שצוינו. התאריך צריך להיות בפורמט [YYYY-MM-DD], בהתאם למחרוזת מוגדרת שמתועדת בחדשות האבטחה הציבוריות של Android או בייעוץ בנושא אבטחה של Android. לדוגמה, 2015-11-01. |
BASE_OS | ערך שמייצג את הפרמטר FINGERPRINT של הגרסה, שזהה לגרסה הזו בכל פרט אחר מלבד התיקונים שסופקו ב-Android Public Security Bulletin. היא חייבת לדווח על הערך הנכון, ואם אין גרסה כזו, לדווח על מחרוזת ריקה (""). |
BOOTLOADER | ערך שנבחר על ידי מי שמטמיע את המכשיר ומזהה את הגרסה הספציפית של טוען האתחול הפנימי שנעשה בו שימוש במכשיר, בפורמט שקריא לבני אדם. הערך בשדה הזה חייב להיות ניתן לקידוד כ-ASCII בן 7 ביט ולהתאים לביטוי הרגולרי '^[a-zA-Z0-9._-]+$'. |
getRadioVersion() | חייב להיות ערך שנבחר על ידי מפתח המכשיר שמזהה את הגרסה הספציפית של הרדיו או המודם הפנימיים שנעשה בהם שימוש במכשיר, בפורמט שקריא לבני אדם. אם למכשיר אין רדיו או מודם פנימיים, הוא חייב להחזיר NULL. הערך בשדה הזה חייב להיות ניתן לקידוד כ-ASCII בן 7 ביט ולהתאים לביטוי הרגולרי '^[a-zA-Z0-9._-,]+$'. |
getSerial() | חייב להיות (או להחזיר) מספר סידורי של חומרה, שחייב להיות זמין וייחודי במכשירים עם אותו דגם ואותו יצרן. הערך בשדה הזה חייב להיות ניתן לקידוד כ-ASCII בן 7 ביט ולהתאים לביטוי הרגולרי '^[a-zA-Z0-9._-,]+$'. |
3.2.3. תאימות לכוונת המשתמש
3.2.3.1. כוונות של אפליקציות ליבה
אובייקטים מסוג Intent ב-Android מאפשרים לרכיבי אפליקציה לבקש פונקציונליות מרכיבי Android אחרים. פרויקט Android upstream כולל רשימה של אפליקציות שנחשבות לאפליקציות ליבה של Android, שמיישמות כמה תבניות של כוונות לביצוע פעולות נפוצות.
-
[C-0-1] הטמעות של מכשירים חייבות לטעון מראש אפליקציה אחת או יותר או רכיבי שירות עם handler של Intent, לכל התבניות של מסנן ה-Intent הציבורי שמוגדרות באפליקציות הליבה הבאות של Android ב-AOSP:
- שעון שולחני
- דפדפן
- יומן
- אנשי הקשר
- גלריה
- GlobalSearch
- מרכז האפליקציות
- מוזיקה
- הגדרות
3.2.3.2. החלטה לגבי Intent
-
[C-0-1] מכיוון ש-Android היא פלטפורמה ניתנת להרחבה, הטמעות של מכשירים חייבות לאפשר לאפליקציות של צד שלישי לבטל כל תבנית של Intent שמצוינת בקטע 3.2.3.1, למעט ההגדרות. ההטמעה של קוד פתוח ב-Android מאפשרת זאת כברירת מחדל.
-
[C-0-2] מפתחי מכשירים לא יכולים לצרף הרשאות מיוחדות לשימוש של אפליקציות מערכת בדפוסי הכוונות האלה, או למנוע מאפליקציות של צד שלישי לבצע קישור לדפוסים האלה ולהשתלט עליהם. האיסור הזה כולל במיוחד, בין היתר, השבתה של ממשק המשתמש 'בוחר' שמאפשר למשתמש לבחור בין כמה אפליקציות שכולן מטפלות באותו דפוס כוונות.
-
[C-0-3] הטמעות של מכשירים חייבות לספק למשתמשים ממשק משתמש לשינוי פעילות ברירת המחדל של כוונות.
-
עם זאת, יכול להיות שהטמעות של מכשירים יספקו פעילויות ברירת מחדל לדפוסי URI ספציפיים (למשל, http://play.google.com) אם פעילות ברירת המחדל מספקת מאפיין ספציפי יותר ל-URI של הנתונים. לדוגמה, תבנית של מסנן Intent שמציינת את ה-URI של הנתונים 'http://www.android.com' היא ספציפית יותר מתבנית ה-Intent הבסיסית של הדפדפן עבור 'http://'.
מערכת Android כוללת גם מנגנון שמאפשר לאפליקציות צד שלישי להצהיר על התנהגות ברירת מחדל סמכותית של קישור אפליקציות לסוגים מסוימים של כוונות URI באינטרנט. כשמגדירים הצהרות סמכותיות כאלה בתבניות של מסנני כוונות באפליקציה, הטמעות במכשיר:
- [C-0-4] חובה לנסות לאמת את כל מסנני ה-Intent על ידי ביצוע שלבי האימות שמוגדרים במפרט Digital Asset Links, כפי שמיושם על ידי מנהל החבילות בפרויקט Android Open Source.
- [C-0-5] חובה לנסות לאמת את מסנני הכוונות במהלך ההתקנה של האפליקציה, ולהגדיר את כל מסנני הכוונות של ה-URI שאומתו בהצלחה כמטפלים באפליקציה שמוגדרים כברירת מחדל עבור ה-URI שלהם.
- יכול להיות שיוגדרו מסנני Intent ספציפיים של URI כמטפלים באפליקציות שמוגדרות כברירת מחדל עבור ה-URI שלהם, אם הם אומתו בהצלחה אבל מסנני URI אחרים לא עברו את האימות. אם הטמעה של מכשיר עושה זאת, היא חייבת לספק למשתמש ביטולים מתאימים לכל תבנית URI בתפריט ההגדרות.
- חובה לספק למשתמשים אמצעי בקרה להגדרת קישורי אפליקציות לכל אפליקציה בהגדרות, באופן הבא:
- [C-0-6] המשתמש חייב להיות מסוגל לשנות את התנהגות ברירת המחדל של קישורי האפליקציה באופן הוליסטי, כך שהאפליקציה תמיד תיפתח, תמיד תבקש אישור או אף פעם לא תיפתח. השינוי הזה חייב לחול על כל מסנני הכוונות של ה-URI באופן שווה.
- [C-0-7] המשתמש חייב להיות מסוגל לראות רשימה של מסנני כוונות URI של מועמדים.
- יכול להיות שההטמעה במכשיר תספק למשתמש את האפשרות לבטל מסנני כוונות ספציפיים של URI מועמדים שאומתו בהצלחה, על בסיס כל מסנן כוונות.
- [C-0-8] אם הטמעת המכשיר מאפשרת לחלק ממסנני הכוונות של ה-URI של המועמד לעבור את האימות ולחלק להיכשל, הטמעת המכשיר חייבת לספק למשתמשים את האפשרות להציג ולבטל מסנני כוונות ספציפיים של ה-URI של המועמד.
3.2.3.3. מרחבי שמות של כוונות
- [C-0-1] אסור להטמעות של מכשירים לכלול רכיב Android שמכבד תבניות חדשות של Intent או של שידור Intent באמצעות ACTION, CATEGORY או מחרוזת מפתח אחרת במרחב השמות android. או com.android..
- [C-0-2] אסור למטמיעי מכשירים לכלול רכיבי Android שמכבדים תבניות חדשות של Intent או של שידור Intent באמצעות ACTION, CATEGORY או מחרוזת מפתח אחרת במרחב חבילות ששייך לארגון אחר.
- [C-0-3] יצרני מכשירים לא יכולים לשנות או להרחיב את דפוסי הכוונות שבהם משתמשות אפליקציות הליבה שמפורטות בסעיף 3.2.3.1.
- הטמעות של מכשירים עשויות לכלול דפוסי כוונות באמצעות מרחבי שמות שמשויכים בבירור ובאופן מובהק לארגון שלהם. האיסור הזה דומה לאיסור שצוין לגבי מחלקות בשפת Java בסעיף 3.6.
3.2.3.4. כוונות לשידור
אפליקציות צד שלישי מסתמכות על הפלטפורמה כדי לשדר כוונות מסוימות ולהודיע להן על שינויים בסביבת החומרה או התוכנה.
הטמעות במכשיר:
- [C-0-1] חובה לשדר את שידורי ה-Intent הציבוריים בתגובה לאירועי מערכת מתאימים, כפי שמתואר במסמכי התיעוד של ה-SDK. שימו לב שהדרישה הזו לא סותרת את סעיף 3.5, כי ההגבלה על אפליקציות שפועלות ברקע מתוארת גם במסמכי ה-SDK.
3.2.3.5. הגדרות ברירת מחדל לאפליקציות
Android כולל הגדרות שמאפשרות למשתמשים לבחור בקלות את אפליקציות ברירת המחדל שלהם, למשל עבור מסך הבית או SMS.
במקרים שבהם זה הגיוני, הטמעות של מכשירים חייבות לספק תפריט הגדרות דומה ולהיות תואמות לדפוס של מסנן הכוונות ולשיטות ה-API שמתוארות במסמכי ה-SDK כמו שמופיע בהמשך.
אם הטמעות של מכשירים מדווחות על android.software.home_screen
, הן:
- [C-1-1] חובה לכבד את הכוונה של
android.settings.HOME_SETTINGS
להציג תפריט הגדרות של אפליקציית ברירת המחדל למסך הבית.
אם הטמעות של מכשירים מדווחות על android.hardware.telephony
, הן:
-
[C-2-1] חובה לספק תפריט הגדרות שיפעיל את intent
RoleManager.createRequestRoleIntent(String)
עםRoleManager.ROLE_SMS
כדי להציג תיבת דו-שיח לשינוי אפליקציית ברירת המחדל ל-SMS. -
[C-2-2] המכשיר חייב לכבד את הכוונה של
android.telecom.action.CHANGE_DEFAULT_DIALER
להציג תיבת דו-שיח שתאפשר למשתמש לשנות את אפליקציית הטלפון שמוגדרת כברירת מחדל.- חובה להשתמש בממשק המשתמש של אפליקציית הטלפון שנבחרה כברירת מחדל לשיחות נכנסות ויוצאות, למעט שיחות חירום, שבהן יש להשתמש באפליקציית הטלפון שהותקנה מראש.
-
[C-2-3] חובה לכבד את הכוונה android.telecom.action.CHANGE_PHONE_ACCOUNTS כדי לספק למשתמש אפשרות להגדיר את
ConnectionServices
שמשויך ל-PhoneAccounts
, וגם חשבון טלפון שספק שירותי הטלקומוניקציה ישתמש בו כדי לבצע שיחות יוצאות. ההטמעה של AOSP עומדת בדרישה הזו כי היא כוללת תפריט 'אפשרויות לחשבונות לביצוע שיחות' בתפריט ההגדרות 'שיחות'. -
[C-2-4] חובה לאפשר
android.telecom.CallRedirectionService
לאפליקציה שמחזיקה בתפקידandroid.app.role.CALL_REDIRECTION
. - [C-2-5] חובה לספק למשתמש אפשרות לבחור אפליקציה עם התפקיד
android.app.role.CALL_REDIRECTION
.
אם הטמעות של מכשירים מדווחות על android.hardware.nfc.hce
, הן:
- [C-3-1] חובה לכבד את הכוונה android.settings.NFC_PAYMENT_SETTINGS כדי להציג תפריט הגדרות של אפליקציית ברירת מחדל לתשלום בטאץ'.
אם יישומי המכשיר תומכים ב-VoiceInteractionService
ויש יותר מאפליקציה אחת שמשתמשת ב-API הזה שמותקנת בכל פעם, הם:
- [C-4-1] חובה לכבד את כוונת
android.settings.ACTION_VOICE_INPUT_SETTINGS
להציג תפריט הגדרות של אפליקציית ברירת מחדל לקלט קולי ולעזרה.
3.2.4. פעילויות במסכים משניים או במספר מסכים
אם הטמעות של מכשירים מאפשרות הפעלה של פעילויות רגילות של Android ביותר ממסך אחד, הן:
- [C-1-1] חובה להגדיר את ה-feature flag
android.software.activities_on_secondary_displays
. - [C-1-2] חובה להבטיח תאימות ל-API בדומה לפעילות שמתבצעת במסך הראשי.
- [C-1-3] חובה להציג את הפעילות החדשה באותו מסך שבו הוצגה הפעילות שהפעילה אותה, אם הפעילות החדשה מופעלת בלי לציין מסך יעד באמצעות ה-API
ActivityOptions.setLaunchDisplayId()
. - [C-1-4] חובה להשמיד את כל הפעילויות, כשמסירים תצוגה עם הדגל
Display.FLAG_PRIVATE
. - [C-1-5] חובה להסתיר תוכן בצורה מאובטחת בכל המסכים כשהמכשיר נעול באמצעות מסך נעילה מאובטח, אלא אם האפליקציה בוחרת להציג תוכן מעל מסך הנעילה באמצעות API
Activity#setShowWhenLocked()
. - צריך שיהיה
android.content.res.Configuration
שמתאים לתצוגה הזו כדי שהפעילות תוצג, תפעל בצורה תקינה ותישאר תואמת אם היא תופעל בתצוגה משנית.
אם הטמעות המכשיר מאפשרות הפעלה של פעילויות רגילות ב-Android במסכים משניים, ולמסך משני יש את הדגל android.view.Display.FLAG_PRIVATE:
- [C-3-1] רק הבעלים של התצוגה, המערכת והפעילויות שכבר מוצגות בה יכולים להפעיל אותה. כל אחד יכול להפעיל את המסך עם הדגל android.view.Display.FLAG_PUBLIC.
3.3. תאימות ל-API מקורי
התאימות לקוד מקורי היא בעייתית. לכן, מי שמטמיע מכשירים:
- [SR] מומלץ מאוד להשתמש בהטמעות של הספריות שמופיעות בהמשך מתוך פרויקט הקוד הפתוח של Android.
3.3.1. Application Binary Interfaces
קוד בייט של Dalvik מנוהל יכול לקרוא לקוד מקורי שסופק בקובץ האפליקציה .apk
כקובץ ELF .so
שעבר קומפילציה לארכיטקטורת החומרה המתאימה של המכשיר. קוד Native תלוי מאוד בטכנולוגיית המעבד הבסיסית, ולכן Android מגדירה מספר ממשקי Application Binary Interface (ABI) ב-Android NDK.
הטמעות במכשיר:
- [C-0-1] חייב להיות תואם לממשקי ABI מוגדרים אחד או יותר, וליישם תאימות ל-Android NDK.
- [C-0-2] חובה לכלול תמיכה בקוד שפועל בסביבה מנוהלת כדי לבצע קריאה לקוד מקומי, באמצעות הסמנטיקה של Java Native Interface (ממשק מקומי של Java) רגיל (JNI).
- [C-0-3] חייבת להיות תאימות לקוד המקור (כלומר, תאימות לכותרת) ותאימות בינארית (ל-ABI) לכל ספרייה נדרשת ברשימה שלמטה.
- [C-0-5] חובה לדווח בצורה מדויקת על ממשק ה-ABI המקורי של האפליקציה (ABI) שנתמך על ידי המכשיר, באמצעות הפרמטרים
android.os.Build.SUPPORTED_ABIS
,android.os.Build.SUPPORTED_32_BIT_ABIS
ו-android.os.Build.SUPPORTED_64_BIT_ABIS
. כל אחד מהפרמטרים האלה הוא רשימה של ממשקי ABI מופרדים בפסיקים, בסדר עדיפות מהגבוה לנמוך. -
[C-0-6] חובה לדווח, באמצעות הפרמטרים שלמעלה, על קבוצת משנה של רשימת ה-ABI הבאה, ואסור לדווח על ABI שלא מופיע ברשימה.
-
armeabi
-
armeabi-v7a
-
arm64-v8a
-
x86
-
x86-64
-
[C-0-7] חובה להפוך את כל הספריות הבאות, שמספקות ממשקי API מקוריים, לזמינות לאפליקציות שכוללות קוד מקורי:
-
libaaudio.so (תמיכה באודיו מקורי של AAudio)
- libamidi.so (תמיכה מקורית ב-MIDI, אם התכונה
android.software.midi
מוצהרת כפי שמתואר בקטע 5.9) - libandroid.so (תמיכה בפעילות Native ב-Android)
- libc (ספריית C)
- libcamera2ndk.so
- libdl (מקשר דינמי)
- libEGL.so (ניהול מקורי של משטחי OpenGL)
- libGLESv1_CM.so (OpenGL ES 1.x)
- libGLESv2.so (OpenGL ES 2.0)
- libGLESv3.so (OpenGL ES 3.x)
- libicui18n.so
- libicuuc.so
- libjnigraphics.so
- liblog (רישום ביומן ב-Android)
- libmediandk.so (תמיכה בממשקי API מקוריים של מדיה)
- libm (ספריית מתמטיקה)
- libneuralnetworks.so (Neural Networks API)
- libOpenMAXAL.so (תמיכה ב-OpenMAX AL 1.0.1)
- libOpenSLES.so (תמיכה באודיו OpenSL ES 1.0.1)
- libRS.so
- libstdc++ (תמיכה מינימלית ב-C++)
- libvulkan.so (Vulkan)
- libz (דחיסת Zlib)
- ממשק JNI
-
-
[C-0-8] אסור להוסיף או להסיר את הפונקציות הציבוריות של הספריות המקוריות שמפורטות למעלה.
- [C-0-9] חובה לפרט את הספריות הנוספות שאינן AOSP שנחשפות ישירות לאפליקציות של צד שלישי ב-
/vendor/etc/public.libraries.txt
. - [C-0-10] אסור לחשוף ספריות מקוריות אחרות, שהוטמעו וסופקו ב-AOSP כספריות מערכת, לאפליקציות של צד שלישי שמטרגטות רמת API 24 ומעלה, כי הן שמורות.
- [C-0-11] חובה לייצא את כל סמלי הפונקציות של OpenGL ES 3.1 ושל Android Extension Pack, כפי שמוגדר ב-NDK, דרך ספריית
libGLESv3.so
. שימו לב: כל הסמלים חייבים להופיע, אבל בסעיף 7.1.4.1 מפורטות הדרישות לגבי המקרים שבהם נדרש יישום מלא של כל אחת מהפונקציות התואמות. - [C-0-12] חובה לייצא סמלי פונקציות עבור סמלי הפונקציות של ליבת Vulkan 1.0, וגם את התוספים
VK_KHR_surface
,VK_KHR_android_surface
,VK_KHR_swapchain
,VK_KHR_maintenance1
ו-VK_KHR_get_physical_device_properties2
דרך ספרייתlibvulkan.so
. שימו לב: כל הסמלים חייבים להופיע, אבל בסעיף 7.1.4.2 מפורטות הדרישות לגבי המקרים שבהם נדרש יישום מלא של כל אחת מהפונקציות המתאימות. - צריך לבנות אותו באמצעות קוד המקור וקבצי הכותרת שזמינים בפרויקט Android Open Source Project (AOSP)
שימו לב שבגרסאות עתידיות של Android יכול להיות שיתווסף תמיכה בממשקי ABI נוספים.
3.3.2. תאימות לקוד מקורי של ARM ב-32 ביט
אם הטמעות של מכשירים מדווחות על תמיכה ב-armeabi
ABI, הן:
- [C-3-1] חייב גם לתמוך ב-
armeabi-v7a
ולדווח על התמיכה בו, כיarmeabi
מיועד רק לתאימות לאחור עם אפליקציות ישנות יותר.
אם הטמעות של מכשירים מדווחות על תמיכה בממשק armeabi-v7a
ABI, לאפליקציות שמשתמשות בממשק ה-ABI הזה:
-
[C-2-1] חובה לכלול את השורות הבאות ב-
/proc/cpuinfo
, ואסור לשנות את הערכים באותו מכשיר, גם אם הם נקראים על ידי ממשקי ABI אחרים.-
Features:
, ואחריה רשימה של תכונות אופציונליות של ARMv7 CPU שהמכשיר תומך בהן. -
CPU architecture:
, ואחריו מספר שלם שמתאר את ארכיטקטורת ה-ARM הנתמכת הגבוהה ביותר של המכשיר (למשל, 8 למכשירי ARMv8).
-
-
[C-2-2] חובה לשמור תמיד על הזמינות של הפעולות הבאות, גם במקרה ש-ABI מיושם בארכיטקטורת ARMv8, באמצעות תמיכה מקומית במעבד או באמצעות אמולציה של תוכנה:
- הוראות SWP ו-SWPB.
- ההוראה SETEND.
- פעולות מחסום CP15ISB, CP15DSB ו-CP15DMB.
-
[C-2-3] חובה לכלול תמיכה בתוסף Advanced SIMD (שנקרא גם NEON).
3.4. תאימות לאינטרנט
3.4.1. תאימות ל-WebView
אם הטמעות של מכשירים מספקות הטמעה מלאה של android.webkit.Webview
API, הן:
- [C-1-1] חובה לדווח על
android.software.webview
. - [C-1-2] חובה להשתמש בגרסת ה-build של פרויקט Chromium מתוך פרויקט המקור הפתוח של Android ב-Android 10 לצורך הטמעה של
android.webkit.WebView
API. -
[C-1-3] מחרוזת סוכן המשתמש שדווחה על ידי WebView חייבת להיות בפורמט הבא:
Mozilla/5.0 (Linux; Android $(VERSION); [$(MODEL)] [Build/$(BUILD)]; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safari/537.36
- הערך של המחרוזת $(VERSION) חייב להיות זהה לערך של android.os.Build.VERSION.RELEASE.
- המחרוזת $(MODEL) יכולה להיות ריקה, אבל אם היא לא ריקה, הערך שלה חייב להיות זהה לערך של android.os.Build.MODEL.
- אפשר להשמיט את המחרוזת Build/$(BUILD), אבל אם היא מופיעה, המחרוזת $(BUILD) חייבת להיות זהה לערך של android.os.Build.ID.
- הערך של המחרוזת $(CHROMIUM_VER) חייב להיות הגרסה של Chromium בפרויקט Android Open Source Project (פרויקט קוד פתוח של Android) במעלה הזרם.
- יכול להיות שהטמעות של מכשירים לא יכללו את המילה Mobile במחרוזת של סוכן המשתמש.
-
רכיב WebView צריך לכלול תמיכה בכמה שיותר תכונות של HTML5, ואם הוא תומך בתכונה מסוימת, הוא צריך להתאים למפרט של HTML5.
-
[C-1-4] חובה להציג את התוכן שסופק או את התוכן של כתובת ה-URL המרוחקת בתהליך ששונה מהאפליקציה שיוצרת את מופע ה-WebView. תהליך הרינדור הנפרד חייב להיות בעל הרשאות נמוכות יותר, לפעול כמזהה משתמש נפרד, לא להיות בעל גישה לספריית הנתונים של האפליקציה, לא להיות בעל גישה ישירה לרשת, ולהיות בעל גישה רק לשירותי המערכת הנדרשים המינימליים דרך Binder. ההטמעה של WebView ב-AOSP עומדת בדרישה הזו.
שימו לב שאם הטמעות המכשיר הן 32 ביט או שמצהירות על דגל התכונה android.hardware.ram.low
, הן פטורות מ-C-1-3.
3.4.2. תאימות לדפדפנים
אם הטמעות המכשירים כוללות אפליקציית דפדפן עצמאית לגלישה כללית באינטרנט, הן:
- [C-1-1] חובה לתמוך בכל אחד מממשקי ה-API האלה שמשויכים ל-HTML5:
- [C-1-2] חובה לתמוך ב-webstorage API של HTML5/W3C, ומומלץ לתמוך ב-IndexedDB API של HTML5/W3C. הערה: גופי התקנים לפיתוח אתרים עוברים להעדפת IndexedDB על פני webstorage, ולכן צפוי ש-IndexedDB יהפוך לרכיב חובה בגרסה עתידית של Android.
- יכול להיות ש-MAY תשלח מחרוזת מותאמת אישית של סוכן משתמש באפליקציית הדפדפן העצמאית.
- מומלץ להטמיע תמיכה בכמה שיותר תכונות של HTML5 באפליקציית הדפדפן העצמאית (בין אם היא מבוססת על אפליקציית הדפדפן WebKit או על תחליף של צד שלישי).
עם זאת, אם הטמעות המכשירים לא כוללות אפליקציית דפדפן עצמאית, הן:
- [C-2-1] עדיין חובה לתמוך בתבניות של כוונות ציבוריות כפי שמתואר בקטע 3.2.3.1.
3.5. תאימות התנהגותית של API
הטמעות במכשיר:
- [C-0-9] חייב לוודא שתאימות התנהגותית של API חלה על כל האפליקציות המותקנות, אלא אם הן מוגבלות כפי שמתואר בקטע 3.5.1.
- [C-0-10] אסור להטמיע את הגישה של הוספה לרשימת ההיתרים שמבטיחה תאימות התנהגותית של ה-API רק לאפליקציות שנבחרו על ידי מפתחי המכשירים.
ההתנהגויות של כל אחד מסוגי ה-API (מנוהל, רך, מקורי ואינטרנט) צריכות להיות עקביות עם ההטמעה המועדפת של פרויקט הקוד הפתוח של Android. הנה כמה תחומים ספציפיים של תאימות:
- [C-0-1] מכשירים לא יכולים לשנות את ההתנהגות או את הסמנטיקה של כוונה רגילה.
- [C-0-2] אסור למכשירים לשנות את מחזור החיים או את הסמנטיקה של מחזור החיים של סוג מסוים של רכיב מערכת (כמו Service, Activity, ContentProvider וכו').
- [C-0-3] אסור למכשירים לשנות את הסמנטיקה של הרשאה רגילה.
- אסור למכשירים לשנות את המגבלות שמוחלות על אפליקציות ברקע. באופן ספציפי יותר, לגבי אפליקציות שפועלות ברקע:
- [C-0-4] הם חייבים להפסיק להפעיל קריאות חוזרות (callback) שנרשמו על ידי האפליקציה כדי לקבל פלט מ-
GnssMeasurement
ומ-GnssNavigationMessage
. - [C-0-5] הם חייבים להגביל את תדירות העדכונים שמועברים לאפליקציה דרך מחלקת ה-API
LocationManager
או דרך השיטהWifiManager.startScan()
. - [C-0-6] אם האפליקציה מטרגטת רמת API 25 ומעלה, אסור לה לאפשר רישום של מקלטי שידורים לשידורים מרומזים של כוונות Android רגילות במניפסט של האפליקציה, אלא אם כוונת השידור דורשת הרשאה מסוג
"signature"
או"signatureOrSystem"
protectionLevel
, או אם היא מופיעה ברשימת הפטורים. - [C-0-7] אם האפליקציה מטרגטת רמת API 25 ומעלה, היא חייבת להפסיק את שירותי הרקע של האפליקציה, בדיוק כמו שהאפליקציה הייתה קוראת ל-method
stopSelf()
של השירותים, אלא אם האפליקציה ממוקמת ברשימת היתרים זמנית כדי לטפל במשימה שגלויות למשתמש. - [C-0-8] אם האפליקציה מטרגטת לרמת API 25 ומעלה, היא חייבת לשחרר את נעילות ההשכמה שהיא מחזיקה.
- [C-0-4] הם חייבים להפסיק להפעיל קריאות חוזרות (callback) שנרשמו על ידי האפליקציה כדי לקבל פלט מ-
- מכשירים [C-0-9] חייבים להחזיר את ספקי האבטחה הבאים כשבעת הערכים הראשונים במערך מהשיטה
Security.getProviders()
, בסדר הנתון ועם השמות הנתונים (כפי שמוחזרים על ידיProvider.getName()
) והמחלקות, אלא אם האפליקציה שינתה את הרשימה באמצעותinsertProviderAt()
אוremoveProvider()
. יכול להיות שהמכשירים יחזירו ספקים נוספים אחרי רשימת הספקים שצוינה למטה.-
AndroidNSSP –
android.security.net.config.NetworkSecurityConfigProvider
-
AndroidOpenSSL –
com.android.org.conscrypt.OpenSSLProvider
-
CertPathProvider –
sun.security.provider.CertPathProvider
-
AndroidKeyStoreBCWorkaround –
android.security.keystore.AndroidKeyStoreBCWorkaroundProvider
-
BC -
com.android.org.bouncycastle.jce.provider.BouncyCastleProvider
-
HarmonyJSSE –
com.android.org.conscrypt.JSSEProvider
-
AndroidKeyStore –
android.security.keystore.AndroidKeyStoreProvider
-
AndroidNSSP –
הרשימה שלמעלה היא חלקית. חבילת הבדיקות לתאימות (CTS) בודקת חלקים משמעותיים בפלטפורמה כדי לוודא שההתנהגות שלהם תואמת, אבל לא את כולם. באחריות המטמיע לוודא תאימות התנהגותית לפרויקט הקוד הפתוח של Android. לכן, מומלץ למפתחי מכשירים להשתמש בקוד המקור שזמין דרך פרויקט הקוד הפתוח של Android, במקום להטמיע מחדש חלקים משמעותיים במערכת.
3.5.1. הגבלת פעילות ברקע
אם הטמעות של מכשירים מטמיעות את הגבלות האפליקציות שכלולות ב-AOSP או מרחיבות את הגבלות האפליקציות, הן:
- [C-1-1] חובה לספק למשתמש אפשרות לראות את רשימת האפליקציות המוגבלות.
- [C-1-2] חובה לספק למשתמשים אפשרות להפעיל או להשבית את ההגבלות בכל אפליקציה.
- [C-1-3] אסור להחיל הגבלות באופן אוטומטי ללא הוכחה להתנהגות של מערכת לא תקינה, אבל מותר להחיל את ההגבלות על אפליקציות אחרי זיהוי של התנהגות של מערכת לא תקינה, כמו נעילת השכמה (wakelock) שלא מסתיימת, שירותים שפועלים במשך זמן רב וקריטריונים אחרים. יכול להיות שהקריטריונים יוגדרו על ידי מפתחי המכשיר, אבל הם חייבים להיות קשורים להשפעה של האפליקציה על תקינות המערכת. אסור להשתמש בקריטריונים אחרים שלא קשורים באופן מובהק לתקינות המערכת, כמו חוסר פופולריות של האפליקציה בשוק.
- [C-1-4] אסור להחיל באופן אוטומטי הגבלות על אפליקציות כשהמשתמש השבית את ההגבלות על האפליקציות באופן ידני, ומותר להציע למשתמש להחיל הגבלות על האפליקציות.
- [C-1-5] חובה להודיע למשתמשים אם הגבלות על אפליקציות חלות על אפליקציה באופן אוטומטי.
- [C-1-6] חובה להחזיר
true
עבורActivityManager.isBackgroundRestricted()
כשהאפליקציה המוגבלת קוראת ל-API הזה. - [C-1-7] אסור להגביל את האפליקציה העליונה בחזית שבה המשתמש משתמש באופן מפורש.
- [C-1-8] חובה להשעות את ההגבלות על אפליקציה שהופכת לאפליקציה העליונה בחזית כשהמשתמש מתחיל להשתמש באופן מפורש באפליקציה שהייתה מוגבלת.
3.6. API Namespaces
מערכת Android פועלת לפי המוסכמות של מרחב השמות של החבילה והמחלקה שמוגדרות בשפת התכנות Java. כדי להבטיח תאימות לאפליקציות של צד שלישי, מפתחי מכשירים לא יכולים לבצע שינויים אסורים (כפי שמופיע בהמשך) במרחבי השמות של החבילות האלה:
-
java.*
-
javax.*
-
sun.*
-
android.*
-
androidx.*
-
com.android.*
כלומר, הם:
- [C-0-1] אסור לשנות את ממשקי ה-API שחשופים לציבור בפלטפורמת Android על ידי שינוי של חתימות של שיטות או מחלקות, או על ידי הסרה של מחלקות או שדות מחלקה.
- [C-0-2] אסור להוסיף לממשקי ה-API במרחבי השמות שלמעלה רכיבים שחשופים לציבור (כמו מחלקות או ממשקים, או שדות או שיטות למחלקות או לממשקים קיימים) או ממשקי API של בדיקות או מערכת. 'רכיב שחשוף לציבור' הוא כל מבנה שלא מסומן בסמן '@hide' כפי שמשתמשים בו בקוד המקור של Android.
מפתחי מכשירים יכולים לשנות את ההטמעה הבסיסית של ממשקי ה-API, אבל השינויים האלה:
- [C-0-3] אסור להשפיע על ההתנהגות המוצהרת ועל החתימה בשפת Java של ממשקי API שחשופים לציבור.
- [C-0-4] אסור לפרסם או לחשוף בדרך אחרת למפתחים.
עם זאת, יצרני מכשירים יכולים להוסיף ממשקי API מותאמים אישית מחוץ למרחב השמות הרגיל של Android, אבל ממשקי ה-API המותאמים אישית:
- [C-0-5] אסור להיות במרחב שמות שנמצא בבעלות של ארגון אחר או מתייחס לארגון אחר. לדוגמה, אסור למטמיעי מכשירים להוסיף ממשקי API למרחב השמות
com.google.*
או למרחב שמות דומה: רק Google יכולה לעשות זאת. באופן דומה, אסור ל-Google להוסיף ממשקי API למרחבי שמות של חברות אחרות. - [C-0-6] חובה לארוז בספרייה משותפת של Android, כדי שרק אפליקציות שמשתמשות בהן באופן מפורש (באמצעות המנגנון <uses-library>) יושפעו מהשימוש המוגבר בזיכרון של ממשקי ה-API האלה.
אם מפתח רוצה לשפר אחד ממרחבי השמות של החבילות שצוינו למעלה (למשל להוסיף פונקציונליות חדשה ושימושית ל-API קיים, או להוסיף API חדש), עליו להיכנס לכתובת source.android.com ולהתחיל את התהליך של שליחת שינויים וקוד, בהתאם למידע שמופיע באתר.
חשוב לשים לב שההגבלות שלמעלה תואמות למוסכמות הסטנדרטיות למתן שמות לממשקי API בשפת התכנות Java. המטרה של הקטע הזה היא רק לחזק את המוסכמות האלה ולהפוך אותן למחייבות באמצעות הכללה שלהן בהגדרת התאימות הזו.
3.7. תאימות בזמן ריצה
הטמעות במכשיר:
-
[C-0-1] חובה לתמוך בפורמט המלא של Dalvik Executable (DEX) ובמפרט ובסמנטיקה של Dalvik bytecode.
-
[C-0-2] חובה להגדיר את סביבות זמן הריצה של Dalvik להקצאת זיכרון בהתאם לפלטפורמת Android upstream, וכפי שמצוין בטבלה הבאה. (הגדרות של גודל המסך וצפיפות המסך מופיעות בקטע 7.1.1).
-
מומלץ להשתמש ב-Android RunTime (ART), בהטמעה של Dalvik Executable Format (פורמט קובץ הפעלה של Dalvik) ובמערכת לניהול חבילות של הטמעת ההפניה.
-
מומלץ להריץ בדיקות fuzz במצבי ביצוע שונים ובארכיטקטורות יעד שונות כדי לוודא שהיציבות של זמן הריצה. אפשר לעיין ב-JFuzz וב-DexFuzz באתר של פרויקט הקוד הפתוח של Android.
חשוב לדעת: ערכי הזיכרון שמפורטים בהמשך נחשבים לערכים מינימליים, ויכול להיות שהטמעות של מכשירים יקצו יותר זיכרון לכל אפליקציה.
פריסת המסך | דחיסות מסך | זיכרון מינימלי לאפליקציה |
---|---|---|
שעון Android | 120 dpi (ldpi) | 32MB |
140 dpi (140dpi) | ||
160 dpi (mdpi) | ||
180 dpi (180dpi) | ||
200 dpi (200dpi) | ||
213 dpi (tvdpi) | ||
220 dpi (220dpi) | 36MB | |
240 dpi (hdpi) | ||
280 dpi (280dpi) | ||
320 dpi (xhdpi) | 48MB | |
360 dpi (360dpi) | ||
400 dpi (400dpi) | 56MB | |
420 dpi (420dpi) | 64MB | |
480 dpi (xxhdpi) | 88MB | |
560 dpi (560dpi) | 112MB | |
640 dpi (xxxhdpi) | 154MB | |
קטן/רגיל | 120 dpi (ldpi) | 32MB |
140 dpi (140dpi) | ||
160 dpi (mdpi) | ||
180 dpi (180dpi) | 48MB | |
200 dpi (200dpi) | ||
213 dpi (tvdpi) | ||
220 dpi (220dpi) | ||
240 dpi (hdpi) | ||
280 dpi (280dpi) | ||
320 dpi (xhdpi) | 80MB | |
360 dpi (360dpi) | ||
400 dpi (400dpi) | 96MB | |
420 dpi (420dpi) | 112MB | |
480 dpi (xxhdpi) | 128MB | |
560 dpi (560dpi) | 192MB | |
640 dpi (xxxhdpi) | 256MB | |
גדולה | 120 dpi (ldpi) | 32MB |
140 dpi (140dpi) | 48MB | |
160 dpi (mdpi) | ||
180 dpi (180dpi) | 80MB | |
200 dpi (200dpi) | ||
213 dpi (tvdpi) | ||
220 dpi (220dpi) | ||
240 dpi (hdpi) | ||
280 dpi (280dpi) | 96MB | |
320 dpi (xhdpi) | 128MB | |
360 dpi (360dpi) | 160MB | |
400 dpi (400dpi) | 192MB | |
420 dpi (420dpi) | 228MB | |
480 dpi (xxhdpi) | 256MB | |
560 dpi (560dpi) | 384MB | |
640 dpi (xxxhdpi) | 512MB | |
xlarge | 120 dpi (ldpi) | 48MB |
140 dpi (140dpi) | 80MB | |
160 dpi (mdpi) | ||
180 dpi (180dpi) | 96MB | |
200 dpi (200dpi) | ||
213 dpi (tvdpi) | ||
220 dpi (220dpi) | ||
240 dpi (hdpi) | ||
280 dpi (280dpi) | 144MB | |
320 dpi (xhdpi) | 192MB | |
360 dpi (360dpi) | 240MB | |
400 dpi (400dpi) | 288MB | |
420 dpi (420dpi) | 336MB | |
480 dpi (xxhdpi) | 384MB | |
560 dpi (560dpi) | 576MB | |
640 dpi (xxxhdpi) | 768MB |
3.8. תאימות ממשק המשתמש
3.8.1. מרכז האפליקציות (מסך הבית)
Android כולל אפליקציית מרכז אפליקציות (מסך הבית) ותמיכה באפליקציות של צד שלישי להחלפת מרכז האפליקציות (מסך הבית) של המכשיר.
אם הטמעות המכשיר מאפשרות לאפליקציות של צד שלישי להחליף את מסך הבית של המכשיר, הן:
- [C-1-1] חובה להצהיר על תכונת הפלטפורמה
android.software.home_screen
. - [C-1-2] חובה להחזיר את האובייקט
AdaptiveIconDrawable
כשמשתמשים בתג<adaptive-icon>
באפליקציית צד שלישי כדי לספק את הסמל שלה, וכשקוראים לשיטותPackageManager
לאחזור סמלים.
אם הטמעות של מכשירים כוללות הפעלה של אפליקציית ברירת מחדל שתומכת בהצמדת קיצורי דרך בתוך האפליקציה, הן:
- [C-2-1] חובה לדווח על
true
עבורShortcutManager.isRequestPinShortcutSupported()
. - [C-2-2] חובה להציג למשתמש בקשה לפני הוספת קיצור דרך שהאפליקציות מבקשות באמצעות שיטת ה-API
ShortcutManager.requestPinShortcut()
. - [C-2-3] חובה לתמוך בקיצורי דרך מוצמדים ובקיצורי דרך דינמיים וסטטיים, כפי שמתואר בדף קיצורי הדרך של האפליקציה.
לעומת זאת, אם הטמעות המכשירים לא תומכות בהצמדת קיצורי דרך בתוך האפליקציה, הן:
- [C-3-1] חובה לדווח על
false
עבורShortcutManager.isRequestPinShortcutSupported()
.
אם הטמעות של מכשירים מטמיעות משגר ברירת מחדל שמספק גישה מהירה לקיצורי הדרך הנוספים שסופקו על ידי אפליקציות צד שלישי באמצעות API ShortcutManager, הן:
- [C-4-1] האפליקציה חייבת לתמוך בכל התכונות המתועדות של קיצורי דרך (למשל, קיצורי דרך סטטיים ודינמיים, הצמדת קיצורי דרך) וליישם באופן מלא את ממשקי ה-API של מחלקת
ShortcutManager
API.
אם הטמעות של מכשירים כוללות אפליקציית הפעלה כברירת מחדל שמציגה תגים לסמלי האפליקציות, הן:
- [C-5-1] חובה לכבד את שיטת ה-API
NotificationChannel.setShowBadge()
. במילים אחרות, אם הערך מוגדר כ-true
, מוצג רמז ויזואלי שמשויך לסמל האפליקציה. אם הערך מוגדר כ-false
בכל ערוצי ההתראות של האפליקציה, לא מוצג שום תג לסמל האפליקציה. - יכולות לבטל את התגים של סמלי האפליקציות באמצעות סכמת התגים הקניינית שלהן, אם אפליקציות צד שלישי מציינות תמיכה בסכמת התגים הקניינית באמצעות שימוש בממשקי API קנייניים, אבל מומלץ להן להשתמש במשאבים ובערכים שזמינים דרך ממשקי ה-API של תגי ההתראות שמתוארים ב-SDK, כמו
Notification.Builder.setNumber()
ו-Notification.Builder.setBadgeIconType()
API.
3.8.2. ווידג'טים
Android תומך בווידג'טים של אפליקציות צד שלישי באמצעות הגדרה של סוג רכיב, API ומחזור חיים תואמים שמאפשרים לאפליקציות לחשוף AppWidget למשתמש הקצה.
אם הטמעות המכשירים תומכות בווידג'טים של אפליקציות צד שלישי, הן:
- [C-1-1] חובה להצהיר על תמיכה בתכונת הפלטפורמה
android.software.app_widgets
. - [C-1-2] חובה לכלול תמיכה מובנית ב-AppWidgets ולחשוף אמצעים בממשק המשתמש להוספה, להגדרה, להצגה ולהסרה של AppWidgets ישירות ב-Launcher.
- [C-1-3] המכשיר חייב להיות מסוגל להציג ווידג'טים בגודל 4x4 ברשת הסטנדרטית. פרטים נוספים מופיעים בהנחיות לעיצוב ווידג'טים לאפליקציות במסמכי ה-SDK של Android.
- יכול להיות שתהיה תמיכה בווידג'טים של אפליקציות במסך הנעילה.
אם הטמעות המכשירים תומכות בווידג'טים של אפליקציות צד שלישי ובקיבוע של קיצורי דרך בתוך האפליקציה, הן:
- [C-2-1] חובה לדווח על
true
עבורAppWidgetManager.html.isRequestPinAppWidgetSupported()
. - [C-2-2] חובה להציג למשתמש בקשה לפני הוספת קיצור דרך שהאפליקציות מבקשות באמצעות שיטת ה-API
AppWidgetManager.requestPinAppWidget()
.
3.8.3. התראות
מערכת Android כוללת ממשקי API של Notification
ושל NotificationManager
שמאפשרים למפתחי אפליקציות צד שלישי להודיע למשתמשים על אירועים חשובים ולמשוך את תשומת ליבם באמצעות רכיבי החומרה (למשל, צליל, רטט ואור) ותכונות התוכנה (למשל, מגש ההתראות, סרגל המערכת) של המכשיר.
3.8.3.1. הצגת ההתראות
אם הטמעות במכשירים מאפשרות לאפליקציות צד שלישי להודיע למשתמשים על אירועים חשובים, הן:
- [C-1-1] המכשיר חייב לתמוך בהתראות שמשתמשות בתכונות חומרה, כפי שמתואר במסמכי ה-SDK, ובמידת האפשר עם חומרה להטמעה במכשיר. לדוגמה, אם הטמעת המכשיר כוללת מנגנון רטט, חובה להטמיע את ממשקי ה-API של הרטט בצורה נכונה. אם חסרה חומרה בהטמעה של מכשיר, חובה להטמיע את ממשקי ה-API המתאימים כפעולות שלא עושות כלום. התנהגות כזו מוסברת בפירוט נוסף בקטע 7.
- [C-1-2] חובה להציג בצורה נכונה את כל המשאבים (סמלים, קובצי אנימציה וכו') שמופיעים בממשקי ה-API או במדריך הסגנון של הסמלים בסרגל המצב או בסרגל המערכת, אבל אפשר לספק חוויית משתמש חלופית להתראות, שונה מזו שמסופקת על ידי הטמעת קוד המקור הפתוח של Android.
- [C-1-3] חובה לכבד ולהטמיע בצורה נכונה את ההתנהגויות שמתוארות עבור ממשקי ה-API לעדכון, להסרה ולקיבוץ של התראות.
- [C-1-4] חובה לספק את ההתנהגות המלאה של NotificationChannel API כפי שמתועד ב-SDK.
- [C-1-5] חובה לספק למשתמש אפשרות לחסום ולשנות התראות של אפליקציה מסוימת של צד שלישי בכל ערוץ ובכל רמת חבילת אפליקציה.
- [C-1-6] המכשיר חייב לספק למשתמש אפשרות להצגת ערוצי התראות שנמחקו.
- [C-1-7] חובה להציג בצורה נכונה את כל המשאבים (תמונות, סטיקרים, סמלים וכו') שסופקו דרך Notification.MessagingStyle לצד טקסט ההתראה, ללא צורך באינטראקציה נוספת של המשתמש. לדוגמה, חובה להציג את כל המשאבים, כולל סמלים שסופקו דרך android.app.Person בשיחה קבוצתית שהוגדרה דרך setGroupConversation.
- [C-SR] מומלץ מאוד להציג באופן אוטומטי למשתמש אמצעי נוחות לחסימת ההתראות של אפליקציית צד שלישי מסוימת בכל ערוץ ובכל רמת חבילת אפליקציה, אחרי שהמשתמש סגר את ההתראה מספר פעמים.
- צריכה להיות תמיכה בהתראות מתקדמות.
- צריכות להציג חלק מההתראות בעדיפות גבוהה יותר כהתראות 'שימו לב'.
- צריכה להיות למשתמש אפשרות להשהות את ההתראות.
- יכול להיות שהאפליקציה תנהל את הנראות והתזמון של מועד ההתראות שיישלחו למשתמשים מאפליקציות של צד שלישי על אירועים חשובים, כדי לצמצם בעיות בטיחות כמו הסחת דעת של הנהג.
אם ההטמעות במכשיר תומכות בהתראות עשירות, הן:
- [C-2-1] חובה להשתמש במשאבים המדויקים שסופקו דרך מחלקת
Notification.Style
API ותת-המחלקות שלה עבור רכיבי המשאבים שמוצגים. - צריך להציג כל רכיב משאב (למשל: סמל, כותרת וטקסט סיכום) שמוגדר בכיתת ה-API
Notification.Style
ובמחלקות המשנה שלה.
אם הטמעות המכשירים תומכות בהתראות קופצות: הן:
- [C-3-1] חובה להשתמש בתצוגת ההתראה הקופצת ובמשאבים כמו שמתואר במחלקת ה-API
Notification.Builder
כשמוצגות התראות קופצות. - [C-3-2] חובה להציג את הפעולות שמופיעות דרך
Notification.Builder.addAction()
יחד עם תוכן ההתראה, בלי שהמשתמש יצטרך לבצע פעולות נוספות, כפי שמתואר ב-SDK.
3.8.3.2. שירות מאזין של התראות
Android כולל את ממשקי ה-API NotificationListenerService
שמאפשרים לאפליקציות (אחרי שהמשתמש מפעיל אותם באופן מפורש) לקבל עותק של כל ההתראות כשהן מתפרסמות או מתעדכנות.
אם הטמעות של מכשירים מדווחות על דגל התכונה android.hardware.ram.normal
, הן:
- [C-1-1] חובה לעדכן באופן נכון ומהיר את ההתראות בשלמותן בכל שירותי ההאזנה המותקנים והמופעלים על ידי המשתמש, כולל כל המטא-נתונים שמצורפים לאובייקט ההתראה.
- [C-1-2] חובה לכבד את קריאת ה-API
snoozeNotification()
, לסגור את ההתראה ולבצע קריאה חוזרת אחרי משך הנודניק שהוגדר בקריאת ה-API.
אם הטמעות של מכשירים כוללות אפשרות למשתמש להשהות התראות, הן:
- [C-2-1] חובה לשקף את הסטטוס של ההתראה שהועברה למצב שינה בצורה תקינה באמצעות ממשקי ה-API הרגילים, כמו
NotificationListenerService.getSnoozedNotifications()
. - [C-2-2] חובה להציע למשתמש את האפשרות להשהות התראות מכל אפליקציה מותקנת של צד שלישי, אלא אם ההתראות הן משירותים מתמשכים או משירותים שפועלים בחזית.
3.8.3.3. DND (נא לא להפריע)
אם ההטמעות של המכשיר תומכות בתכונה 'נא לא להפריע', הן:
- [C-1-1] האפליקציה חייבת להטמיע פעילות שתגיב לאינטנט ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS, שבמקרה של הטמעות עם UI_MODE_TYPE_NORMAL חייבת להיות פעילות שבה המשתמש יכול להעניק לאפליקציה גישה להגדרות של מדיניות 'נא לא להפריע'.
- [C-1-2] חובה, אם ההטמעה במכשיר מספקת למשתמש אמצעי להענקת גישה לאפליקציות של צד שלישי להגדרת מדיניות 'לא להפריע', להציג כללים אוטומטיים למצב 'לא להפריע' שנוצרו על ידי אפליקציות לצד כללים שנוצרו על ידי המשתמש וכללים מוגדרים מראש.
- [C-1-3] האפליקציה חייבת לכבד את הערכים של
suppressedVisualEffects
שמועברים דרךNotificationManager.Policy
. אם באפליקציה הוגדרו אחד מהדגלים SUPPRESSED_EFFECT_SCREEN_OFF או SUPPRESSED_EFFECT_SCREEN_ON, האפליקציה צריכה לציין למשתמש שהאפקטים החזותיים מושבתים בתפריט ההגדרות של 'נא לא להפריע'.
3.8.4. חיפוש
Android כולל ממשקי API שמאפשרים למפתחים לשלב חיפוש באפליקציות שלהם ולחשוף את הנתונים של האפליקציה בחיפוש המערכת הגלובלי. באופן כללי, הפונקציונליות הזו כוללת ממשק משתמש יחיד בכל המערכת, שמאפשר למשתמשים להזין שאילתות, מציג הצעות בזמן ההקלדה ומציג תוצאות. ממשקי Android API מאפשרים למפתחים לעשות שימוש חוזר בממשק הזה כדי לספק חיפוש באפליקציות שלהם, ומאפשרים להם לספק תוצאות לממשק המשתמש המשותף של החיפוש הכללי.
- הטמעות של מכשירי Android צריכות לכלול חיפוש גלובלי, ממשק משתמש יחיד, משותף וכלל-מערכתי לחיפוש, שיכול להציג הצעות בזמן אמת בתגובה לקלט של המשתמש.
אם הטמעות המכשירים מטמיעות את ממשק החיפוש הגלובלי, הן:
- [C-1-1] חובה להטמיע את ממשקי ה-API שמאפשרים לאפליקציות צד שלישי להוסיף הצעות לתיבת החיפוש כשהיא פועלת במצב חיפוש גלובלי.
אם לא מותקנות אפליקציות של צד שלישי שמשתמשות בחיפוש הגלובלי:
- ההתנהגות שמוגדרת כברירת מחדל צריכה להיות הצגת תוצאות והצעות ממנוע חיפוש באינטרנט.
Android כולל גם את ממשקי ה-API של העזרה, שמאפשרים לאפליקציות לבחור כמה מידע מההקשר הנוכחי ישותף עם העוזר הדיגיטלי במכשיר.
אם הטמעות המכשירים תומכות בפעולת העזרה, הן:
- [C-2-1] חובה לציין בבירור למשתמש הקצה מתי מתבצע שיתוף של ההקשר, באחת מהדרכים הבאות:
- בכל פעם שאפליקציית העזרה ניגשת להקשר, מוצג אור לבן מסביב לקצוות המסך, שעומד בדרישות של משך ההבהוב והבהירות של הטמעת Android Open Source Project או עולה עליהן.
- באפליקציית העזרה שהותקנה מראש, צריך לספק למשתמש אפשרות גישה במרחק של פחות משני מעברים מתפריט ההגדרות של אפליקציית ברירת המחדל להזנת קולית ואפליקציית העזרה, ולשתף את ההקשר רק כשהמשתמש מפעיל את אפליקציית העזרה באופן מפורש באמצעות מילת הפעלה או הזנה של מקש הניווט של העזרה.
- [C-2-2] האינטראקציה שמוגדרת להפעלת אפליקציית העזרה, כפי שמתואר בסעיף 7.2.3, חייבת להפעיל את אפליקציית העזרה שנבחרה על ידי המשתמש, כלומר את האפליקציה שמטמיעה את
VoiceInteractionService
, או פעילות שמטפלת ב-IntentACTION_ASSIST
.
3.8.5. התראות וטוסטינג
אפליקציות יכולות להשתמש ב-API Toast
כדי להציג למשתמש הקצה מחרוזות קצרות שאינן מודאליות ונעלמות אחרי פרק זמן קצר, ולהשתמש ב-API TYPE_APPLICATION_OVERLAY
מסוג חלון כדי להציג חלונות התראה כשכבת-על מעל אפליקציות אחרות.
אם הטמעות המכשירים כוללות מסך או פלט וידאו, הן:
-
[C-1-1] חובה לספק למשתמש אמצעי נוח לחסימת אפליקציה מהצגת חלונות התראה שמשתמשים ב-
TYPE_APPLICATION_OVERLAY
. ההטמעה של AOSP עומדת בדרישה הזו באמצעות אמצעי בקרה במגש ההתראות. -
[C-1-2] חובה לכבד את Toast API ולהציג הודעות Toast מאפליקציות למשתמשי קצה באופן בולט כלשהו.
3.8.6. עיצובים
Android מספקת 'עיצובים' כמנגנון שמאפשר לאפליקציות להחיל סגנונות על פעילות או על אפליקציה שלמה.
Android כולל משפחת עיצובים מסוג Holo ו-Material כקבוצה של סגנונות מוגדרים שמפתחי אפליקציות יכולים להשתמש בהם אם הם רוצים להתאים את המראה והתחושה של עיצוב Holo כפי שהוגדר ב-Android SDK.
אם הטמעות המכשירים כוללות מסך או פלט וידאו, הן:
- [C-1-1] אסור לשנות אף אחד ממאפייני העיצוב של Holo שחשופים לאפליקציות.
- [C-1-2] חובה לתמוך במשפחת העיצוב 'Material' ואסור לשנות אף אחד ממאפייני העיצוב של Material או את הנכסים שלהם שחשופים לאפליקציות.
Android כוללת גם משפחת עיצובים בשם Device Default (ברירת מחדל של המכשיר) כקבוצה של סגנונות מוגדרים שמפתחי אפליקציות יכולים להשתמש בהם אם הם רוצים להתאים את המראה והתחושה של העיצוב של המכשיר כפי שהוגדר על ידי מי שמטמיע את המכשיר.
- יכול להיות שהטמעות של מכשירים ישנו את מאפייני העיצוב שמוגדרים כברירת מחדל במכשיר שמוצגים לאפליקציות.
מערכת Android תומכת בגרסה של עיצוב עם סרגלי מערכת שקופים למחצה, שמאפשרת למפתחי אפליקציות למלא את האזור שמאחורי סרגל הסטטוס וסרגל הניווט בתוכן של האפליקציה שלהם. כדי לאפשר חוויית פיתוח עקבית בהגדרה הזו, חשוב לשמור על הסגנון של סמל שורת הסטטוס בהטמעות שונות של מכשירים.
אם הטמעות של מכשירים כוללות שורת סטטוס של המערכת, הן:
- [C-2-1] חובה להשתמש בצבע לבן לסמלי סטטוס המערכת (כמו עוצמת האות ורמת הסוללה) ולהתראות שהמערכת מנפיקה, אלא אם הסמל מציין סטטוס בעייתי או שאפליקציה מבקשת סרגל סטטוס בהיר באמצעות הדגל SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.
- [C-2-2] הטמעות של מכשירי Android חייבות לשנות את הצבע של סמלי סטטוס המערכת לשחור (לפרטים, אפשר לעיין ב-R.style) כשבאפליקציה מוגדר סרגל סטטוס בהיר.
3.8.7. טפטים מונפשים
מערכת Android מגדירה סוג רכיב, API תואם ומחזור חיים שמאפשרים לאפליקציות לחשוף בפני משתמש הקצה "טפטים דינמיים" אחד או יותר. טפטים דינמיים הם אנימציות, דוגמאות או תמונות דומות עם יכולות קלט מוגבלות שמוצגות כטפט, מאחורי אפליקציות אחרות.
חומרה נחשבת ככזו שיכולה להריץ טפטים מונפשים באופן מהימן אם היא יכולה להריץ את כל הטפטים המונפשים, ללא הגבלות על הפונקציונליות, בקצב פריימים סביר וללא השפעות שליליות על אפליקציות אחרות. אם מגבלות בחומרה גורמות לקריסה של טפטים או אפליקציות, לפעולה לא תקינה, לצריכה מוגזמת של מעבד או סוללה, או להפעלה בקצב פריימים נמוך מדי, החומרה נחשבת כלא מתאימה להפעלת טפט דינמי. לדוגמה, יכול להיות שחלק מהטפטים הדינמיים משתמשים בהקשר של OpenGL 2.0 או 3.x כדי לבצע רינדור של התוכן שלהם. טפט דינמי לא יפעל בצורה מהימנה בחומרה שלא תומכת בכמה הקשרי OpenGL, כי השימוש בטפט דינמי בהקשר OpenGL עלול להתנגש עם אפליקציות אחרות שגם משתמשות בהקשר OpenGL.
- הטמעת טפטים דינמיים מומלצת במכשירים שבהם אפשר להפעיל טפטים דינמיים בצורה מהימנה, כפי שמתואר למעלה.
אם הטמעות של מכשירים מטמיעות טפטים דינמיים, הן:
- [C-1-1] חובה לדווח על דגל התכונה של הפלטפורמה android.software.live_wallpaper.
3.8.8. החלפת פעילות
קוד המקור של Android כולל את מסך הסקירה הכללית, ממשק משתמש ברמת המערכת למעבר בין משימות ולהצגת פעילויות ומשימות שהמשתמש ניגש אליהן לאחרונה באמצעות תמונה ממוזערת של המצב הגרפי של האפליקציה ברגע שבו המשתמש עזב את האפליקציה.
הטמעות של מכשירים, כולל מקש הניווט של פונקציית הפריטים האחרונים, כפי שמפורט בסעיף 7.2.3, עשויות לשנות את הממשק.
אם הטמעות של מכשירים, כולל מקש הניווט של הפונקציה 'אחרונים' כפי שמפורט בקטע 7.2.3, משנות את הממשק, הן:
- [C-1-1] המכשיר חייב לתמוך בהצגה של עד 7 פעילויות לפחות.
- מומלץ להציג לפחות את הכותרת של 4 פעילויות בכל פעם.
- [C-1-2] המכשיר חייב להטמיע את התנהגות הצמדת המסך ולספק למשתמש תפריט הגדרות להפעלה או להשבתה של התכונה.
- צריך להציג את צבע ההדגשה, הסמל וכותרת המסך בפריטים האחרונים.
- צריך להציג אמצעי לסגירה (x), אבל אפשר להציג אותו רק אחרי שהמשתמש מבצע אינטראקציה עם המסכים.
- מומלץ להטמיע קיצור דרך למעבר קל לפעילות הקודמת.
- צריך להפעיל את פעולת המעבר המהיר בין שתי האפליקציות שהיו בשימוש לאחרונה, כשמקישים פעמיים על מקש הפונקציה של האפליקציות האחרונות.
- צריך להפעיל את מצב המסך המפוצל של חלונות מרובים, אם הוא נתמך, כשלוחצים לחיצה ארוכה על מקש הפונקציות של הפריטים האחרונים.
- יכול להיות שיוצגו קבצים אחרונים שקשורים אחד לשני כקבוצה שזזה יחד.
- [SR] מומלץ מאוד להשתמש בממשק המשתמש של Android (או בממשק דומה שמבוסס על תמונות ממוזערות) במסך הסקירה הכללית.
3.8.9. ניהול קלט
Android כולל תמיכה בניהול קלט ותמיכה בעורכי שיטות קלט של צד שלישי.
אם ההטמעות של המכשירים מאפשרות למשתמשים להשתמש בשיטות קלט של צד שלישי במכשיר, הם:
- [C-1-1] חובה להצהיר על תכונת הפלטפורמה android.software.input_methods ולתמוך בממשקי IME API כפי שמוגדר במסמכי ה-SDK של Android.
- [C-1-2] חובה לספק מנגנון שנגיש למשתמשים כדי להוסיף ולהגדיר שיטות קלט של צד שלישי בתגובה ל-intent android.settings.INPUT_METHOD_SETTINGS.
אם הטמעות של מכשירים מצהירות על תג התכונה android.software.autofill
, הן:
- [C-2-1] חובה להטמיע באופן מלא את ממשקי ה-API
AutofillService
ו-AutofillManager
ולכבד את הכוונהandroid.settings.REQUEST_SET_AUTOFILL_SERVICE
להציג תפריט הגדרות אפליקציה שמוגדר כברירת מחדל כדי להפעיל ולהשבית את ההשלמה האוטומטית ולשנות את שירות ההשלמה האוטומטית שמוגדר כברירת מחדל עבור המשתמש.
3.8.10. שליטה בהפעלת מדיה במסך הנעילה
הוצאנו משימוש את Remote Control Client API מגרסה Android 5.0 ואילך, לטובת Media Notification Template שמאפשר לאפליקציות מדיה להשתלב עם אמצעי בקרה להפעלה שמוצגים במסך הנעילה.
3.8.11. שומרי מסך (לשעבר Dreams)
Android כולל תמיכה בשומרי מסך אינטראקטיביים, שנקראו בעבר Dreams. שומרי מסך מאפשרים למשתמשים ליצור אינטראקציה עם אפליקציות כשמכשיר שמחובר למקור מתח נמצא במצב לא פעיל או כשהוא מחובר למעמד שולחני. יכול להיות שמכשירי Android Watch יטמיעו שומרי מסך, אבל סוגים אחרים של הטמעות במכשירים צריכים לכלול תמיכה בשומרי מסך ולספק למשתמשים אפשרות הגדרה של שומרי מסך בתגובה ל-intent android.settings.DREAM_SETTINGS
.
3.8.12. מיקום
אם הטמעות של מכשירים כוללות חיישן חומרה (למשל GPS) שיכול לספק את קואורדינטות המיקום, הן
- [C-1-2] חובה להציג את הסטטוס הנוכחי של המיקום בתפריט המיקום בהגדרות.
- [C-1-3] אסור להציג מצבי מיקום בתפריט המיקום בהגדרות.
3.8.13. יוניקוד וגופן
Android כולל תמיכה בתווי האמוג'י שמוגדרים ב-Unicode 10.0.
אם הטמעות המכשירים כוללות מסך או פלט וידאו, הן:
- [C-1-1] המכשיר חייב להיות מסוגל לעבד את תווי האמוג'י האלה כגליף צבעוני.
- [C-1-2] חובה לכלול תמיכה ב:
- גופן Roboto 2 עם משקלים שונים – sans-serif-thin, sans-serif-light, sans-serif-medium, sans-serif-black, sans-serif-condensed, sans-serif-condensed-light בשפות שזמינות במכשיר.
- כיסוי מלא של Unicode 7.0 של לטינית, יוונית וקירילית, כולל הטווחים Latin Extended A, B, C ו-D, וכל הגליפים בבלוק של סמלי המטבעות ב-Unicode 7.0.
- צריכה להיות תמיכה בגוון העור ובאמוג'י של משפחות מגוונות, כפי שמפורט בדוח הטכני מספר 51 של Unicode.
אם יישומי המכשיר כוללים IME, הם:
- צריכה לספק למשתמש שיטת קלט לתווים האלה של האמוג'י.
Android כולל תמיכה בעיבוד גופנים במיאנמר. במיאנמר יש כמה גופנים שלא תואמים ל-Unicode, שנקראים בדרך כלל Zawgyi, לצורך עיבוד של שפות מיאנמר.
אם הטמעות המכשירים כוללות תמיכה בבורמזית, הן:
* [C-2-1] MUST render text with Unicode compliant font as default;
non-Unicode compliant font MUST NOT be set as default font unless the user
chooses it in the language picker.
* [C-2-2] MUST support a Unicode font and a non-Unicode compliant font if a
non-Unicode compliant font is supported on the device. Non-Unicode
compliant font MUST NOT remove or overwrite the Unicode font.
* [C-2-3] MUST render text with non-Unicode compliant font ONLY IF a
language code with [script code Qaag](
http://unicode.org/reports/tr35/#unicode_script_subtag_validity) is
specified (e.g. my-Qaag). No other ISO language or region codes (whether
assigned, unassigned, or reserved) can be used to refer to non-Unicode
compliant font for Myanmar. App developers and web page authors can
specify my-Qaag as the designated language code as they would for any
other language.
3.8.14. ריבוי חלונות
אם הטמעות של מכשירים יכולות להציג כמה פעילויות בו-זמנית, הן:
- [C-1-1] האפליקציה חייבת להטמיע מצבי ריבוי חלונות בהתאם להתנהגויות האפליקציה ולממשקי ה-API שמתוארים בתיעוד התמיכה במצב ריבוי חלונות ב-Android SDK, ולעמוד בדרישות הבאות:
- [C-1-2] חובה לכבד את
android:resizeableActivity
שהוגדר על ידי אפליקציה בקובץAndroidManifest.xml
, כפי שמתואר ב-SDK הזה. - [C-1-3] אסור להציע מצב מסך מפוצל או מצב חלונות צפים אם גובה המסך קטן מ-440dp ורוחב המסך קטן מ-440dp.
- [C-1-4] אסור לשנות את הגודל של פעילות לגודל קטן מ-220dp במצבי ריבוי חלונות, למעט במצב 'תמונה בתוך תמונה'.
- הטמעות של מכשירים עם גודל מסך
xlarge
צריכות לתמוך במצב חלונות חופשיים.
אם ההטמעות של המכשירים תומכות במצב ריבוי חלונות ובמצב מסך מפוצל, הן:
- [C-2-1] חובה לטעון מראש כברירת מחדל את משגר האפליקציות שניתן לשינוי גודל.
- [C-2-2] חובה לחתוך את הפעילות המעוגנת של חלון מפוצל מרובה חלונות, אבל מומלץ להציג חלק מהתוכן שלה, אם אפליקציית מרכז האפליקציות היא החלון הממוקד.
- [C-2-3] חובה לכבד את הערכים המוצהרים
AndroidManifestLayout_minWidth
ו-AndroidManifestLayout_minHeight
של אפליקציית מרכז האפליקציות של הצד השלישי, ולא לבטל את הערכים האלה במהלך הצגת תוכן מסוים של הפעילות המעוגנת.
אם ההטמעות של המכשירים תומכות במצב ריבוי חלונות ובמצב ריבוי חלונות של תמונה בתוך תמונה, הן:
- [C-3-1] האפליקציה חייבת להפעיל פעילויות במצב חלון צף מרובה חלונות כשהיא: * מטרגטת לרמת API 26 ומעלה ומצהירה על
android:supportsPictureInPicture
* מטרגטת לרמת API 25 ומטה ומצהירה עלandroid:resizeableActivity
וגם עלandroid:supportsPictureInPicture
. - [C-3-2] חייב לחשוף את הפעולות ב-SystemUI שלו כפי שמצוין בפעילות הנוכחית של PIP דרך ה-API
setActions()
. - [C-3-3] חובה לתמוך ביחסי גובה-רוחב של 1:2.39 ומעלה ושל 2.39:1 ומטה, כפי שמצוין בפעילות PIP באמצעות
setAspectRatio()
API. - [C-3-4] חובה להשתמש ב-
KeyEvent.KEYCODE_WINDOW
כדי לשלוט בחלון PIP. אם מצב PIP לא מוטמע, המקש חייב להיות זמין לפעילות בחזית. - [C-3-5] חובה לספק למשתמשים אפשרות לחסום את הצגת האפליקציה במצב תמונה בתוך תמונה. ההטמעה של AOSP עומדת בדרישה הזו כי יש אמצעי בקרה בחלונית ההתראות.
- [C-3-6] חובה להקצות רוחב וגובה מינימליים של 108dp לחלון PIP ורוחב מינימלי של 240dp וגובה מינימלי של 135dp לחלון PIP כאשר
Configuration.uiMode
מוגדר כ-UI_MODE_TYPE_TELEVISION
.
3.8.15. מגרעת במסך
Android תומך בחלקים חתוכים במסך, כפי שמתואר במסמך ה-SDK. API DisplayCutout
מגדיר אזור בקצה התצוגה שלא ניתן להציג בו תוכן.
אם ההטמעות במכשיר כוללות חיתוך של המסך, הן:
- [C-1-1] חובה שיהיו חריצים רק בקצוות הקצרים של המכשיר. לעומת זאת, אם יחס הגובה-רוחב של המכשיר הוא 1.0 (1:1), אסור שיהיו בו חיתוכים.
- [C-1-2] אסור שיהיה יותר מפתח אחד בכל קצה.
- [C-1-3] חובה לכבד את הדגלים של האזור החתוך במסך שהוגדרו על ידי האפליקציה באמצעות
WindowManager.LayoutParams
API, כפי שמתואר ב-SDK. - [C-1-4] חובה לדווח על ערכים נכונים לכל מדדי החיתוך שמוגדרים ב-API
DisplayCutout
.
3.9. ניהול מכשירים
Android כולל תכונות שמאפשרות לאפליקציות עם מודעות לאבטחה לבצע פונקציות ניהול מכשירים ברמת המערכת, כמו אכיפה של מדיניות סיסמאות או ביצוע מחיקה מרחוק, באמצעות Android Device Administration API.
אם הטמעות המכשירים מטמיעות את כל מגוון המדיניות של ניהול המכשיר שמוגדרת במסמכי התיעוד של Android SDK, הן:
- [C-1-1] חובה להצהיר על
android.software.device_admin
. - [C-1-2] חובה לתמוך בהקצאת הרשאות לבעלי המכשירים כפי שמתואר בסעיף 3.9.1 ובסעיף 3.9.1.1.
3.9.1 הקצאת מכשירים
3.9.1.1 הקצאת הרשאות לבעלי מכשיר
אם הטמעות של מכשירים מצהירות על android.software.device_admin
, הן:
- [C-1-1] חובה לתמוך בהרשמה של לקוח מדיניות מכשיר (DPC) כאפליקציית בעלים של מכשיר, כפי שמתואר בהמשך:
- אם עדיין לא הוגדרו נתוני משתמש בהטמעה של המכשיר:
- [C-1-3] חובה לדווח על
true
עבורDevicePolicyManager.isProvisioningAllowed(ACTION_PROVISION_MANAGED_DEVICE)
. - [C-1-4] אפליקציית ה-DPC חייבת להירשם כאפליקציית הבעלים של המכשיר בתגובה לפעולת הכוונה
android.app.action.PROVISION_MANAGED_DEVICE
. - [C-1-5] אפליקציית ה-DPC חייבת להירשם כאפליקציית בעלי המכשיר אם המכשיר מצהיר על תמיכה בתקשורת מטווח קצר (NFC) באמצעות דגל התכונה
android.hardware.nfc
ומקבל הודעת NFC שמכילה רשומה עם סוג MIMEMIME_TYPE_PROVISIONING_NFC
.
- [C-1-3] חובה לדווח על
- אם בהטמעה של המכשיר יש נתוני משתמש, היא:
- [C-1-6] חובה לדווח על
false
עבורDevicePolicyManager.isProvisioningAllowed(ACTION_PROVISION_MANAGED_DEVICE)
. - [C-1-7] אסור לרשום יותר אפליקציות DPC כאפליקציה לבעלות על המכשיר.
- [C-1-6] חובה לדווח על
- אם עדיין לא הוגדרו נתוני משתמש בהטמעה של המכשיר:
- [C-1-2] חובה לדרוש פעולה יזומה כלשהי במהלך תהליך ההקצאה כדי להסכים להגדרת האפליקציה כבעלים של המכשיר. ההסכמה יכולה להתקבל באמצעות פעולת משתמש או באמצעים תוכנתיים מסוימים במהלך הקצאת ההרשאות, אבל אסור שהיא תהיה מוצפנת או שתמנע את השימוש באפליקציות אחרות של בעלי המכשיר.
אם הטמעות של מכשירים מצהירות על android.software.device_admin
, אבל כוללות גם פתרון קנייני לניהול בעלות על המכשיר ומספקות מנגנון לקידום אפליקציה שהוגדרה בפתרון שלהן כ'שווה ערך לבעלות על המכשיר' ל'בעלות על המכשיר' הרגילה כפי שמזוהה על ידי ממשקי ה-API הרגילים של DevicePolicyManager ב-Android, הן:
- [C-2-1] חובה להטמיע תהליך לאימות האפליקציה הספציפית שמקודמת, כדי לוודא שהיא שייכת לפתרון לגיטימי לניהול מכשירים ארגוניים, וכבר הוגדרה בפתרון הקנייני כך שיהיו לה הרשאות שוות ערך להרשאות של 'בעלי המכשיר'.
- [C-2-2] חובה להציג את אותו גילוי נאות לגבי הסכמה של בעלי מכשירים ב-AOSP כמו בתהליך שהופעל על ידי
android.app.action.PROVISION_MANAGED_DEVICE
לפני שמצטרפים לאפליקציית ה-DPC בתור 'בעלי מכשיר'. - יכול להיות שיהיו נתוני משתמשים במכשיר לפני שרושמים את אפליקציית ה-DPC כ'בעלים של המכשיר'.
3.9.1.2 הקצאת פרופילים מנוהלים
אם הטמעות של מכשירים מצהירות על android.software.managed_users
, הן:
-
[C-1-1] חובה להטמיע את ממשקי ה-API שמאפשרים לאפליקציית Device Policy Controller (DPC) להפוך לבעלים של פרופיל מנוהל חדש.
-
[C-1-2] תהליך הקצאת ההרשאות לפרופיל המנוהל (התהליך שמופעל על ידי android.app.action.PROVISION_MANAGED_PROFILE) שמוצג למשתמשים חייב להיות תואם להטמעה של AOSP.
-
[C-1-3] חובה לספק את אמצעי הנוחות הבאים למשתמשים בהגדרות, כדי לציין למשתמש מתי פונקציית מערכת מסוימת הושבתה על ידי בקר מדיניות המכשיר (DPC):
- סמל עקבי או אמצעי אחר שמאפשר למשתמש לדעת (לדוגמה, סמל המידע של AOSP במעלה הזרם) שמנהל המכשיר הגביל הגדרה מסוימת.
- הודעת הסבר קצרה, כפי שסופקה על ידי מנהל המכשיר באמצעות
setShortSupportMessage
. - הסמל של אפליקציית ה-DPC.
3.9.2 תמיכה בפרופילים מנוהלים
אם הטמעות של מכשירים מצהירות על android.software.managed_users
, הן:
- [C-1-1] חובה לתמוך בפרופילים מנוהלים באמצעות ממשקי ה-API של
android.app.admin.DevicePolicyManager
. - [C-1-2] המכשיר חייב לאפשר יצירה של פרופיל מנוהל אחד בלבד.
- [C-1-3] חובה להשתמש בתג סמל (בדומה לתג העבודה של AOSP upstream) כדי לייצג את האפליקציות והווידג'טים המנוהלים ורכיבי ממשק משתמש אחרים עם תגים, כמו 'אחרונים' ו'התראות'.
- [C-1-4] חובה להציג סמל של התראה (בדומה לתג העבודה של AOSP upstream) כדי לציין מתי המשתמש נמצא באפליקציה של פרופיל מנוהל.
- [C-1-5] חובה להציג הודעה קצרה שמעידה על כך שהמשתמש נמצא בפרופיל המנוהל אם וכאשר המכשיר מתעורר (ACTION_USER_PRESENT) והאפליקציה בחזית נמצאת בפרופיל המנוהל.
- [C-1-6] אם קיים פרופיל מנוהל, חובה להציג אמצעי ויזואלי ב 'בוחר' הכוונות כדי לאפשר למשתמש להעביר את הכוונה מהפרופיל המנוהל למשתמש הראשי או להיפך, אם הופעל על ידי בקר מדיניות המכשיר.
- [C-1-7] אם קיים פרופיל מנוהל, חובה לחשוף את האפשרויות הבאות למשתמש הראשי ולפרופיל המנוהל:
- הפרדה בין השימוש בסוללה, במיקום, בנתונים בחבילת הגלישה ובאחסון של המשתמש הראשי ושל הפרופיל המנוהל.
- ניהול עצמאי של אפליקציות VPN שהותקנו בפרופיל הראשי או בפרופיל מנוהל.
- ניהול עצמאי של אפליקציות שהותקנו בפרופיל הראשי של המשתמש או בפרופיל מנוהל.
- ניהול עצמאי של חשבונות בתוך הפרופיל הראשי או הפרופיל המנוהל.
- [C-1-8] חובה לוודא שאפליקציות החייגן, אנשי הקשר וההודעות שמותקנות מראש יכולות לחפש מידע על המתקשר ולבדוק אותו בפרופיל המנוהל (אם קיים) לצד המידע מהפרופיל הראשי, אם בקר מדיניות המכשיר מאפשר זאת.
- [C-1-9] חייב לוודא שהוא עומד בכל דרישות האבטחה שחלות על מכשיר עם מספר משתמשים מופעלים (ראו סעיף 9.5), גם אם הפרופיל המנוהל לא נספר כמשתמש נוסף בנוסף למשתמש הראשי.
- [C-1-10] המכשיר חייב לתמוך באפשרות לציין מסך נעילה נפרד שעומד בדרישות הבאות כדי להעניק גישה לאפליקציות שפועלות בפרופיל מנוהל.
- הטמעות במכשיר חייבות לכבד את כוונת
DevicePolicyManager.ACTION_SET_NEW_PASSWORD
ולהציג ממשק להגדרת אמצעי אימות נפרד לנעילת המסך של הפרופיל המנוהל. - פרטי הכניסה לנעילת המסך של הפרופיל המנוהל חייבים להשתמש באותם מנגנונים לאחסון ולניהול של פרטי הכניסה כמו בפרופיל ההורה, כפי שמתואר באתר של פרויקט קוד פתוח של Android.
- מדיניות הסיסמאות של ה-DPC חייבת לחול רק על פרטי הכניסה של מסך הנעילה של הפרופיל המנוהל, אלא אם היא מופעלת על ידי מופע
DevicePolicyManager
שמוחזר על ידי getParentProfileInstance.
- הטמעות במכשיר חייבות לכבד את כוונת
- כשמוצגים אנשי קשר מהפרופיל המנוהל ביומן השיחות שהותקן מראש, בממשק המשתמש של השיחה, בהתראות על שיחות פעילות ושיחות שלא נענו, באנשי הקשר ובאפליקציות להעברת הודעות, הם צריכים להיות מסומנים באותו תג שמשמש לסימון אפליקציות של פרופילים מנוהלים.
3.9.3 תמיכה במשתמשים מנוהלים
אם הטמעות של מכשירים מצהירות על android.software.managed_users
, הן:
- [C-1-1] חובה לספק למשתמש אפשרות להתנתק מהמשתמש הנוכחי ולחזור למשתמש הראשי בסשן עם כמה משתמשים, כש-
isLogoutEnabled
מחזירהtrue
. האפשרות למשתמש צריכה להיות נגישה ממסך הנעילה בלי לבטל את נעילת המכשיר.
3.10. נגישות
Android מספק שכבת נגישות שעוזרת למשתמשים עם מוגבלויות לנווט במכשירים שלהם בקלות רבה יותר. בנוסף, מערכת Android מספקת ממשקי API של פלטפורמה שמאפשרים הטמעה של שירותי נגישות כדי לקבל קריאות חוזרות לאירועי משתמש ומערכת, וליצור מנגנוני משוב חלופיים, כמו המרת טקסט לדיבור, משוב הפטי וניווט באמצעות כדור עקיבה או מקשי חצים.
אם הטמעות המכשירים תומכות בשירותי נגישות של צד שלישי, הן:
- [C-1-1] חובה לספק הטמעה של מסגרת הנגישות של Android, כפי שמתואר בתיעוד של ערכת ה-SDK בנושא ממשקי API לנגישות.
- [C-1-2] חובה ליצור אירועי נגישות ולספק את
AccessibilityEvent
המתאים לכל הטמעותAccessibilityService
רשומות, כפי שמתואר ב-SDK. - [C-1-3] חובה לכבד את הכוונה של
android.settings.ACCESSIBILITY_SETTINGS
לספק מנגנון נגיש למשתמש להפעלה ולהשבתה של שירותי הנגישות של צד שלישי לצד שירותי הנגישות שהותקנו מראש. - [C-1-4] חובה להוסיף לחלק העליון של המסך לחצן שמאפשר למשתמש לשלוט בשירות הנגישות, כששירותי הנגישות המופעלים מציינים את
AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON
. שימו לב: הדרישה הזו לא רלוונטית להטמעות של מכשירים ללא סרגל ניווט במערכת, אבל בהטמעות של מכשירים צריך לספק למשתמשים אפשרות לשלוט בשירותי הנגישות האלה.
אם הטמעות המכשירים כוללות שירותי נגישות שהותקנו מראש, הם:
- [C-2-1] חובה להטמיע את שירותי הנגישות האלה שמותקנים מראש כאפליקציות Direct Boot Aware כשנתוני האחסון מוצפנים באמצעות הצפנה מבוססת-קובץ (FBE).
- מומלץ לספק מנגנון בתהליך ההגדרה הראשונית שיאפשר למשתמשים להפעיל שירותי נגישות רלוונטיים, וגם אפשרויות להתאמת גודל הגופן, גודל התצוגה ומחוות ההגדלה.
3.11. המרת טקסט לדיבור (TTS)
Android כולל ממשקי API שמאפשרים לאפליקציות להשתמש בשירותי המרת טקסט לדיבור (TTS), ומאפשרים לספקי שירותים לספק הטמעות של שירותי TTS.
אם הטמעות של מכשירים מדווחות על התכונה android.hardware.audio.output, הן:
- [C-1-1] חובה לתמוך בממשקי ה-API של Android TTS framework.
אם הטמעות המכשירים תומכות בהתקנה של מנועי TTS של צד שלישי, הן:
- [C-2-1] חובה לספק למשתמש אפשרות לבחור מנוע TTS לשימוש ברמת המערכת.
3.12. TV Input Framework
מסגרת הקלט (TIF) של Android TV מפשטת את העברת התוכן בשידור חי למכשירי Android TV. TIF מספק API סטנדרטי ליצירת מודולים של קלט ששולטים במכשירי Android TV.
אם הטמעות המכשירים תומכות ב-TIF, הן:
- [C-1-1] חובה להצהיר על תכונת הפלטפורמה
android.software.live_tv
. - [C-1-2] המכשיר חייב לתמוך בכל ממשקי ה-API של TIF, כך שאפשר יהיה להתקין ולהשתמש במכשיר באפליקציה שמשתמשת בממשקי ה-API האלה ובשירות הקלט של צד שלישי שמבוסס על TIF.
3.13. הגדרות מהירות
Android מספק רכיב UI של הגדרות מהירות שמאפשר גישה מהירה לפעולות שמשתמשים בהן לעיתים קרובות או שנדרשות בדחיפות.
אם הטמעות המכשירים כוללות רכיב UI של הגדרות מהירות, הן:
- [C-1-1] חובה לאפשר למשתמש להוסיף או להסיר את האריחים שסופקו באמצעות ממשקי ה-API של
quicksettings
מאפליקציית צד שלישי. - [C-1-2] אסור להוסיף באופן אוטומטי לחצן מאפליקציה של צד שלישי ישירות להגדרות המהירות.
- [C-1-3] חובה להציג את כל הכפתורים שנוספו על ידי המשתמש מאפליקציות של צד שלישי לצד הכפתורים של ההגדרות המהירות שסופקו על ידי המערכת.
3.14. ממשק משתמש של מדיה
אם הטמעות של מכשירים כוללות אפליקציות שלא מופעלות באמצעות קול (האפליקציות) שמבצעות אינטראקציה עם אפליקציות של צד שלישי באמצעות MediaBrowser
או MediaSession
, האפליקציות:
-
[C-1-2] חובה להציג באופן ברור סמלים שהתקבלו באמצעות getIconBitmap() או getIconUri() וכותרות שהתקבלו באמצעות getTitle(), כפי שמתואר במאמר
MediaDescription
. יכול להיות שהמערכת תקצר את השמות כדי לעמוד בתקנות הבטיחות (למשל, הסחת דעת של הנהג). -
[C-1-3] חובה להציג את סמל האפליקציה של הצד השלישי בכל פעם שמוצג תוכן שסופק על ידי האפליקציה הזו של הצד השלישי.
-
[C-1-4] המערכת חייבת לאפשר למשתמש ליצור אינטראקציה עם ההיררכיה המלאה של
MediaBrowser
. יכול להיות שהגישה לחלק מההיררכיה תוגבל כדי לעמוד בתקנות בטיחות (למשל: הסחת דעת של הנהג), אבל אסור להעניק יחס מועדף על סמך תוכן או ספק תוכן. -
[C-1-5] המכשיר חייב להתייחס ללחיצה כפולה על
KEYCODE_HEADSETHOOK
או עלKEYCODE_MEDIA_PLAY_PAUSE
כאלKEYCODE_MEDIA_NEXT
עבורMediaSession.Callback#onMediaButtonEvent
.
3.15. אפליקציות ללא התקנה
הטמעות במכשירים חייבות לעמוד בדרישות הבאות:
- [C-0-1] לאפליקציות ללא התקנה מותרות רק הרשאות שהערך
android:protectionLevel
שלהן מוגדר כ-"instant"
. - [C-0-2] לאפליקציות ללא התקנה אסור לקיים אינטראקציה עם אפליקציות מותקנות באמצעות intent מרומז, אלא אם אחד מהתנאים הבאים מתקיים:
- מסנן דפוסי ה-Intent של הרכיב חשוף ויש לו CATEGORY_BROWSABLE
- הפעולה היא אחת מהפעולות ACTION_SEND, ACTION_SENDTO, ACTION_SEND_MULTIPLE
- היעד נחשף באופן מפורש באמצעות android:visibleToInstantApps
- [C-0-3] אסור לאפליקציות ללא התקנה ליצור אינטראקציה באופן מפורש עם אפליקציות מותקנות, אלא אם הרכיב נחשף באמצעות android:visibleToInstantApps.
- [C-0-4] אפליקציות מותקנות לא יכולות לראות פרטים על אפליקציות ללא התקנה במכשיר, אלא אם האפליקציה ללא התקנה מתחברת באופן מפורש לאפליקציה המותקנת.
- ההטמעות במכשירים חייבות לספק את האפשרויות הבאות למשתמשים כדי ליצור אינטראקציה עם אפליקציות ללא התקנה. מערכת AOSP עומדת בדרישות עם ממשק המשתמש, ההגדרות וה-Launcher של המערכת שמוגדרים כברירת מחדל. הטמעות של מכשירים:
- [C-0-5] חובה לספק למשתמש אפשרות לצפייה באפליקציות ללא התקנה ששמורות במטמון באופן מקומי, ולמחיקה שלהן, לכל חבילת אפליקציה בנפרד.
- [C-0-6] חובה לספק התראה קבועה למשתמש שאפשר לכווץ בזמן שאפליקציה מיידית פועלת בחזית. ההתראה הזו למשתמשים צריכה לכלול את המידע שאפליקציות ללא התקנה לא דורשות התקנה, ולספק למשתמש אפשרות לעבור למסך פרטי האפליקציה בהגדרות. באפליקציות ללא התקנה שמופעלות באמצעות כוונות אינטרנט, כפי שמוגדרות באמצעות כוונה עם פעולה שמוגדרת ל-
Intent.ACTION_VIEW
ועם סכימה של http או https, צריך לאפשר למשתמש לא להפעיל את האפליקציה ללא התקנה ולהפעיל את הקישור המשויך באמצעות דפדפן האינטרנט שהוגדר, אם דפדפן זמין במכשיר. - [C-0-7] חובה לאפשר גישה להפעלת אפליקציות מיידיות מהפונקציה 'אחרונים', אם הפונקציה הזו זמינה במכשיר.
3.16. התאמת מכשיר נלווה
Android כולל תמיכה בהתאמה של מכשירים נלווים כדי לנהל בצורה יעילה יותר את השיוך למכשירים נלווים, ומספק את CompanionDeviceManager
API לאפליקציות כדי לגשת לתכונה הזו.
אם הטמעות המכשירים תומכות בתכונת ההתאמה של מכשיר משני, הן:
- [C-1-1] חובה להצהיר על ה-feature flag
FEATURE_COMPANION_DEVICE_SETUP
. - [C-1-2] חובה לוודא שממשקי ה-API בחבילה
android.companion
מוטמעים באופן מלא. - [C-1-3] המערכת חייבת לספק למשתמש אמצעים לבחירה או לאישור של מכשיר משני שקיים ופועל.
3.17. אפליקציות כבדות
אם הטמעות של מכשירים מצהירות על התכונה FEATURE_CANT_SAVE_STATE
, אז הן:
- [C-1-1] בכל רגע נתון, במערכת יכולה לפעול רק אפליקציה אחת מותקנת שמציינת
cantSaveState
. אם המשתמש יוצא מאפליקציה כזו בלי לצאת ממנה באופן מפורש (לדוגמה, אם הוא לוחץ על לחצן הבית בזמן שהוא עוזב פעילות פעילה במערכת, במקום ללחוץ על לחצן החזרה כשאין פעילויות פעילות במערכת), אז הטמעות במכשיר חייבות לתת לאפליקציה הזו עדיפות ב-RAM, כמו שהן עושות לגבי דברים אחרים שאמורים להמשיך לפעול, כמו שירותים בחזית. כשאפליקציה כזו פועלת ברקע, המערכת עדיין יכולה להחיל עליה תכונות לניהול צריכת חשמל, כמו הגבלת הגישה למעבד ולרשת. - [C-1-2] חובה לספק ממשק משתמש שמאפשר לבחור את האפליקציה שלא תשתתף במנגנון הרגיל של שמירה ושחזור מצב, אחרי שהמשתמש מפעיל אפליקציה שנייה שהוגדרה עם מאפיין
cantSaveState
. - [C-1-3] אסור להחיל שינויים אחרים במדיניות על אפליקציות שצוין בהן
cantSaveState
, כמו שינוי ביצועי המעבד או שינוי סדר העדיפויות בתזמון.
אם בהטמעות של מכשירים לא מצהירים על התכונה FEATURE_CANT_SAVE_STATE
, אז:
- [C-1-1] חובה להתעלם מהמאפיין
cantSaveState
שהוגדר על ידי האפליקציות, ואסור לשנות את התנהגות האפליקציה על סמך המאפיין הזה.
4. תאימות של חבילות אפליקציות
הטמעות במכשירים:
- [C-0-1] חייב להיות מסוגל להתקין ולהפעיל קובצי Android (.apk) שנוצרו על ידי הכלי aapt שכלול ב-Android SDK הרשמי.
- הדרישה שלמעלה עשויה להיות מאתגרת, ולכן מומלץ להשתמש במערכת לניהול חבילות של הטמעת ההפניה של AOSP.
הטמעות במכשיר:
- [C-0-2] חובה לתמוך באימות קובצי .apk באמצעות APK Signature Scheme v3 , APK Signature Scheme v2 וחתימה על JAR.
- [C-0-3] אסור להרחיב את הפורמטים .apk, Android Manifest, Dalvik bytecode או RenderScript bytecode באופן שימנע את ההתקנה וההפעלה התקינות של הקבצים האלה במכשירים תואמים אחרים.
-
[C-0-4] אסור לאפשר לאפליקציות אחרות מלבד 'המתקין הרשמי' הנוכחי של החבילה להסיר את האפליקציה בשקט ללא אישור המשתמש, כפי שמתואר ב-SDK לגבי ההרשאה
DELETE_PACKAGE
. החריגים היחידים הם אפליקציית אימות חבילות המערכת שמטפלת ב-Intent PACKAGE_NEEDS_VERIFICATION ואפליקציית ניהול האחסון שמטפלת ב-Intent ACTION_MANAGE_STORAGE. -
[C-0-5] חובה שתהיה פעילות שמטפלת באובייקט מסוג Intent
android.settings.MANAGE_UNKNOWN_APP_SOURCES
. -
[C-0-6] אסור להתקין חבילות אפליקציה ממקורות לא מוכרים, אלא אם האפליקציה שמבקשת את ההתקנה עומדת בכל הדרישות הבאות:
- האפליקציה צריכה להצהיר על ההרשאה
REQUEST_INSTALL_PACKAGES
או שהערך שלandroid:targetSdkVersion
צריך להיות 24 או פחות. - המשתמש חייב להעניק לאפליקציה הרשאה להתקין אפליקציות ממקורות לא מוכרים.
- האפליקציה צריכה להצהיר על ההרשאה
-
מומלץ לספק למשתמשים אפשרות להעניק או לבטל את ההרשאה להתקין אפליקציות ממקורות לא ידועים לכל אפליקציה, אבל אפשר גם לבחור ליישם את זה כפעולה שלא משפיעה על כלום ולהחזיר
RESULT_CANCELED
עבורstartActivityForResult()
, אם ההטמעה במכשיר לא רוצה לאפשר למשתמשים לבחור. עם זאת, גם במקרים כאלה, הם צריכים להסביר למשתמש למה לא מוצגת לו אפשרות כזו. -
[C-0-7] חובה להציג למשתמש תיבת דו-שיח עם מחרוזת האזהרה שסופקה דרך ממשק ה-API של המערכת
PackageManager.setHarmfulAppWarning
לפני הפעלת פעילות באפליקציה שסומנה על ידי אותו ממשק API של המערכתPackageManager.setHarmfulAppWarning
כאפליקציה שעלולה להזיק. - מומלץ לספק למשתמשים אפשרות לבחור להסיר או להפעיל אפליקציה בתיבת הדו-שיח של האזהרה.
5. תאימות למולטימדיה
הטמעות במכשיר:
- [C-0-1] חובה לתמוך בפורמטים של מדיה, במקודדים, במפענחים, בסוגי קבצים ובפורמטים של קונטיינרים שמוגדרים בקטע 5.1 לכל קודק שמוצהר על ידי
MediaCodecList
. - [C-0-2] חובה להצהיר ולדווח על תמיכה במקודדים ובפענוחים שזמינים לאפליקציות של צד שלישי באמצעות
MediaCodecList
. - [C-0-3] חובה שתהיה אפשרות לפענח בצורה תקינה את כל הפורמטים שהמכשיר יכול לקודד, ולהפוך אותם לזמינים לאפליקציות של צד שלישי. זה כולל את כל זרמי הביטים שהמקודדים שלו יוצרים ואת הפרופילים שמדווחים ב-
CamcorderProfile
.
הטמעות במכשיר:
- מומלץ לשאוף לזמן אחזור מינימלי של קודק, במילים אחרות, הם
- אסור לצרוך ולאחסן מאגרי קלט, ויש להחזיר מאגרי קלט רק אחרי העיבוד.
- אסור לשמור מאגרי נתונים מפוענחים למשך זמן ארוך יותר מהזמן שצוין בתקן (למשל SPS).
- אסור לשמור מאגרי נתונים זמניים מקודדים למשך זמן ארוך יותר מהנדרש על ידי מבנה ה-GOP.
כל רכיבי ה-codec שמפורטים בקטע הבא מסופקים כהטמעות תוכנה בהטמעה המועדפת של Android מתוך פרויקט הקוד הפתוח של Android.
חשוב לציין ש-Google ו-Open Handset Alliance לא מצהירות שהקודקים האלה חופשיים מפטנטים של צדדים שלישיים. למי שמתכוון להשתמש בקוד המקור הזה במוצרי חומרה או תוכנה, מומלץ לדעת שיישומים של הקוד הזה, כולל בתוכנות קוד פתוח או בתוכנות שיתופיות, עשויים לדרוש רישיונות פטנט מבעלי הפטנט הרלוונטיים.
5.1. קודקים של מדיה
5.1.1. קידוד אודיו
פרטים נוספים זמינים בקטע 5.1.3. פרטים על קודק אודיו.
אם הטמעות של מכשירים מצהירות על android.hardware.microphone
, הן חייבות לתמוך בקידוד של פורמטי האודיו הבאים ולהפוך אותם לזמינים לאפליקציות של צד שלישי:
- [C-1-1] PCM/WAVE
- [C-1-2] FLAC
- [C-1-3] Opus
כל מקודדי האודיו חייבים לתמוך ב:
- [C-3-1] מסגרות אודיו של סדר בתים מקוריים של PCM 16-bit דרך ממשק API
android.media.MediaCodec
.
5.1.2. פענוח אודיו
פרטים נוספים זמינים בקטע 5.1.3. פרטים על קודק אודיו.
אם הטמעות של מכשירים מצהירות על תמיכה בתכונה android.hardware.audio.output
, הן חייבות לתמוך בפענוח של פורמטי האודיו הבאים:
- [C-1-1] פרופיל MPEG-4 AAC (AAC LC)
- [C-1-2] פרופיל MPEG-4 HE AAC (AAC+)
- [C-1-3] פרופיל MPEG-4 HE AACv2 (משופר AAC+)
- [C-1-4] AAC ELD (קידוד AAC עם השהיה נמוכה משופרת)
- [C-1-11] xHE-AAC (פרופיל HE AAC מורחב של ISO/IEC 23003-3, שכולל את פרופיל הבסיס של USAC ואת פרופיל בקרת הטווח הדינמי של ISO/IEC 23003-4)
- [C-1-5] FLAC
- [C-1-6] MP3
- [C-1-7] MIDI
- [C-1-8] Vorbis
- [C-1-9] PCM/WAVE כולל פורמטים של אודיו ברזולוציה גבוהה של עד 24 ביט, תדירות דגימה של 192kHz ו-8 ערוצים. חשוב לדעת שהדרישה הזו היא רק לגבי פענוח, ומותר למכשיר לבצע דגימת יתר ומיקס דאון במהלך שלב ההפעלה.
- [C-1-10] Opus
אם הטמעות המכשירים תומכות בפענוח של מאגרי קלט AAC של סטרימינג רב-ערוצי (כלומר, יותר משני ערוצים) ל-PCM באמצעות מפענח האודיו AAC שמוגדר כברירת מחדל ב-android.media.MediaCodec
API, המכשירים חייבים לתמוך בפעולות הבאות:
- [C-2-1] פענוח חייב להתבצע ללא מיקס דאון (לדוגמה, סטרימינג של AAC בפורמט 5.0 חייב להיות מפוענח לחמישה ערוצים של PCM, סטרימינג של AAC בפורמט 5.1 חייב להיות מפוענח לשישה ערוצים של PCM).
- [C-2-2] מטא-נתונים של טווח דינמי חייבים להיות כפי שמוגדר ב-Dynamic Range Control (DRC) ב-ISO/IEC 14496-3, ו
android.media.MediaFormat
מפתחות ה-DRC משמשים להגדרת התנהגויות שקשורות לטווח הדינמי של מפענח האודיו. מפתחות ה-DRC של AAC הוצגו ב-API 21, והם:KEY_AAC_DRC_ATTENUATION_FACTOR
,KEY_AAC_DRC_BOOST_FACTOR
,KEY_AAC_DRC_HEAVY_COMPRESSION
,KEY_AAC_DRC_TARGET_REFERENCE_LEVEL
ו-KEY_AAC_ENCODED_TARGET_LEVEL
. - [SR] מומלץ מאוד שכל מפענחי האודיו של AAC יעמדו בדרישות C-2-1 ו-C-2-2 שצוינו למעלה.
כשמפענחים אודיו בפורמט USAC, MPEG-D (ISO/IEC 23003-4):
- [C-3-1] יש לפרש את המטא-נתונים של עוצמת הקול ושל DRC ולהחיל אותם בהתאם לפרופיל של בקרת טווח דינמי (DRC) ברמה 1 של MPEG-D DRC.
- [C-3-2] המפענח חייב לפעול בהתאם להגדרה שנקבעה באמצעות המקשים הבאים של
android.media.MediaFormat
:KEY_AAC_DRC_TARGET_REFERENCE_LEVEL
ו-KEY_AAC_DRC_EFFECT_TYPE
.
מפענחי פרופילים של MPEG-4 AAC, HE AAC ו-HE AACv2:
- יכול להיות שתהיה תמיכה בשליטה בעוצמת הקול ובטווח הדינמי באמצעות פרופיל השליטה בטווח הדינמי ISO/IEC 23003-4.
אם יש תמיכה בתקן ISO/IEC 23003-4 ואם המטא-נתונים של ISO/IEC 23003-4 ושל ISO/IEC 14496-3 קיימים בזרם ביטים מפוענח, אז:
- המטא-נתונים של ISO/IEC 23003-4 יקבלו עדיפות.
כל מפענחי האודיו חייבים לתמוך בפלט של:
- [C-6-1] פריימים של אודיו בפורמט PCM 16-bit native byte order דרך
android.media.MediaCodec
API.
5.1.3. פרטים על קודק אודיו
פורמט/קודק | פרטים | סוגי קבצים/פורמטים של קונטיינרים שנתמכים |
---|---|---|
MPEG-4 AAC Profile (AAC LC) |
תמיכה בתוכן מונו/סטריאו/5.0/5.1 עם תדירויות דגימה סטנדרטיות מ-8 עד 48 קילוהרץ. |
|
פרופיל MPEG-4 HE AAC (AAC+) | תמיכה בתוכן מונו/סטריאו/5.0/5.1 עם תדירויות דגימה רגילות מ-16 עד 48 kHz. |
|
MPEG-4 HE AACv2 פרופיל (AAC+ משופר) |
תמיכה בתוכן מונו/סטריאו/5.0/5.1 עם תדירויות דגימה רגילות מ-16 עד 48 kHz. |
|
AAC ELD (קידוד AAC עם זמן אחזור נמוך משופר) | תמיכה בתכנים במונו או בסטריאו עם תדירויות דגימה סטנדרטיות מ-16 עד 48 קילוהרץ. |
|
USAC | תמיכה בתוכן מונו או סטריאו עם תדירויות דגימה סטנדרטיות מ-7.35 עד 48 kHz. | MPEG-4 (.mp4, .m4a) |
AMR-NB | 4.75 עד 12.2 kbps נדגמים ב-8 kHz | 3GPP (.3gp) |
AMR-WB | 9 שיעורים מ-6.60 kbit/s עד 23.85 kbit/s בדגימה ב-16 kHz, כפי שמוגדר ב-AMR-WB, Adaptive Multi-Rate - Wideband Speech Codec | 3GPP (.3gp) |
FLAC | גם למקודד וגם למפענח: חובה לתמוך לפחות במצבי מונו וסטריאו. חובה לתמוך בתדירויות דגימה של עד 192kHz, וברזולוציה של 16 ביט ו-24 ביט. חובה לטפל בנתוני אודיו מסוג FLAC 24-bit עם הגדרת אודיו של נקודה צפה. |
|
MP3 | מונו/סטריאו, קצב העברת נתונים קבוע (CBR) או משתנה (VBR) של 8-320Kbps |
|
MIDI | MIDI Type 0 ו-1. גרסה 1 וגרסה 2 של DLS. XMF ו-Mobile XMF. תמיכה בפורמטים של רינגטונים RTTTL/RTX, OTA ו-iMelody |
|
Vorbis |
|
|
PCM/WAVE | קודק PCM חייב לתמוך ב-PCM ליניארי של 16 ביט וב-float של 16 ביט. הכלי לחילוץ WAVE חייב לתמוך ב-PCM ליניארי של 16 ביט, 24 ביט ו-32 ביט, ובמספר ממשי (float) של 32 ביט (שיעורים עד למגבלת החומרה). חובה לתמוך בתדירויות דגימה מ-8 kHz עד 192 kHz. | WAVE (.wav) |
Opus |
|
5.1.4. קידוד תמונות
פרטים נוספים מופיעים בקטע 5.1.6. פרטים על קודקים של תמונות.
הטמעות במכשירים חייבות לתמוך בקידוד התמונה הבא:
- [C-0-1] JPEG
- [C-0-2] PNG
- [C-0-3] WebP
אם הטמעות של מכשירים תומכות בקידוד HEIC באמצעות android.media.MediaCodec
עבור סוג המדיה MIMETYPE_IMAGE_ANDROID_HEIC
, הן:
- [C-1-1] המכשיר חייב לספק קודק מקודד HEVC עם האצת חומרה שתומך במצב בקרת קצב העברת נתונים
BITRATE_MODE_CQ
, בפרופילHEVCProfileMainStill
ובגודל פריים של 512x512 פיקסלים.
5.1.5. פענוח הקוד של התמונה
פרטים נוספים מופיעים בקטע 5.1.6. פרטים על קודקים של תמונות.
הטמעות במכשירים חייבות לתמוך בפענוח של קידוד התמונות הבא:
- [C-0-1] JPEG
- [C-0-2] GIF
- [C-0-3] PNG
- [C-0-4] BMP
- [C-0-5] WebP
- [C-0-6] גולמי
- [C-0-7] HEIF (HEIC)
מפענחי תמונות שתומכים בפורמט עם עומק סיביות גבוה (9 סיביות ומעלה לכל ערוץ)
- [C-1-1] אם האפליקציה מבקשת זאת, למשל באמצעות ההגדרה
ARGB_8888
שלandroid.graphics.Bitmap
, המכשיר חייב לתמוך בפלט בפורמט שווה ערך של 8 ביט.
5.1.6. פרטים על קודקים של תמונות
פורמט/קודק | פרטים | סוגי קבצים/פורמטים של קונטיינרים שנתמכים |
---|---|---|
JPEG | בסיסית + הדרגתית | JPEG (.jpg) |
GIF | GIF (.gif) | |
PNG | PNG (.png) | |
BMP | BMP (.bmp) | |
WebP | WebP (.webp) | |
גולמי | ARW (.arw), CR2 (.cr2), DNG (.dng), NEF (.nef), NRW (.nrw), ORF (.orf), PEF (.pef), RAF (.raf), RW2 (.rw2), SRW (.srw) | |
HEIF | תמונה, אוסף תמונות, רצף תמונות | HEIF (.heif), HEIC (.heic) |
מקודדים ומפענחים של תמונות שנחשפים דרך MediaCodec API
-
[C-1-1] חובה לתמוך בפורמט צבע גמיש YUV420 8:8:8 (
COLOR_FormatYUV420Flexible
) באמצעותCodecCapabilities
. -
[SR] מומלץ מאוד לתמוך בפורמט הצבע RGB888 למצב Surface של קלט.
-
[C-1-3] חובה לתמוך לפחות באחד מפורמטי הצבעים YUV420 8:8:8:
COLOR_FormatYUV420PackedPlanar
(שווה ל-COLOR_FormatYUV420Planar
) אוCOLOR_FormatYUV420PackedSemiPlanar
(שווה ל-COLOR_FormatYUV420SemiPlanar
). מומלץ מאוד לתמוך בשניהם.
5.1.7. קודקים של סרטונים
- כדי להשיג איכות סבירה של סטרימינג של סרטונים באינטרנט ושירותי שיחות ועידה בווידאו, הטמעות של מכשירים צריכות להשתמש ב-codec VP8 בחומרה שעומד בדרישות.
אם הטמעות המכשיר כוללות פענוח או קידוד של סרטונים:
-
[C-1-1] קודקים של וידאו חייבים לתמוך בגדלים של מאגרי בייטים של פלט וקלט, שיכולים להכיל את המסגרת הדחוסה והלא דחוסה הגדולה ביותר האפשרית, כפי שנקבע בתקן ובקביעת התצורה, אבל גם לא להקצות יותר מדי זיכרון.
-
[C-1-2] מקודדים ומפענחים של סרטונים חייבים לתמוך בפורמטים גמישים של צבעים YUV420 8:8:8 (
COLOR_FormatYUV420Flexible
) עדCodecCapabilities
. -
[C-1-3] מקודדים ומפענחים של סרטונים חייבים לתמוך לפחות באחד מפורמטי הצבעים YUV420 8:8:8 planar או semiplanar:
COLOR_FormatYUV420PackedPlanar
(שווה ערך ל-COLOR_FormatYUV420Planar
) אוCOLOR_FormatYUV420PackedSemiPlanar
(שווה ערך ל-COLOR_FormatYUV420SemiPlanar
). מומלץ מאוד לתמוך בשניהם. -
[SR] מומלץ מאוד שמקודדים ומפענחים של סרטונים יתמכו לפחות באחד מפורמטי הצבעים YUV420 8:8:8 (YV12, NV12, NV21 או פורמט מקביל שעבר אופטימיזציה על ידי הספק) במישור או בחצי מישור שעברו אופטימיזציה לחומרה.
-
[C-1-5] מפענחי וידאו שתומכים בפורמט עם עומק סיביות גבוה (9 סיביות ומעלה לכל ערוץ) חייבים לתמוך בפלט של פורמט שווה ערך של 8 סיביות אם האפליקציה מבקשת זאת. הדבר הזה חייב לבוא לידי ביטוי בתמיכה בפורמט צבע YUV420 8:8:8 באמצעות
android.media.MediaCodecInfo
.
אם הטמעות של מכשירים מפרסמות תמיכה בפרופיל HDR באמצעות Display.HdrCapabilities
, הן:
- [C-2-1] חובה לתמוך בניתוח ובטיפול במטא-נתונים סטטיים של HDR.
אם הטמעות של מכשירים מפרסמות תמיכה ברענון תוך-פריים באמצעות FEATURE_IntraRefresh
במחלקה MediaCodecInfo.CodecCapabilities
, הן:
- [C-3-1] המכשיר חייב לתמוך בתקופות רענון בטווח של 10 עד 60 פריימים, ולפעול בצורה מדויקת בטווח של 20% מתקופת הרענון שהוגדרה.
אלא אם האפליקציה מציינת אחרת באמצעות מפתח הפורמט KEY_COLOR_FORMAT
, הטמעות של מפענח וידאו:
- [C-4-1] אם ההגדרה מתבצעת באמצעות פלט Surface, פורמט הצבע צריך להיות ברירת המחדל שעברה אופטימיזציה לתצוגת חומרה.
- [C-4-2] אם ההגדרה היא לא להשתמש בפלט Surface, ברירת המחדל חייבת להיות פורמט צבע YUV420 8:8:8 שעבר אופטימיזציה לקריאה של CPU.
5.1.8. רשימת קודקים של סרטונים
פורמט/קודק | פרטים | סוגי קבצים/פורמטים של קונטיינרים שנתמכים |
---|---|---|
H.263 |
|
|
H.264 AVC | פרטים נוספים מופיעים בסעיף 5.2 ובסעיף 5.3. |
|
H.265 HEVC | פרטים נוספים מופיעים בקטע 5.3 |
|
MPEG-2 | פרופיל ראשי |
|
MPEG-4 SP |
|
|
VP8 | פרטים נוספים מופיעים בסעיף 5.2 ובסעיף 5.3. |
|
VP9 | פרטים נוספים מופיעים בקטע 5.3 |
|
5.1.9. אבטחה של קודק מדיה
הטמעות של מכשירים חייבות להבטיח תאימות לתכונות האבטחה של רכיבי codec של מדיה, כפי שמתואר בהמשך.
Android כולל תמיכה ב-OMX, API להאצת מולטימדיה חוצה-פלטפורמות, וגם ב-Codec 2.0, API להאצת מולטימדיה עם תקורה נמוכה.
אם ההטמעות של המכשירים תומכות במולטימדיה, הן:
- [C-1-1] חובה לספק תמיכה ברכיבי codec של מדיה באמצעות ממשקי OMX או Codec 2.0 API (או שניהם) כמו בפרויקט הקוד הפתוח של Android, ולא להשבית או לעקוף את אמצעי ההגנה. המשמעות היא שכל קודק צריך להשתמש ב-OMX או ב-Codec 2.0 API, או לפחות לתמוך באחד מהם, והתמיכה בממשקי ה-API הזמינים צריכה לכלול את אמצעי ההגנה הקיימים.
- [C-SR] מומלץ מאוד לכלול תמיכה ב-Codec 2.0 API.
אם הטמעות המכשירים לא תומכות ב-Codec 2.0 API, הן:
- [C-2-1] חובה לכלול את רכיב ה-codec התואם של תוכנת OMX מתוך פרויקט Android בקוד פתוח (אם הוא זמין) לכל פורמט וסוג מדיה (מקודד או מפענח) שנתמכים במכשיר.
- [C-2-2] קודקים שהשמות שלהם מתחילים ב-OMX.google. חייבים להתבסס על קוד המקור של פרויקט הקוד הפתוח של Android.
- [C-SR] מומלץ מאוד להפעיל את רכיבי ה-codec של תוכנת OMX בתהליך codec שאין לו גישה למנהלי התקנים של חומרה מלבד מיפוי זיכרון.
אם הטמעות המכשיר תומכות ב-Codec 2.0 API, הן:
- [C-3-1] חובה לכלול את קודק התוכנה המתאים Codec 2.0 מתוך Android Open Source Project (אם הוא זמין) לכל פורמט וסוג מדיה (מקודד או מפענח) שנתמכים במכשיר.
- [C-3-2] חובה לאחסן את קודק התוכנה Codec 2.0 בתהליך קודק התוכנה כפי שמופיע ב-Android Open Source Project, כדי לאפשר הענקת גישה מצומצמת יותר לקודקים של תוכנה.
- [C-3-3] קודקים ששמותיהם מתחילים ב-c2.android. חייבים להתבסס על קוד המקור של פרויקט הקוד הפתוח של Android.
5.1.10. מאפייני קודק המדיה
אם ההטמעות של המכשירים תומכות בקודי מדיה, הן:
- [C-1-1] חובה להחזיר ערכים נכונים של מאפייני codec של מדיה באמצעות
MediaCodecInfo
API.
ובפרט:
- [C-1-2] קודקים ששמותיהם מתחילים ב-OMX. חובה להשתמש בממשקי ה-API של OMX ולתת שמות שתואמים להנחיות למתן שמות של OMX IL.
- [C-1-3] קודקים ששמותיהם מתחילים ב-'c2.' חובה להשתמש ב-Codec 2.0 API ולתת שמות שתואמים להנחיות למתן שמות ב-Codec 2.0 ל-Android.
- [C-1-4] קודקים עם שמות שמתחילים ב-OMX.google. או ב-c2.android. אסור לסווג את התכונה כספק או כהאצת חומרה.
- [C-1-5] אסור לסווג קובצי codec שפועלים בתהליך codec (ספק או מערכת) שיש להם גישה למנהלי התקנים של חומרה שאינם מקצים וממפים של זיכרון כקובצי codec של תוכנה בלבד.
- [C-1-6] קודקים שלא קיימים ב-Android Open Source Project או שלא מבוססים על קוד המקור בפרויקט הזה, חייבים להיות מסווגים כספקים.
- [C-1-7] קודקים שמשתמשים בהאצת חומרה חייבים להיות מסווגים כקודקים עם האצת חומרה.
- [C-1-8] אסור ששמות של קודקים יהיו מטעים. לדוגמה, קודקים בשם decoders (מפענחים) חייבים לתמוך בפענוח, וקודקים בשם encoders (מקודדים) חייבים לתמוך בקידוד. קודקים עם שמות שמכילים פורמטים של מדיה חייבים לתמוך בפורמטים האלה.
אם הטמעות המכשיר תומכות בקודי וידאו:
- [C-2-1] כל רכיבי הקודק של הווידאו חייבים לפרסם נתונים של קצב פריימים שאפשר להשיג עבור הגדלים הבאים, אם יש תמיכה בכך ברכיב הקודק:
איכות רגילה (SD) | SD (איכות גבוהה) | HD 720p | HD 1080p | UHD | |
---|---|---|---|---|---|
רזולוציית וידאו |
|
|
|
1,920 x 1,080 פיקסלים (לא MPEG4) | 3840 x 2160 פיקסלים (HEVC, VP9) |
- [C-2-2] קודקים של וידאו שמסווגים כקודקים עם האצת חומרה חייבים לפרסם מידע על נקודות ביצועים. כל אחד מהם חייב לכלול רשימה של כל נקודות הביצועים הסטנדרטיות הנתמכות (שמופיעות ב-API
PerformancePoint
), אלא אם הן נכללות בנקודת ביצועים סטנדרטית נתמכת אחרת. - בנוסף, הם צריכים לפרסם נקודות ביצועים מורחבות אם הם תומכים בביצועים קבועים של סרטונים שאינם אחד מהסטנדרטים המפורטים.
5.2. קידוד סרטונים
אם הטמעות המכשירים תומכות במקודד וידאו כלשהו ומאפשרות לאפליקציות של צד שלישי להשתמש בו, הן:
- במהלך שני חלונות הזזה, קצב העברת הנתונים לא צריך להיות גבוה ב-15% מקצב העברת הנתונים בין מרווחי מסגרות פנימיות (I-frame).
- לא יכול להיות יותר מ-100% מעל קצב העברת הנתונים בחלון הזזה של שנייה אחת.
אם הטמעות המכשירים כוללות תצוגת מסך מוטמעת באורך אלכסוני של 2.5 אינץ' לפחות, או כוללות יציאת פלט וידאו או הצהרה על תמיכה במצלמה באמצעות תג התכונה android.hardware.camera.any
, הן:
- [C-1-1] חובה לכלול תמיכה לפחות באחד ממקודדי הווידאו VP8 או H.264, ולהפוך אותו לזמין לאפליקציות של צד שלישי.
- צריכה להיות תמיכה במקודדי הווידאו VP8 ו-H.264, והם צריכים להיות זמינים לאפליקציות של צד שלישי.
אם הטמעות המכשיר תומכות באחד ממקודדי הווידאו H.264, VP8, VP9 או HEVC והופכות אותו לזמין לאפליקציות של צד שלישי, הן:
- [C-2-1] חובה לתמוך בקצבי סיביות שניתנים להגדרה באופן דינמי.
- צריכה להיות תמיכה בקצב פריימים משתנה, שבו מקודד הסרטון צריך לקבוע את משך הפריימים המיידי על סמך חותמות הזמן של מאגרי הקלט, ולהקצות את מאגר הביטים שלו על סמך משך הפריימים הזה.
אם הטמעות המכשירים תומכות במקודד הווידאו MPEG-4 SP ומאפשרות לאפליקציות צד שלישי להשתמש בו, הן:
- צריכה להיות תמיכה בקצבי העברת נתונים שניתנים להגדרה באופן דינמי עבור המקודד הנתמך.
אם הטמעות המכשיר מספקות מקודדי וידאו או תמונות עם האצת חומרה, ותומכות במצלמת חומרה אחת או יותר שמחוברת או ניתנת לחיבור ומוצגת דרך ממשקי ה-API של android.camera
:
- [C-4-1] כל מקודדי הווידאו והתמונות שמופעלת בהם האצת חומרה חייבים לתמוך בקידוד פריימים ממצלמות החומרה.
- צריכה להיות תמיכה בקידוד פריימים ממצלמות החומרה דרך כל מקודדי הווידאו או התמונות.
5.2.1. H.263
אם הטמעות במכשירים תומכות במקודדי H.263 ומאפשרות לאפליקציות צד שלישי להשתמש בהם, הן:
- [C-1-1] חובה לתמוך בפרופיל Baseline ברמה 45.
- צריכה להיות תמיכה בקצבי העברת נתונים שניתנים להגדרה באופן דינמי עבור המקודד הנתמך.
5.2.2. H.264
אם הטמעות המכשירים תומכות בקודק H.264, הן:
- [C-1-1] חובה לתמוך בפרופיל Baseline ברמה 3. עם זאת, התמיכה ב-ASO (Arbitrary Slice Ordering), ב-FMO (Flexible Macroblock Ordering) וב-RS (Redundant Slices) היא אופציונלית. בנוסף, כדי לשמור על תאימות למכשירי Android אחרים, מומלץ למקודדים לא להשתמש ב-ASO, ב-FMO וב-RS עבור פרופיל הבסיס.
- [C-1-2] חובה לתמוך בפרופילים של קידוד וידאו באיכות רגילה (SD) שמפורטים בטבלה הבאה.
- צריכה לתמוך ברמה 4 של הפרופיל הראשי.
- צריכה להיות תמיכה בפרופילים של קידוד וידאו באיכות HD (High Definition) כמו שמצוין בטבלה הבאה.
אם הטמעות של מכשירים מדווחות על תמיכה בקידוד H.264 לסרטונים ברזולוציית 720p או 1080p דרך ממשקי ה-API של המדיה, הן:
- [C-2-1] חובה לתמוך בפרופילי הקידוד שבטבלה הבאה.
איכות רגילה (SD) | SD (איכות גבוהה) | HD 720p | HD 1080p | |
---|---|---|---|---|
רזולוציית וידאו | 320 x 240 פיקסלים | 720 x 480 פיקסלים | 1280 x 720 פיקסלים | 1,920 x 1,080 פיקסלים |
קצב פריימים של סרטון | 20 פריימים לשנייה | 30 פריימים לשנייה | 30 פריימים לשנייה | 30 פריימים לשנייה |
קצב העברת נתונים של וידאו | 384 Kbps | 2 Mbps | 4Mbps | 10Mbps |
5.2.3. VP8
אם הטמעות המכשירים תומכות בקודק VP8, הן:
- [C-1-1] חובה לתמוך בפרופילי קידוד של סרטוני SD.
- צריכה להיות תמיכה בפרופילים הבאים של קידוד וידאו באיכות HD (High Definition).
- [C-1-2] חובה לתמוך בכתיבת קובצי Matroska WebM.
- מומלץ לספק קודק VP8 לחומרה שעומד בדרישות הקידוד של החומרה ב-RTC של פרויקט WebM, כדי להבטיח איכות מקובלת של סטרימינג של וידאו באינטרנט ושירותי שיחות ועידה בווידאו.
אם הטמעות של מכשירים מדווחות על תמיכה בקידוד VP8 לסרטונים ברזולוציה של 720p או 1080p דרך ממשקי ה-API של המדיה, הן:
- [C-2-1] חובה לתמוך בפרופילי הקידוד שבטבלה הבאה.
איכות רגילה (SD) | SD (איכות גבוהה) | HD 720p | HD 1080p | |
---|---|---|---|---|
רזולוציית וידאו | 320 x 180 פיקסלים | 640 x 360 פיקסלים | 1280 x 720 פיקסלים | 1,920 x 1,080 פיקסלים |
קצב פריימים של סרטון | 30 פריימים לשנייה | 30 פריימים לשנייה | 30 פריימים לשנייה | 30 פריימים לשנייה |
קצב העברת נתונים של וידאו | 800 Kbps | 2 Mbps | 4Mbps | 10Mbps |
5.2.4. VP9
אם הטמעות המכשירים תומכות ב-codec VP9, הן:
- [C-1-2] חייב לתמוך בפרופיל 0 ברמה 3.
- [C-1-1] חובה לתמוך בכתיבת קובצי Matroska WebM.
- [C-1-3] חובה ליצור נתוני CodecPrivate.
- צריכה להיות תמיכה בפרופילים של פענוח HD, כמו שמצוין בטבלה הבאה.
- מומלץ מאוד להשתמש ב-SR כדי לתמוך בפרופילים של פענוח HD, כמו שמצוין בטבלה הבאה, אם יש מקודד חומרה.
SD | HD 720p | HD 1080p | UHD | |
---|---|---|---|---|
רזולוציית וידאו | 720 x 480 פיקסלים | 1280 x 720 פיקסלים | 1,920 x 1,080 פיקסלים | 3,840 x 2,160 פיקסלים |
קצב פריימים של סרטון | 30 פריימים לשנייה | 30 פריימים לשנייה | 30 פריימים לשנייה | 30 פריימים לשנייה |
קצב העברת נתונים של וידאו | 1.6 Mbps | 4Mbps | 5 Mbps | 20 Mbps |
אם הטמעות של מכשירים טוענות לתמיכה בפרופיל 2 או בפרופיל 3 דרך ממשקי ה-API של המדיה:
- התמיכה בפורמט 12 ביט היא אופציונלית.
5.2.5. H.265
אם הטמעות המכשירים תומכות בקודק H.265, הן:
- [C-1-1] חובה לתמוך בפרופיל הראשי ברמה 3.
- צריכה להיות תמיכה בפרופילי קידוד HD, כמו שמצוין בטבלה הבאה.
- [SR] מומלץ מאוד לתמוך בפרופילים של קידוד HD כפי שמצוין בטבלה הבאה אם יש מקודד חומרה.
SD | HD 720p | HD 1080p | UHD | |
---|---|---|---|---|
רזולוציית וידאו | 720 x 480 פיקסלים | 1280 x 720 פיקסלים | 1,920 x 1,080 פיקסלים | 3,840 x 2,160 פיקסלים |
קצב פריימים של סרטון | 30 פריימים לשנייה | 30 פריימים לשנייה | 30 פריימים לשנייה | 30 פריימים לשנייה |
קצב העברת נתונים של וידאו | 1.6 Mbps | 4Mbps | 5 Mbps | 20 Mbps |
5.3. פענוח סרטונים
אם הטמעות המכשירים תומכות בקודקים VP8, VP9, H.264 או H.265, הן:
- [C-1-1] חובה לתמוך בהחלפה דינמית של רזולוציית הווידאו וקצב הפריימים באמצעות ממשקי ה-API הרגילים של Android באותו סטרימינג לכל רכיבי הקודק VP8, VP9, H.264 ו-H.265 בזמן אמת ועד לרזולוציה המקסימלית שנתמכת על ידי כל רכיב קודק במכשיר.
5.3.1. MPEG-2
אם הטמעות המכשירים תומכות במפענחי MPEG-2, הן:
- [C-1-1] חובה לתמוך בפרופיל הראשי ברמה גבוהה.
5.3.2. H.263
אם הטמעות של מכשירים תומכות במפענחי H.263, הן:
- [C-1-1] חובה לתמוך בפרופיל Baseline ברמה 30 וברמה 45.
5.3.3. MPEG-4
אם המכשירים כוללים יישומי מפענח MPEG-4, הם:
- [C-1-1] חובה לתמוך ברמת פרופיל פשוטה 3.
5.3.4. H.264
אם ההטמעות של המכשירים תומכות במפענחי H.264, הן:
- [C-1-1] חובה לתמוך בפרופיל הראשי ברמה 3.1 ובפרופיל Baseline. התמיכה ב-ASO (Arbitrary Slice Ordering), ב-FMO (Flexible Macroblock Ordering) וב-RS (Redundant Slices) היא אופציונלית.
- [C-1-2] חייב להיות מסוגל לפענח סרטונים עם פרופילי SD (איכות רגילה) שמפורטים בטבלה הבאה, ולקודד אותם עם פרופיל Baseline ופרופיל Main ברמה 3.1 (כולל 720p30).
- צריכה להיות אפשרות לפענוח סרטונים עם פרופילים של HD (איכות גבוהה) כמו שמצוין בטבלה הבאה.
אם הגובה שמוחזר על ידי השיטה Display.getSupportedModes()
שווה לרזולוציית הסרטון או גדול ממנה, הטמעות של המכשיר:
- [C-2-1] המכשיר חייב לתמוך בפרופילים של פענוח וידאו באיכות HD 720p שמפורטים בטבלה הבאה.
- [C-2-2] המכשיר חייב לתמוך בפרופילים של פענוח סרטונים באיכות HD 1080p שמופיעים בטבלה הבאה.
איכות רגילה (SD) | SD (איכות גבוהה) | HD 720p | HD 1080p | |
---|---|---|---|---|
רזולוציית וידאו | 320 x 240 פיקסלים | 720 x 480 פיקסלים | 1280 x 720 פיקסלים | 1,920 x 1,080 פיקסלים |
קצב פריימים של סרטון | 30 פריימים לשנייה | 30 פריימים לשנייה | 60 פריימים לשנייה | 30 פריימים לשנייה (60 פריימים לשנייהטלוויזיה) |
קצב העברת נתונים של וידאו | 800 Kbps | 2 Mbps | 8Mbps | 20 Mbps |
5.3.5. H.265 (HEVC)
אם הטמעות המכשירים תומכות בקודק H.265, הן:
- [C-1-1] חובה לתמוך בפרופיל הראשי ברמה 3 בדרגה הראשית ובפרופילים של פענוח וידאו באיכות SD, כמו שמצוין בטבלה הבאה.
- צריכה להיות תמיכה בפרופילים של פענוח HD, כמו שמצוין בטבלה הבאה.
- [C-1-2] אם יש מפענח חומרה, המכשיר חייב לתמוך בפרופילים של פענוח HD, כפי שמצוין בטבלה הבאה.
אם הגובה שמדווח על ידי השיטה Display.getSupportedModes()
שווה לרזולוציית הסרטון או גדול ממנה:
- [C-2-1] הטמעות של מכשירים חייבות לתמוך בפענוח של לפחות אחד מהפרופילים H.265 או VP9 של 720, 1080 ו-UHD.
איכות רגילה (SD) | SD (איכות גבוהה) | HD 720p | HD 1080p | UHD | |
---|---|---|---|---|---|
רזולוציית וידאו | 352 x 288 פיקסלים | 720 x 480 פיקסלים | 1280 x 720 פיקסלים | 1,920 x 1,080 פיקסלים | 3,840 x 2,160 פיקסלים |
קצב פריימים של סרטון | 30 פריימים לשנייה | 30 פריימים לשנייה | 30 פריימים לשנייה | 30/60 fps (60 fpsטלוויזיה עם פענוח חומרה H.265) | 60 פריימים לשנייה |
קצב העברת נתונים של וידאו | 600 Kbps | 1.6 Mbps | 4Mbps | 5 Mbps | 20 Mbps |
אם הטמעות של מכשירים טוענות לתמיכה בפרופיל HDR (HEVCProfileMain10HDR10
, HEVCProfileMain10HDR10Plus
) דרך ממשקי Media API:
-
[C-3-1] הטמעות של מכשירים חייבות לקבל את המטא-נתונים הנדרשים של HDR (MediaFormat#KEY_HDR_STATIC_INFO לכל פרופילי ה-HDR) מהאפליקציה באמצעות MediaCodec API, וגם לתמוך בחילוץ המטא-נתונים הנדרשים של HDR (MediaFormat#KEY_HDR_STATIC_INFO לכל פרופילי ה-HDR, וגם MediaFormat#KEY_HDR10_PLUS_INFO לפרופילי HDR10Plus) מזרם הביטים או מהקונטיינר, כפי שמוגדר במפרטים הרלוונטיים. הם חייבים גם לתמוך בפלט של מטא-נתונים נדרשים של HDR (MediaFormat#KEY_HDR_STATIC_INFO לכל פרופילי ה-HDR) מזרם הביטים או מהקונטיינר, כפי שמוגדר במפרטים הרלוונטיים.
-
[C-SR] מומלץ מאוד להטמיע במכשירים תמיכה בפלט של מטא-נתונים MediaFormat#KEY_HDR10_PLUS_INFO עבור פרופילי HDR10Plus באמצעות MediaCodec#getOutputFormat(int)
.
-
[C-3-2] יישומי מכשירים חייבים להציג תוכן HDR בצורה תקינה עבור פרופיל
HEVCProfileMain10HDR10
במסך המכשיר או ביציאת וידאו רגילה (לדוגמה, HDMI). -
[C-SR] מומלץ מאוד להטמיע במכשירים את פרופיל
HEVCProfileMain10HDR10Plus
כדי להציג תוכן HDR בצורה תקינה במסך המכשיר או ביציאת וידאו רגילה (למשל, HDMI).
5.3.6. VP8
אם הטמעות המכשירים תומכות בקודק VP8, הן:
- [C-1-1] חובה לתמוך בפרופילים של פענוח SD בטבלה הבאה.
- מומלץ להשתמש במקודד VP8 בחומרה שעומד בדרישות.
- צריכים לתמוך בפרופילים של פענוח HD בטבלה הבאה.
אם הגובה שמוחזר על ידי השיטה Display.getSupportedModes()
שווה לרזולוציית הסרטון או גדול ממנה:
- [C-2-1] הטמעות של מכשירים חייבות לתמוך בפרופילים של 720p בטבלה הבאה.
- [C-2-2] הטמעות של מכשירים חייבות לתמוך בפרופילים של 1080p בטבלה הבאה.
איכות רגילה (SD) | SD (איכות גבוהה) | HD 720p | HD 1080p | |
---|---|---|---|---|
רזולוציית וידאו | 320 x 180 פיקסלים | 640 x 360 פיקסלים | 1280 x 720 פיקסלים | 1,920 x 1,080 פיקסלים |
קצב פריימים של סרטון | 30 פריימים לשנייה | 30 פריימים לשנייה | 30 פריימים לשנייה (60 פריימים לשנייהטלוויזיה) | 30 (60 פריימים לשנייהטלוויזיה) |
קצב העברת נתונים של וידאו | 800 Kbps | 2 Mbps | 8Mbps | 20 Mbps |
5.3.7. VP9
אם הטמעות המכשירים תומכות ב-codec VP9, הן:
- [C-1-1] חובה לתמוך בפרופילים של פענוח סרטוני SD, כפי שמצוין בטבלה הבאה.
- צריכה להיות תמיכה בפרופילים של פענוח HD, כמו שמצוין בטבלה הבאה.
אם הטמעות המכשיר תומכות ב-VP9 codec ובמפענח חומרה:
- [C-2-1] חובה לתמוך בפרופילים של פענוח HD, כמו שמצוין בטבלה הבאה.
אם הגובה שמדווח על ידי השיטה Display.getSupportedModes()
שווה לרזולוציית הסרטון או גדול ממנה:
- [C-3-1] הטמעות של מכשירים חייבות לתמוך בפענוח של לפחות אחד מהפרופילים VP9 או H.265 ברזולוציות 720, 1080 ו-UHD.
איכות רגילה (SD) | SD (איכות גבוהה) | HD 720p | HD 1080p | UHD | |
---|---|---|---|---|---|
רזולוציית וידאו | 320 x 180 פיקסלים | 640 x 360 פיקסלים | 1280 x 720 פיקסלים | 1,920 x 1,080 פיקסלים | 3,840 x 2,160 פיקסלים |
קצב פריימים של סרטון | 30 פריימים לשנייה | 30 פריימים לשנייה | 30 פריימים לשנייה | 30 פריימים לשנייה (60 פריימים לשנייהטלוויזיה עם פענוח חומרה VP9) | 60 פריימים לשנייה |
קצב העברת נתונים של וידאו | 600 Kbps | 1.6 Mbps | 4Mbps | 5 Mbps | 20 Mbps |
אם יישומי מכשירים טוענים לתמיכה ב-VP9Profile2
או ב-VP9Profile3
דרך ממשקי ה-API של המדיה CodecProfileLevel:
- התמיכה בפורמט 12 ביט היא אופציונלית.
אם הטמעות של מכשירים טוענות לתמיכה בפרופיל HDR (VP9Profile2HDR
, VP9Profile2HDR10Plus
, VP9Profile3HDR
, VP9Profile3HDR10Plus
) דרך ממשקי ה-API של המדיה:
-
[C-4-1] הטמעות של מכשירים חייבות לקבל את המטא-נתונים הנדרשים של HDR (
MediaFormat#KEY_HDR_STATIC_INFO
לכל פרופילי ה-HDR, וגם את הפרמטרMediaCodec#PARAMETER_KEY_HDR10_PLUS_INFO
לפרופיליHDR10Plus
) מהאפליקציה באמצעות MediaCodec API, וגם לתמוך בחילוץ המטא-נתונים הנדרשים של HDR (MediaFormat#KEY_HDR_STATIC_INFO
לכל פרופילי ה-HDR, וגם אתMediaFormat#KEY_HDR10_PLUS_INFO
לפרופיליHDR10Plus
) מזרם הביטים או מהקונטיינר, כפי שמוגדר במפרטים הרלוונטיים. הם גם חייבים לתמוך בפלט של מטא-נתונים נדרשים של HDR (MediaFormat#KEY_HDR_STATIC_INFO
לכל פרופילי ה-HDR) מזרם הביטים או מהקונטיינר, כפי שמוגדר במפרטים הרלוונטיים. -
[C-4-2] יישומי מכשירים חייבים להציג תוכן HDR בצורה תקינה עבור פרופילים
VP9Profile2HDR
ו-VP9Profile3HDR
במסך המכשיר או ביציאת וידאו רגילה (למשל, HDMI). -
[C-SR] מומלץ מאוד שההטמעות של המכשיר יתמכו בפלט של המטא-נתונים
MediaFormat#KEY_HDR10_PLUS_INFO
עבור פרופילים שלHDR10Plus
באמצעותMediaCodec#getOutputFormat(int)
. -
[C-SR] מומלץ מאוד להטמיע במכשירים את הפרופילים VP9Profile2HDR10Plus ו-VP9Profile3HDR10Plus כדי להציג תוכן HDR בצורה תקינה במסך המכשיר או ביציאת וידאו רגילה (למשל, HDMI).
5.3.8. Dolby Vision
אם הטמעות של מכשירים מצהירות על תמיכה במפענח Dolby Vision דרך HDR_TYPE_DOLBY_VISION
, הן:
- [C-1-1] חובה לספק כלי לחילוץ נתונים שתומך ב-Dolby Vision.
- [C-1-2] חובה להציג תוכן Dolby Vision בצורה תקינה במסך המכשיר או ביציאת וידאו רגילה (למשל, HDMI).
- [C-1-3] חובה להגדיר את אינדקס הטראק של שכבות הבסיס שתואמות לאחור (אם יש כאלה) כך שיהיה זהה לאינדקס הטראק של השכבה המשולבת של Dolby Vision.
5.3.9. AV1
אם הטמעות המכשירים תומכות ב-codec AV1, הן:
- [C-1-1] חובה לתמוך בפרופיל 0, כולל תוכן של 10 ביט.
5.4. הקלטת אודיו
חלק מהדרישות שמפורטות בקטע הזה מוגדרות כ-SHOULD (מומלץ) מאז Android 4.3, אבל אנחנו מתכננים לשנות את ההגדרה ל-MUST (חובה) בהגדרת התאימות לגרסאות עתידיות. מומלץ מאוד שמכשירי Android קיימים וחדשים יעמדו בדרישות האלה שמסומנות כ-SHOULD, אחרת הם לא יוכלו להשיג תאימות ל-Android כשישודרגו לגרסה עתידית.
5.4.1. הקלטת אודיו גולמי ומידע על המיקרופון
אם הטמעות של מכשירים מצהירות על android.hardware.microphone
, הן:
-
[C-1-1] חובה לאפשר צילום של תוכן אודיו גולמי עם המאפיינים הבאים:
- פורמט: Linear PCM, 16-bit
- תדירויות דגימה: 8,000, 11,025, 16,000, 44,100, 48,000 הרץ
- ערוצים: מונו
-
מומלץ לאפשר צילום של תוכן אודיו גולמי עם המאפיינים הבאים:
- פורמט: Linear PCM, 16 ביט ו-24 ביט
- תדירויות דגימה: 8,000, 11,025, 16,000, 22,050, 24,000, 32,000, 44,100, 48,000 הרץ
- ערוצים: מספר הערוצים זהה למספר המיקרופונים במכשיר
-
[C-1-2] חובה לצלם בתדירויות דגימה שצוינו למעלה ללא דגימה חוזרת.
- [C-1-3] חובה לכלול מסנן מתאים נגד Aliasing כשקצב הדגימה שצוין למעלה נדגם עם דגימת חסר.
-
צריך לאפשר הקלטה של תוכן אודיו גולמי באיכות של רדיו AM ו-DVD, כלומר עם המאפיינים הבאים:
- פורמט: Linear PCM, 16-bit
- תדירויות דגימה: 22,050, 48,000 הרץ
- ערוצים: סטריאו
-
[C-1-4] חובה לכבד את API
MicrophoneInfo
ולמלא בצורה נכונה את המידע על המיקרופונים הזמינים במכשיר שאפליקציות של צד שלישי יכולות לגשת אליהם דרך APIAudioManager.getMicrophones()
, ועל המיקרופונים הפעילים כרגע שאפליקציות של צד שלישי יכולות לגשת אליהם דרך ממשקי APIAudioRecord.getActiveMicrophones()
ו-MediaRecorder.getActiveMicrophones()
. אם הטמעות המכשיר מאפשרות רדיו AM וצילום של תוכן אודיו גולמי באיכות DVD, הן: -
[C-2-1] חובה לבצע הקלטה ללא הגדלת קצב הדגימה בכל יחס גבוה מ-16,000:22,050 או מ-44,100:48,000.
- [C-2-2] חובה לכלול מסנן מתאים נגד Aliasing לכל דגימת יתר או דגימת חסר.
5.4.2. הקלטה לזיהוי דיבור
אם הטמעות של מכשירים מצהירות על android.hardware.microphone
, הן:
- [C-1-1] חובה לתעד מקור אודיו
android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION
באחת מתדירויות הדגימה הבאות: 44100 ו-48000. - [C-1-2] חובה להשבית כברירת מחדל כל עיבוד אודיו להפחתת רעשים כשמקליטים שידור אודיו ממקור האודיו
AudioSource.VOICE_RECOGNITION
. - [C-1-3] חובה להשבית כברירת מחדל כל בקרת עוצמת קול אוטומטית כשמקליטים אודיו ממקור האודיו
AudioSource.VOICE_RECOGNITION
. - מומלץ להקליט את זרם האודיו של זיהוי הדיבור עם מאפיינים של אמפליטודה שטוחה בקירוב לעומת תדר: באופן ספציפי, ±3 dB, מ-100 Hz עד 4,000 Hz.
- צריך להקליט את זרם האודיו של זיהוי הדיבור עם רגישות קלט מוגדרת כך שמקור של עוצמת קול (SPL) של 90dB ב-1000Hz יניב RMS של 2500 לדגימות של 16 ביט.
- צריך לתעד את זרם האודיו של זיהוי הדיבור, כך שרמות המשרעת של ה-PCM יעקבו באופן לינארי אחרי שינויים ב-SPL של הקלט בטווח של 30dB לפחות, מ--18 dB עד +12 dB re 90 dB SPL במיקרופון.
- מומלץ להקליט את זרם האודיו של זיהוי הדיבור עם עיוות הרמוני כולל (THD) של פחות מ-1% עבור 1 kHz ברמת קלט של 90 dB SPL במיקרופון.
אם הטמעות של מכשירים מצהירות על טכנולוגיות של android.hardware.microphone
ושל ביטול רעשים (הפחתה) שמכוונות לזיהוי דיבור, הן:
- [C-2-1] חובה לאפשר שליטה באפקט האודיו הזה באמצעות
android.media.audiofx.NoiseSuppressor
API. - [C-2-2] חובה לזהות באופן ייחודי כל הטמעה של טכנולוגיה לביטול רעשים באמצעות השדה
AudioEffect.Descriptor.uuid
.
5.4.3. לכידה לניתוב מחדש של ההפעלה
המחלקה android.media.MediaRecorder.AudioSource
כוללת את מקור האודיו REMOTE_SUBMIX
.
אם הטמעות של מכשירים מצהירות על android.hardware.audio.output
וגם על android.hardware.microphone
, הן:
-
[C-1-1] חובה להטמיע בצורה נכונה את מקור האודיו
REMOTE_SUBMIX
כך שכשאפליקציה משתמשת ב-APIandroid.media.AudioRecord
כדי להקליט ממקור האודיו הזה, היא תתעד שילוב של כל זרמי האודיו, למעט:-
AudioManager.STREAM_RING
-
AudioManager.STREAM_ALARM
-
AudioManager.STREAM_NOTIFICATION
-
5.4.4. ביטול הד אקוסטי
אם הטמעות של מכשירים מצהירות על android.hardware.microphone
, הן:
- מומלץ להטמיע טכנולוגיה של ביטול הד אקוסטי (AEC) שמכוונת לתקשורת קולית ומוחלת על נתיב הלכידה כשמבצעים לכידה באמצעות
AudioSource.VOICE_COMMUNICATION
אם הטמעות המכשיר מספקות Acoustic Echo Canceler (מבטל הד אקוסטי) שמוכנס לנתיב האודיו של הלכידה כשבוחרים באפשרות AudioSource.VOICE_COMMUNICATION
, הן:
- [C-SR] מומלץ מאוד להצהיר על כך באמצעות שיטת ה-API AcousticEchoCanceler AcousticEchoCanceler.isAvailable()
- מומלץ מאוד [C-SR] לאפשר שליטה באפקט האודיו הזה באמצעות API AcousticEchoCanceler.
- [C-SR] מומלץ מאוד להשתמש בשדה AudioEffect.Descriptor.uuid כדי לזהות באופן ייחודי כל הטמעה של טכנולוגיית AEC.
5.4.5. צילום בו-זמני
אם הטמעות של מכשירים מצהירות על android.hardware.microphone
,הן חייבות להטמיע לכידה בו-זמנית כפי שמתואר במסמך הזה . פרטים נוספים:
- [C-1-1] חובה לאפשר גישה בו-זמנית למיקרופון לשירות נגישות שמבצע צילום באמצעות
AudioSource.VOICE_RECOGNITION
ולפחות לאפליקציה אחת שמבצעת צילום באמצעותAudioSource
. - [C-1-2] חובה לאפשר גישה בו-זמנית למיקרופון לאפליקציה שמותקנת מראש ומחזיקה בתפקיד של Assistant ולפחות לאפליקציה אחת שמבצעת צילום באמצעות כל
AudioSource
מלבדAudioSource.VOICE_COMMUNICATION
אוAudioSource.CAMCORDER
. - [C-1-3] חובה להשתיק את לכידת האודיו עבור כל אפליקציה אחרת, למעט שירות נגישות, בזמן שאפליקציה מבצעת לכידה באמצעות
AudioSource.VOICE_COMMUNICATION
אוAudioSource.CAMCORDER
. עם זאת, כשאפליקציה מצלמת באמצעותAudioSource.VOICE_COMMUNICATION
, אפליקציה אחרת יכולה לצלם את השיחה הקולית אם היא אפליקציה מורשית (שהותקנה מראש) עם הרשאהCAPTURE_AUDIO_OUTPUT
. - [C-1-4] אם שתי אפליקציות או יותר מצלמות בו-זמנית ואף אחת מהן לא מציגה ממשק משתמש בחלק העליון, האפליקציה שהתחילה את הצילום לאחרונה מקבלת אודיו.
5.4.6. רמות ההגברה של המיקרופון
אם הטמעות של מכשירים מצהירות על android.hardware.microphone
, הן:
- צריכה להציג מאפיינים של אמפליטודה שטוחה בקירוב לעומת תדר בטווח התדרים האמצעי: באופן ספציפי, ±3dB מ-100 הרץ עד 4,000 הרץ לכל מיקרופון שמשמש להקלטת מקור האודיו של זיהוי הדיבור.
- מומלץ להגדיר את רגישות קלט האודיו כך שמקור טון סינוסואידי בתדר 1,000 הרץ שמופעל ברמת לחץ קול (SPL) של 90 דציבלים יניב תגובה עם RMS של 2,500 עבור דגימות של 16 ביט (או -22.35 דציבלים בסולם מלא עבור דגימות של נקודה צפה/דיוק כפול) לכל מיקרופון שמשמש להקלטת מקור האודיו של זיהוי הדיבור.
- מומלץ מאוד ש[C-SR] יציגו רמות אמפליטודה בטווח התדרים הנמוך: במיוחד מ-±20 dB מ-5 הרץ עד 100 הרץ בהשוואה לטווח התדרים הבינוני עבור כל מיקרופון שמשמש להקלטת מקור האודיו של זיהוי הדיבור.
- מומלץ מאוד להציג רמות אמפליטודה בטווח התדרים הגבוה: במיוחד מ-±30 dB מ-4,000 הרץ עד 22,000 הרץ בהשוואה לטווח התדרים הבינוני עבור כל מיקרופון שמשמש להקלטת מקור האודיו של זיהוי הדיבור.
5.5. הפעלת האודיו
מערכת Android כוללת תמיכה שמאפשרת לאפליקציות להפעיל אודיו דרך ציוד היקפי של פלט אודיו, כפי שמוגדר בקטע 7.8.2.
5.5.1. הפעלת אודיו גולמי
אם הטמעות של מכשירים מצהירות על android.hardware.audio.output
, הן:
-
[C-1-1] חובה לאפשר הפעלה של תוכן אודיו גולמי עם המאפיינים הבאים:
- פורמטים של מקור: Linear PCM, 16 ביט, 8 ביט, float
- ערוצים: מונו, סטריאו, הגדרות תקינות של ריבוי ערוצים עם עד 8 ערוצים
-
תדרי דגימה (בהרץ):
- 8,000, 11,025, 16,000, 22,050, 32,000, 44,100, 48,000 בהגדרות הערוץ שמופיעות למעלה
- 96,000 במונו ובסטריאו
-
צריך לאפשר הפעלה של תוכן אודיו גולמי עם המאפיינים הבאים:
- תדירויות דגימה: 24000
5.5.2 אפקטים של אודיו
Android מספקת API לאפקטים של אודיו להטמעות במכשירים.
אם הטמעות של מכשירים מצהירות על התכונה android.hardware.audio.output
, הן:
- [C-1-1] חובה לתמוך בהטמעות של
EFFECT_TYPE_EQUALIZER
ו-EFFECT_TYPE_LOUDNESS_ENHANCER
שניתן לשלוט בהן באמצעות מחלקות המשנה של AudioEffectEqualizer
ו-LoudnessEnhancer
. - [C-1-2] חובה לתמוך בהטמעה של API להמחשה, שאפשר לשלוט בה באמצעות המחלקה
Visualizer
. - [C-1-3] חובה לתמוך בהטמעה של
EFFECT_TYPE_DYNAMICS_PROCESSING
שניתנת לשליטה באמצעות מחלקת המשנה AudioEffectDynamicsProcessing
. - צריך לתמוך בהטמעות של
EFFECT_TYPE_BASS_BOOST
,EFFECT_TYPE_ENV_REVERB
,EFFECT_TYPE_PRESET_REVERB
ו-EFFECT_TYPE_VIRTUALIZER
שניתן לשלוט בהן באמצעות מחלקות המשנהAudioEffect
BassBoost
,EnvironmentalReverb
,PresetReverb
ו-Virtualizer
. - [C-SR] מומלץ מאוד לתמוך באפקטים בנקודה צפה ובערוצים מרובים.
5.5.3. עוצמת הקול של פלט האודיו
הטמעות של מכשירים לרכב:
- מומלץ לאפשר כוונון של עוצמת הקול בנפרד לכל אחד משידורי האודיו באמצעות סוג התוכן או השימוש כפי שמוגדר על ידי AudioAttributes והשימוש באודיו ברכב כפי שמוגדר באופן ציבורי ב-
android.car.CarAudioManager
.
5.6. זמן אחזור אודיו
זמן אחזור אודיו (audio latency) הוא עיכוב הזמן שחל על אות אודיו שעובר דרך מערכת. אפליקציות רבות מסתמכות על השהיות קצרות כדי להשיג אפקטים קוליים בזמן אמת.
לצורך הסעיף הזה, משתמשים בהגדרות הבאות:
- זמן האחזור של הפלט. המרווח בין הזמן שבו אפליקציה כותבת פריים של נתונים עם קידוד PCM לבין הזמן שבו הצליל התואם מוצג לסביבה במתמר במכשיר, או שהאות יוצא מהמכשיר דרך יציאה וניתן לצפייה חיצונית.
- זמן האחזור של פלט ראשון. זמן האחזור של הפלט של הפריים הראשון, כשהמערכת של פלט האודיו הייתה במצב לא פעיל וכבויה לפני הבקשה.
- זמן האחזור של הפלט הרציף. השהיית הפלט של פריים עוקב, אחרי שהמכשיר מפעיל אודיו.
- זמן האחזור של הקלט. המרווח בין הרגע שבו הסביבה מציגה צליל למכשיר במתמר במכשיר או שאות נכנס למכשיר דרך יציאה, לבין הרגע שאפליקציה קוראת את המסגרת המתאימה של נתונים שמקודדים ב-PCM.
- הקלט אבד. החלק הראשוני של אות קלט שלא ניתן לשימוש או שלא זמין.
- זמן אחזור של קלט במצב התחלתי. סכום הזמן של אובדן הקלט וזמן האחזור של הקלט עבור הפריים הראשון, כשהמערכת של קלט האודיו הייתה במצב לא פעיל וכבויה לפני הבקשה.
- זמן אחזור רציף של קלט. השהיית הקלט של פריים עוקב, בזמן שהמכשיר מקליט אודיו.
- cold output jitter. השונות בין מדידות נפרדות של ערכי זמן האחזור של פלט במצב התחלתי (cold start).
- cold input jitter. השונות בין מדידות נפרדות של ערכי חביון קלט במצב התחלתי (cold start).
- זמן אחזור רציף הלוך ושוב. סכום של זמן האחזור של קלט רציף, זמן האחזור של פלט רציף ותקופת מאגר אחת. תקופת ההשהיה מאפשרת לאפליקציה לעבד את האות ולצמצם את ההפרש בין השלב של זרמי הקלט והפלט.
- OpenSL ES PCM buffer queue API. קבוצת ממשקי ה-API של OpenSL ES שקשורים ל-PCM בתוך Android NDK.
- AAudio native audio API. קבוצת ממשקי ה-API של AAudio בתוך Android NDK.
- חותמת זמן. זוג נתונים שכולל מיקום יחסי של פריים בתוך סטרימינג ואת הזמן המשוער שבו הפריים נכנס לצינור העיבוד של האודיו בנקודת הקצה המשויכת או יוצא ממנו. אפשר לעיין גם בAudioTimestamp.
- glitch. הפרעה זמנית או ערך מדגם שגוי באות האודיו, בדרך כלל בגלל תת-זרימה של מאגר בפלט, הצפת מאגר בקלט או כל מקור אחר של רעש דיגיטלי או אנלוגי.
אם הטמעות במכשירים מצהירות על android.hardware.audio.output
, הן חייבות לעמוד בדרישות הבאות או לעלות עליהן:
- [C-1-1] חותמת הזמן של הפלט שמוחזרת על ידי AudioTrack.getTimestamp ו-
AAudioStream_getTimestamp
מדויקת בטווח של +/- 2 ms. - [C-1-2] זמן האחזור של פלט במצב 'הפעלה קרה' הוא 500 אלפיות השנייה או פחות.
אם הטמעות של מכשירים מצהירות על android.hardware.audio.output
, מומלץ מאוד שהן יעמדו בדרישות הבאות או יעלו עליהן:
- [C-SR] זמן אחזור של 100 אלפיות השנייה או פחות בפלט של התחלה קרה. מומלץ מאוד שמכשירים קיימים וחדשים שמופעלת בהם גרסת Android הזו יעמדו בדרישות האלה כבר עכשיו. בגרסה עתידית של הפלטפורמה בשנת 2021, נדרוש זמן אחזור של פלט קר של 200 אלפיות השנייה או פחות כחובה.
- [C-SR] זמן אחזור של פלט רציף של 45 אלפיות השנייה או פחות.
- [C-SR] צמצום הג'יטר בפלט של הפעלה במצב התחלתי (cold start).
- [C-SR] חותמת הזמן של הפלט שמוחזרת על ידי AudioTrack.getTimestamp ו-
AAudioStream_getTimestamp
מדויקת בטווח של +/- 1 ms.
אם הטמעות המכשירים עומדות בדרישות שלמעלה, אחרי כל כיול ראשוני, כשמשתמשים גם בתור המאגר של OpenSL ES PCM וגם בממשקי ה-API של AAudio native audio, לזמן האחזור של פלט רציף ולזמן האחזור של פלט קר לפחות במכשיר אחד נתמך של פלט אודיו, הם:
- [C-SR] מומלץ מאוד לדווח על אודיו עם זמן אחזור נמוך באמצעות הצהרה על feature flag
android.hardware.audio.low_latency
. - [C-SR] מומלץ מאוד לעמוד בדרישות לאודיו עם השהיה נמוכה באמצעות AAudio API.
- [C-SR] מומלץ מאוד לוודא שבסטרימינג שמוחזר ממנו הערך
AAUDIO_PERFORMANCE_MODE_LOW_LATENCY
מ-AAudioStream_getPerformanceMode()
, הערך שמוחזר על ידיAAudioStream_getFramesPerBurst()
קטן מהערך שמוחזר על ידיandroid.media.AudioManager.getProperty(String)
או שווה לו עבור מפתח המאפייןAudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER
.
אם הטמעות המכשירים לא עומדות בדרישות של אודיו עם השהיה נמוכה באמצעות תור מאגר ה-PCM של OpenSL ES וממשקי ה-API המקוריים של AAudio, הן:
- [C-2-1] אסור לדווח על תמיכה באודיו עם השהיה נמוכה.
אם ההטמעות של המכשיר כוללות את android.hardware.microphone
, הן חייבות לעמוד בדרישות האלה לגבי אודיו מהמיקרופון:
- [C-3-1] השגיאה בחותמות הזמן של הקלט, שמוחזרות על ידי AudioRecord.getTimestamp או
AAudioStream_getTimestamp
, מוגבלת ל-+/- 2 ms. 'שגיאה' כאן פירושה הסטייה מהערך הנכון. - [C-3-2] זמן אחזור של קלט קר של 500 אלפיות השנייה או פחות.
אם הטמעות המכשירים כוללות את android.hardware.microphone
, מומלץ מאוד שהן יעמדו בדרישות האודיו הבאות:
- [C-SR] זמן אחזור של קלט קר של 100 אלפיות השנייה או פחות. מומלץ מאוד שמכשירים קיימים וחדשים שמופעלת בהם גרסת Android הזו יעמדו בדרישות האלה כבר עכשיו. בגרסת פלטפורמה עתידית בשנת 2021, נדרוש זמן אחזור של קלט קר של 200 אלפיות השנייה או פחות כדרישת חובה.
- [C-SR] זמן אחזור רציף של קלט של 30 אלפיות השנייה או פחות.
- [C-SR] זמן אחזור רציף הלוך ושוב של 50 אלפיות השנייה או פחות.
- [C-SR] צמצום הג'יטר של הקלט הקר.
- [C-SR] הגבלת השגיאה בחותמות הזמן של הקלט, כפי שמוחזרות על ידי AudioRecord.getTimestamp או
AAudioStream_getTimestamp
, לערך של +/- 1 ms.
5.7. פרוטוקולי רשת
ההטמעות במכשירים חייבות לתמוך בפרוטוקולים של רשתות מדיה להפעלת אודיו ווידאו, כפי שמפורט בתיעוד של Android SDK.
אם הטמעות של מכשירים כוללות מפענח אודיו או וידאו, הן:
-
[C-1-1] חובה לתמוך בכל ה-Codecs ופורמטי הקונטיינרים הנדרשים בקטע 5.1 דרך HTTP(S).
-
[C-1-2] חובה לתמוך בפורמטים של מקטעי מדיה שמוצגים בטבלה 'פורמטים של מקטעי מדיה' שבהמשך, באמצעות פרוטוקול טיוטה של HTTP Live Streaming, גרסה 7.
-
[C-1-3] חובה לתמוך בפרופיל האודיו והווידאו הבא של RTP ובקודקים הקשורים בטבלת ה-RTSP שלמטה. מקרים יוצאים מן הכלל מפורטים בהערות השוליים לטבלה שבסעיף 5.1.
פורמטים של פלחים של מדיה
פילוח לפי פורמטים | הפניה/ות | תמיכה נדרשת ב-Codec |
---|---|---|
MPEG-2 Transport Stream | ISO 13818 |
קודקים של וידאו:
ו-MPEG-2 זמינים בקטע 5.1.3. קודק אודיו:
|
AAC עם מסגור ADTS ותגי ID3 | ISO 13818-7 | פרטים על AAC והווריאציות שלו מופיעים בסעיף 5.1.1 |
WebVTT | WebVTT |
RTSP (RTP, SDP)
שם הפרופיל | הפניה/ות | תמיכה נדרשת ב-Codec |
---|---|---|
H264 AVC | RFC 6184 | פרטים על H264 AVC מופיעים בסעיף 5.1.3 |
MP4A-LATM | RFC 6416 | פרטים על AAC והווריאציות שלו מופיעים בסעיף 5.1.1 |
H263-1998 |
RFC 3551 RFC 4629 RFC 2190 |
פרטים נוספים על H263 מופיעים בסעיף 5.1.3 |
H263-2000 | RFC 4629 | פרטים נוספים על H263 מופיעים בסעיף 5.1.3 |
AMR | RFC 4867 | פרטים נוספים על AMR-NB מופיעים בסעיף 5.1.1 |
AMR-WB | RFC 4867 | פרטים על AMR-WB מופיעים בסעיף 5.1.1 |
MP4V-ES | RFC 6416 | פרטים נוספים על MPEG-4 SP זמינים בקטע 5.1.3 |
mpeg4-generic | RFC 3640 | פרטים על AAC והווריאציות שלו מופיעים בסעיף 5.1.1 |
MP2T | RFC 2250 | פרטים נוספים זמינים בקטע MPEG-2 Transport Stream שמתחת לקטע HTTP Live Streaming |
5.8. Secure Media
אם הטמעות המכשירים תומכות בפלט וידאו מאובטח ויכולות לתמוך במשטחים מאובטחים, הן:
- [C-1-1] חובה להצהיר על תמיכה ב-
Display.FLAG_SECURE
.
אם הטמעות של מכשירים מצהירות על תמיכה ב-Display.FLAG_SECURE
ותומכות בפרוטוקול של תצוגה אלחוטית, הן:
- [C-2-1] חובה לאבטח את הקישור באמצעות מנגנון חזק מבחינה קריפטוגרפית, כמו HDCP 2.x ומעלה, עבור המסכים שמחוברים באמצעות פרוטוקולים אלחוטיים כמו Miracast.
אם הטמעות של מכשירים מצהירות על תמיכה ב-Display.FLAG_SECURE
ותומכות בצג חיצוני קווי, הן:
- [C-3-1] חובה לתמוך ב-HDCP בגרסה 1.2 ומעלה בכל המסכים החיצוניים שמחוברים דרך יציאה קווית שהמשתמש יכול לגשת אליה.
5.9. ממשק דיגיטלי לכלים מוזיקליים (MIDI)
אם הטמעות של מכשירים מדווחות על תמיכה בתכונה android.software.midi
באמצעות המחלקה android.content.pm.PackageManager
, הן:
-
[C-1-1] חובה לתמוך ב-MIDI בכל אמצעי התקשורת בחומרה שתומכים ב-MIDI, שדרכם מסופקת קישוריות כללית שאינה MIDI, כאשר אמצעי התקשורת האלה הם:
- מצב מארח USB, סעיף 7.7
- מצב ציוד היקפי בחיבור USB, סעיף 7.7
- MIDI over Bluetooth LE acting in central role, section 7.4.3
-
[C-1-2] חובה לתמוך בהעברת נתוני MIDI בין אפליקציות (מכשירי MIDI וירטואליים)
-
[C-1-3] חובה לכלול את libamidi.so (תמיכה מקומית ב-MIDI)
5.10. אודיו מקצועי
אם הטמעות של מכשירים מדווחות על תמיכה בתכונה android.hardware.audio.pro
באמצעות המחלקה android.content.pm.PackageManager, הן:
- [C-1-1] חובה לדווח על תמיכה בתכונה
android.hardware.audio.low_latency
. - [C-1-2] חובה שיהיה זמן אחזור רציף של אודיו הלוך ושוב, כפי שמוגדר בקטע 5.6 בנושא זמן אחזור של אודיו, של 20 אלפיות השנייה או פחות, ומומלץ שיהיה 10 אלפיות השנייה או פחות לפחות בנתיב נתמך אחד.
- [C-1-3] חובה לכלול יציאות USB שתומכות במצב מארח USB ובמצב ציוד היקפי USB.
- [C-1-4] חובה לדווח על תמיכה בתכונה
android.software.midi
. - [C-1-5] המכשיר חייב לעמוד בדרישות של זמן האחזור והאודיו ב-USB באמצעות OpenSL ES PCM buffer queue API ולפחות נתיב אחד של AAudio native audio API.
- [SR] מומלץ מאוד לעמוד בדרישות של זמן האחזור והאודיו ב-USB באמצעות AAudio native audio API ולא באמצעות MMAP path.
- [C-1-6] חובה שזמן האחזור של הפלט במצב 'קר' יהיה 200 אלפיות השנייה או פחות.
- [C-1-7] זמן האחזור של קלט קר חייב להיות 200 אלפיות השנייה או פחות.
- [SR] מומלץ מאוד לספק רמה עקבית של ביצועי CPU בזמן שהאודיו פעיל ועומס ה-CPU משתנה. מומלץ לבצע את הבדיקה הזו באמצעות גרסת אפליקציית Android של SynthMark עם מזהה commit 09b13c6f49ea089f8c31e5d035f912cc405b7ab8. הכלי SynthMark משתמש בסינתיסייזר תוכנה שפועל במסגרת אודיו מדומה שמודדת את ביצועי המערכת. צריך להפעיל את אפליקציית SynthMark באמצעות האפשרות 'בדיקה אוטומטית' ולקבל את התוצאות הבאות:
- voicemark.90 >= 32 voices
- latencymark.fixed.little <= 15 msec
- latencymark.dynamic.little <= 50 msec
במסמכי התיעוד של SynthMark מוסבר על המדדים.
- מומלץ לצמצם את אי הדיוק ואת הסחיפה של שעון האודיו ביחס לזמן רגיל.
- צריך לצמצם את הסחף של שעון האודיו ביחס למעבד
CLOCK_MONOTONIC
כששניהם פעילים. - מומלץ לצמצם את השהיית האודיו באמצעות מתמרים במכשיר.
- מומלץ למזער את זמן האחזור של האודיו באודיו דיגיטלי ב-USB.
- מומלץ לתעד את מדידות זמן האחזור של האודיו בכל הנתיבים.
- צריך למזער את הג'יטר בזמני הכניסה של הקריאה החוזרת להשלמת מאגר השמע, כי זה משפיע על אחוז רוחב הפס המלא של המעבד שזמין לשימוש על ידי הקריאה החוזרת.
- צריך לספק אפס תקלות באודיו בשימוש רגיל בערך השהיה שדווח.
- צריך לספק אפס הבדלים בזמן האחזור בין הערוצים.
- צריך למזער את זמן האחזור הממוצע של MIDI בכל אמצעי התקשורת.
- צריך לצמצם את השונות בזמן האחזור של MIDI בעומס (ג'יטר) בכל אמצעי התקשורת.
- צריך לספק חותמות זמן מדויקות של MIDI בכל אמצעי התקשורת.
- צריך לצמצם את הרעש באות האודיו במתמרים שבמכשיר, כולל התקופה מיד אחרי הפעלה במצב התחלתי.
- מומלץ לספק אפס הפרש בשעון האודיו בין הצדדים של הקלט והפלט של נקודות קצה תואמות, כששניהם פעילים. דוגמאות לנקודות קצה תואמות כוללות את המיקרופון והרמקול במכשיר, או את הקלט והפלט של שקע האודיו.
- צריך לטפל בקריאות חוזרות להשלמת מאגר האודיו בצד הקלט ובצד הפלט של נקודות קצה תואמות באותו השרשור כששניהם פעילים, ולהיכנס לקריאה החוזרת של הפלט מיד אחרי החזרה מהקריאה החוזרת של הקלט. לחלופין, אם אי אפשר לטפל בקריאות החוזרות באותו השרשור, צריך להזין את הקריאה החוזרת של הפלט זמן קצר אחרי הזנת הקריאה החוזרת של הקלט, כדי לאפשר לאפליקציה תזמון עקבי של צדדי הקלט והפלט.
- מומלץ לצמצם את הפרש הפאזה בין אחסון האודיו ב-HAL בצד הקלט ובצד הפלט של נקודות קצה תואמות.
- צריך למזער את זמן התגובה למגע.
- צריך למזער את השונות בזמן האחזור של המגע בעומס (ג'יטר).
- זמן האחזור מהקלט של מגע ועד לפלט האודיו צריך להיות קטן מ-40 אלפיות השנייה או שווה לו.
אם הטמעות במכשירים עומדות בכל הדרישות שלמעלה, הן:
- [SR] מומלץ מאוד לדווח על תמיכה בתכונה
android.hardware.audio.pro
באמצעות המחלקהandroid.content.pm.PackageManager
.
אם הטמעות המכשירים כוללות שקע אודיו של 3.5 מ"מ עם 4 מוליכים, הן:
- [C-2-1] חובה שזמן האחזור הרציף של האודיו הלוך ושוב יהיה 20 אלפיות השנייה או פחות בנתיב שקע האודיו.
- [SR] מומלץ מאוד לפעול בהתאם לסעיף מפרטים של מכשיר נייד (שקע) של מפרט אוזניות אודיו חוטיות (גרסה 1.1).
- זמן האחזור הרציף של האודיו הלוך ושוב צריך להיות 10 אלפיות השנייה או פחות בנתיב של שקע האודיו.
אם יישומי המכשיר לא כוללים שקע אודיו בגודל 3.5 מ"מ עם 4 מוליכים, וכוללים יציאות USB שתומכות במצב מארח USB, הם:
- [C-3-1] חובה להטמיע את מחלקת האודיו של USB.
- [C-3-2] חובה שזמן האחזור הלוך ושוב של האודיו יהיה רציף ויעמוד על 20 אלפיות השנייה או פחות ביציאת מצב המארח של ה-USB באמצעות מחלקת אודיו של USB.
- זמן האחזור הרציף של האודיו הלוך ושוב צריך להיות 10 אלפיות השנייה או פחות ביציאת מצב המארח של ה-USB באמצעות מחלקת אודיו של USB.
- [C-SR] מומלץ מאוד לתמוך בקלט/פלט בו-זמני של עד 8 ערוצים בכל כיוון, בקצב דגימה של 96kHz ובעומק של 24 ביט או 32 ביט, כשמשתמשים בציוד היקפי של אודיו USB שתומך גם בדרישות האלה.
אם הטמעות המכשירים כוללות יציאת HDMI, הן:
- צריך לתמוך בפלט בסטריאו ובשמונה ערוצים בעומק של 20 ביט או 24 ביט וב-192 kHz ללא אובדן של עומק הביט או דגימה מחדש, לפחות בהגדרה אחת.
5.11. צילום ללא עיבוד
Android כולל תמיכה בהקלטה של אודיו לא מעובד באמצעות מקור האודיו android.media.MediaRecorder.AudioSource.UNPROCESSED
. ב-OpenSL ES, אפשר לגשת אליו באמצעות הגדרת ברירת המחדל להקלטה SL_ANDROID_RECORDING_PRESET_UNPROCESSED
.
אם הטמעות של מכשירים נועדו לתמוך במקור אודיו לא מעובד ולהפוך אותו לזמין לאפליקציות של צד שלישי, הן:
-
[C-1-1] חובה לדווח על התמיכה באמצעות המאפיין
android.media.AudioManager
PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED. -
[C-1-2] חייבת להיות תצוגה של מאפייני אמפליטודה לעומת תדר שטוחים בקירוב בטווח התדרים האמצעי: באופן ספציפי, ±10dB מ-100 הרץ עד 7,000 הרץ לכל מיקרופון שמשמש להקלטת מקור האודיו שלא עבר עיבוד.
-
[C-1-3] רמות האמפליטודה חייבות להיות בטווח התדרים הנמוך: במיוחד מ-±20 dB מ-5 הרץ עד 100 הרץ בהשוואה לטווח התדרים הבינוני עבור כל מיקרופון שמשמש להקלטת מקור האודיו שלא עבר עיבוד.
-
[C-1-4] רמות האמפליטודה חייבות להיות בטווח התדרים הגבוה: במיוחד מ-±30 dB מ-7,000 הרץ עד 22,000 הרץ בהשוואה לטווח התדרים הבינוני עבור כל מיקרופון שמשמש להקלטת מקור האודיו שלא עבר עיבוד.
-
[C-1-5] חובה להגדיר את רגישות קלט האודיו כך שמקור טון סינוסי בתדר 1,000 הרץ שמופעל ברמת לחץ קול (SPL) של 94 דציבלים יניב תגובה עם RMS של 520 עבור דגימות של 16 ביט (או -36 דציבלים בסולם מלא עבור דגימות של נקודה צפה/דיוק כפול) לכל מיקרופון שמשמש להקלטת מקור האודיו שלא עבר עיבוד.
-
[C-1-6] לכל מיקרופון שמשמש להקלטת מקור האודיו הלא מעובד צריך להיות יחס אות לרעש (SNR) של 60 דציבלים ומעלה. (לעומת זאת, יחס האות לרעש נמדד כהפרש בין 94 dB SPL לבין SPL שווה ערך של רעש עצמי, עם משקל A).
-
[C-1-7] העיוות ההרמוני הכולל (THD) חייב להיות נמוך מ-1% עבור 1 kHZ ברמת קלט של 90 dB SPL בכל מיקרופון שמשמש להקלטת מקור האודיו שלא עבר עיבוד.
-
אסור שיהיה עיבוד אותות אחר (למשל, בקרת עוצמה אוטומטית, מסנן מעביר גבוה או ביטול הד) בנתיב, מלבד מכפיל רמה כדי להביא את הרמה לטווח הרצוי. במילים אחרות:
- [C-1-8] אם עיבוד אותות כלשהו קיים בארכיטקטורה מסיבה כלשהי, הוא חייב להיות מושבת ולא לגרום לעיכוב או לזמן אחזור נוסף בנתיב האות.
- [C-1-9] מותר להשתמש במכפיל הרמה בנתיב, אבל אסור שהוא יגרום לעיכוב או לזמן אחזור בנתיב האות.
כל המדידות של רמת לחץ הקול מתבצעות ישירות ליד המיקרופון שנבדק. אם יש כמה הגדרות למיקרופון, הדרישות האלה חלות על כל מיקרופון.
אם הטמעות במכשירים מצהירות על android.hardware.microphone
אבל לא תומכות במקור אודיו לא מעובד, הן:
- [C-2-1] חובה להחזיר
null
עבור שיטת ה-API AudioManager.getProperty(PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED)
, כדי לציין בצורה נכונה שאין תמיכה. - עדיין מומלץ מאוד להשתמש ב-[SR] כדי לעמוד בכמה שיותר דרישות של נתיב האות למקור ההקלטה שלא עבר עיבוד.
6. תאימות של כלים ואפשרויות למפתחים
6.1. כלים למפתחים
הטמעות במכשיר:
- [C-0-1] חובה לתמוך ב-Android Developer Tools שזמינים ב-Android SDK.
-
ממשק הגישור של Android (ADB)
- [C-0-2] חובה לתמוך ב-adb כפי שמתועד ב-Android SDK ובפקודות ה-shell שמופיעות ב-AOSP, שבהן יכולים להשתמש מפתחי אפליקציות, כולל
dumpsys
cmd stats
- [C-SR] מומלץ מאוד לתמוך בפקודת ה-Shell
cmd testharness
. - [C-0-3] אסור לשנות את הפורמט או את התוכן של אירועי מערכת במכשיר (batterystats , diskstats, fingerprint, graphicsstats, netstats, notification, procstats) שנרשמו ביומן באמצעות הפקודה dumpsys.
- [C-0-10] חובה לתעד, ללא השמטה, ולהפוך את האירועים הבאים לנגישים ולזמינים לפקודת ה-Shell
cmd stats
ולמחלקת ה-API של המערכתStatsManager
.- ActivityForegroundStateChanged
- AnomalyDetected
- AppBreadcrumbReported
- AppCrashOccurred
- AppStartOccurred
- BatteryLevelChanged
- BatterySaverModeStateChanged
- BleScanResultReceived
- BleScanStateChanged
- ChargingStateChanged
- DeviceIdleModeStateChanged
- ForegroundServiceStateChanged
- GpsScanStateChanged
- JobStateChanged
- PluggedStateChanged
- ScheduledJobStateChanged
- ScreenStateChanged
- SyncStateChanged
- SystemElapsedRealtime
- UidProcessStateChanged
- WakelockStateChanged
- WakeupAlarmOccurred
- WifiLockStateChanged
- WifiMulticastLockStateChanged
- WifiScanStateChanged
- [C-0-4] שירות ה-daemon של adb בצד המכשיר חייב להיות לא פעיל כברירת מחדל, וחייב להיות מנגנון שנגיש למשתמש כדי להפעיל את Android Debug Bridge.
- [C-0-5] חובה לתמוך ב-adb מאובטח. Android כולל תמיכה ב-adb מאובטח. הפעלת adb מאובטח מאפשרת להשתמש ב-adb במארחים מוכרים ומאומתים.
-
[C-0-6] חובה לספק מנגנון שמאפשר להתחבר ל-adb ממכונת מארח. לדוגמה:
- הטמעות של מכשירים ללא יציאת USB שתומכת במצב ציוד היקפי חייבות להטמיע את adb דרך רשת מקומית (כמו Ethernet או Wi-Fi).
- חובה לספק מנהלי התקנים ל-Windows 7, 9 ו-10, כדי לאפשר למפתחים להתחבר למכשיר באמצעות פרוטוקול adb.
- [C-0-2] חובה לתמוך ב-adb כפי שמתועד ב-Android SDK ובפקודות ה-shell שמופיעות ב-AOSP, שבהן יכולים להשתמש מפתחי אפליקציות, כולל
-
Dalvik Debug Monitor Service (ddms)
- [C-0-7] חובה לתמוך בכל התכונות של ddms כפי שמתועד ב-Android SDK. מכיוון ש-ddms משתמש ב-adb, התמיכה ב-ddms צריכה להיות לא פעילה כברירת מחדל, אבל היא חייבת להיות נתמכת בכל פעם שהמשתמש מפעיל את Android Debug Bridge, כמו שמתואר למעלה.
-
Monkey
- [C-0-8] חובה לכלול את מסגרת Monkey ולאפשר לאפליקציות להשתמש בה.
-
SysTrace
- [C-0-9] חייבת להיות תמיכה בכלי systrace כפי שמתואר ב-Android SDK. הכלי Systrace חייב להיות מושבת כברירת מחדל, וחייב להיות מנגנון שנגיש למשתמשים להפעלת Systrace.
-
- [C-SR] מומלץ מאוד לחשוף קובץ בינארי
/system/bin/perfetto
למשתמש של המעטפת, שתואם לשורת הפקודה לפי התיעוד של perfetto. - [C-SR] מומלץ מאוד להשתמש בבינארי של perfetto כדי לקבל כקלט קובץ הגדרות של protobuf שתואם לסכימה שמוגדרת במסמכי התיעוד של perfetto.
- [C-SR] מומלץ מאוד להשתמש ב-binary של perfetto כדי לכתוב כפלט נתוני מעקב של protobuf שתואמים לסכימה שמוגדרת במסמכי התיעוד של perfetto.
- [C-SR] מומלץ מאוד לספק, באמצעות קובץ הבינארי של perfetto, לפחות את מקורות הנתונים שמתוארים במסמכי התיעוד של perfetto.
- [C-SR] מומלץ מאוד לחשוף קובץ בינארי
-
אם הטמעות המכשירים תומכות בפקודת ה-Shell
cmd testharness
ומריצות את הפקודהcmd testharness enable
, הן:- [C-2-1] חובה להחזיר את הערך
true
עבורActivityManager.isRunningInUserTestHarness()
- [C-2-2] חובה להטמיע את מצב מסגרת הבדיקה כפי שמתואר במסמכי התיעוד של מצב מסגרת הבדיקה.
- [C-2-1] חובה להחזיר את הערך
אם הטמעות של מכשירים מדווחות על תמיכה ב-Vulkan 1.0 ומעלה באמצעות android.hardware.vulkan.version
דגלי התכונות, הן:
- [C-1-1] חובה לספק למפתח האפליקציה אפשרות להפעיל או להשבית שכבות לניפוי באגים ב-GPU.
- [C-1-2] חובה, כששכבות הניפוי באגים של ה-GPU מופעלות, לבצע ספירה של השכבות בספריות שסופקו על ידי כלים חיצוניים (כלומר, לא חלק מהפלטפורמה או מחבילת האפליקציה) שנמצאים בספריית הבסיס של אפליקציות שאפשר לנפות בהן באגים, כדי לתמוך בשיטות ה-API vkEnumerateInstanceLayerProperties() ו-vkCreateInstance().
6.2. אפשרויות למפתחים
מערכת Android כוללת תמיכה במפתחים להגדרת הגדרות שקשורות לפיתוח אפליקציות.
הטמעות של מכשירים חייבות לספק חוויה עקבית באפשרויות למפתחים. הן:
- [C-0-1] חובה לכבד את הכוונה android.settings.APPLICATION_DEVELOPMENT_SETTINGS כדי להציג הגדרות שקשורות לפיתוח אפליקציות. ההטמעה של Android במעלה הזרם מסתירה את התפריט 'אפשרויות למפתחים' כברירת מחדל, ומאפשרת למשתמשים להפעיל את 'אפשרויות למפתחים' אחרי שהם לוחצים שבע (7) פעמים על פריט התפריט הגדרות > מידע על המכשיר > מספר Build.
- [C-0-2] חובה להסתיר את האפשרויות למפתחים כברירת מחדל.
- [C-0-3] חובה לספק מנגנון ברור שלא מעניק יתרון לאפליקציית צד שלישי אחת על פני אחרת כדי להפעיל את אפשרויות הפיתוח. חובה לספק מסמך או אתר שגלויים לציבור ומתארים איך להפעיל את אפשרויות הפיתוח. חייב להיות קישור למסמך או לאתר הזה ממסמכי Android SDK.
- מומלץ להציג למשתמש התראה ויזואלית שוטפת כשמופעלות אפשרויות למפתחים, אם יש חשש לגבי בטיחות המשתמש.
- יכול להיות שנצטרך להגביל באופן זמני את הגישה לתפריט 'אפשרויות למפתחים' על ידי הסתרה חזותית או השבתה של התפריט, כדי למנוע הסחות דעת בתרחישים שבהם בטיחות המשתמש נמצאת בסיכון.
7. תאימות חומרה
אם מכשיר כולל רכיב חומרה מסוים שיש לו ממשק API תואם למפתחים של צד שלישי:
- [C-0-1] הטמעת המכשיר חייבת להטמיע את ה-API הזה כפי שמתואר במסמכי התיעוד של Android SDK.
אם ממשק API ב-SDK מקיים אינטראקציה עם רכיב חומרה שמוגדר כאופציונלי, וההטמעה במכשיר לא כוללת את הרכיב הזה:
- [C-0-2] עדיין צריך להציג הגדרות מלאות של מחלקות (כפי שמתועד ב-SDK) עבור ממשקי ה-API של הרכיבים.
- [C-0-3] התנהגויות ה-API חייבות להיות מוטמעות כפעולות שלא עושות כלום (no-ops) בצורה סבירה כלשהי.
- [C-0-4] ה-methods של ה-API חייבים להחזיר ערכי null במקרים שמותרים לפי התיעוד של ה-SDK.
- [C-0-5] שיטות ה-API חייבות להחזיר הטמעות no-op של מחלקות שבהן ערכי null לא מותרים לפי תיעוד ה-SDK.
- [C-0-6] שיטות API לא יכולות להחזיר חריגים שלא מתועדים במסמכי ה-SDK.
- [C-0-7] יישומי מכשירים חייבים לדווח באופן עקבי על מידע מדויק לגבי הגדרת החומרה באמצעות השיטות
getSystemAvailableFeatures()
ו-hasSystemFeature(String)
במחלקה android.content.pm.PackageManager עבור אותו טביעת אצבע של build.
דוגמה אופיינית לתרחיש שבו הדרישות האלה חלות היא telephony API: גם במכשירים שאינם טלפונים, חובה להטמיע את ממשקי ה-API האלה כפעולות סבירות שלא עושות כלום.
7.1. תצוגה וגרפיקה
Android כולל כלים שמתאימים באופן אוטומטי את נכסי האפליקציה ואת פריסות ממשק המשתמש למכשיר, כדי להבטיח שאפליקציות של צד שלישי יפעלו בצורה טובה במגוון תצורות חומרה. במסכים שתואמים ל-Android שבהם יכולות לפעול כל האפליקציות של צד שלישי שתואמות ל-Android, ההטמעות של המכשירים חייבות להטמיע כראוי את ממשקי ה-API וההתנהגויות האלה, כפי שמפורט בקטע הזה.
היחידות שאליהן מתייחסות הדרישות בקטע הזה מוגדרות כך:
- גודל פיזי באלכסון. המרחק באינצ'ים בין שתי פינות מנוגדות של החלק המואר של המסך.
- נקודות לאינץ' (DPI). מספר הפיקסלים שכלולים בטווח ליניארי אופקי או אנכי של אינץ' אחד. אם מצוינים ערכי dpi, גם ה-dpi האופקי וגם ה-dpi האנכי חייבים להיות בטווח.
- יחס גובה-רוחב. היחס בין הפיקסלים של המימד הארוך יותר לבין הפיקסלים של המימד הקצר יותר של המסך. לדוגמה, תצוגה של 480x854 פיקסלים תהיה 854/480 = 1.779, או בערך '16:9'.
- פיקסל שלא תלוי בצפיפות (dp). יחידת הפיקסל הווירטואלית מנורמלת למסך של 160 dpi, ומחושבת כך: פיקסלים = dps * (צפיפות/160).
7.1.1. הגדרת תצורה של מסך
7.1.1.1. גודל וצורה של המסך
מסגרת ממשק המשתמש של Android תומכת במגוון גדלים שונים של פריסות מסך לוגיות, ומאפשרת לאפליקציות לשלוח שאילתה לגבי גודל פריסת המסך של התצורה הנוכחית באמצעות Configuration.screenLayout
עם SCREENLAYOUT_SIZE_MASK
ו-Configuration.smallestScreenWidthDp
.
הטמעות במכשיר:
-
[C-0-1] חובה לדווח על גודל הפריסה הנכון של
Configuration.screenLayout
כפי שמוגדר בתיעוד של Android SDK. באופן ספציפי, הטמעות של מכשירים חייבות לדווח על המידות הנכונות של המסך בפיקסלים לוגיים שאינם תלויים בדחיסות (dp), כמו שמוצג בהמשך:- במכשירים שבהם הערך של
Configuration.uiMode
הוא כל ערך אחר מלבד UI_MODE_TYPE_WATCH, והגודל שלConfiguration.screenLayout
הואsmall
, הגודל המינימלי שלConfiguration.screenLayout
חייב להיות 426dp x 320dp. - במכשירים שמדווחים על גודל
normal
שלConfiguration.screenLayout
, הגודל צריך להיות לפחות 480 dp x 320 dp. - במכשירים שמדווחים על גודל
large
עבורConfiguration.screenLayout
, צריך להיות לפחות 640dp x 480dp. - במכשירים שמדווחים על גודל
xlarge
עבורConfiguration.screenLayout
, הגודל חייב להיות לפחות 960 dp x 720 dp.
- במכשירים שבהם הערך של
-
[C-0-2] חובה לכבד באופן תקין את התמיכה המוצהרת של האפליקציות בגדלי מסך באמצעות המאפיין <
supports-screens
> בקובץ AndroidManifest.xml, כפי שמתואר בתיעוד של Android SDK. -
יכול להיות שיש לו מסכים תואמי Android עם פינות מעוגלות.
אם הטמעות המכשירים תומכות ב-UI_MODE_TYPE_NORMAL
וכוללות את המסכים התואמים ל-Android עם פינות מעוגלות, הן:
- [C-1-1] חובה לוודא שרדיוס הפינות המעוגלות קטן מ-38dp או שווה לו.
- צריך לכלול אמצעי נוחות למשתמש כדי לעבור למצב התצוגה עם הפינות המלבניות.
7.1.1.2. יחס גובה-רוחב של המסך
אין הגבלה על יחס הגובה-רוחב של המסך הפיזי עבור מסכים שתואמים ל-Android, אבל יחס הגובה-רוחב של המסך הלוגי שבו מוצגות אפליקציות של צד שלישי, שאפשר לחשב אותו לפי ערכי הגובה והרוחב שמופיעים ב-APIs של view.Display
וב-APIs של Configuration, חייב לעמוד בדרישות הבאות:
-
[C-0-1] הטמעות של מכשירים עם הערך
Configuration.uiMode
שמוגדר כ-UI_MODE_TYPE_NORMAL
חייבות לכלול ערך של יחס גובה-רוחב שהוא קטן מ-1.86 (בערך 16:9) או שווה לו, אלא אם האפליקציה עומדת באחד מהתנאים הבאים:- האפליקציה הצהירה שהיא תומכת ביחס גובה-רוחב גדול יותר של המסך באמצעות ערך המטא-נתונים
android.max_aspect
. - האפליקציה מצהירה שאפשר לשנות את גודל החלון שלה באמצעות המאפיין android:resizeableActivity.
- האפליקציה מטרגטת רמת API 24 ומעלה, ולא מוצהר בה
android:maxAspectRatio
שמגביל את יחס הגובה-רוחב המותר.
- האפליקציה הצהירה שהיא תומכת ביחס גובה-רוחב גדול יותר של המסך באמצעות ערך המטא-נתונים
-
[C-0-2] הטמעות של מכשירים עם
Configuration.uiMode
שמוגדר כ-UI_MODE_TYPE_NORMAL
צריכות לכלול ערך של יחס גובה-רוחב ששווה ל-1.3333 (4:3) או גדול ממנו, אלא אם אפשר להרחיב את האפליקציה על ידי עמידה באחד מהתנאים הבאים:- האפליקציה מצהירה שאפשר לשנות את גודל החלון שלה באמצעות המאפיין android:resizeableActivity.
- האפליקציה מצהירה על
android:minAspectRatio
שיגביל את יחס הגובה-רוחב המותר.
-
[C-0-3] בהטמעות של מכשירים עם הערך
Configuration.uiMode
שמוגדר כ-UI_MODE_TYPE_WATCH
, חובה להגדיר את יחס הגובה-רוחב כ-1.0 (1:1).
7.1.1.3. דחיסות מסך
מסגרת ממשק המשתמש של Android מגדירה קבוצה של צפיפויות לוגיות סטנדרטיות כדי לעזור למפתחי אפליקציות לטרגט משאבי אפליקציות.
-
[C-0-1] כברירת מחדל, הטמעות של מכשירים חייבות לדווח רק על אחת מצפיפויות המסגרת של Android שמפורטות ב-
DisplayMetrics
דרך APIDENSITY_DEVICE_STABLE
, והערך הזה לא יכול להשתנות בשום שלב. עם זאת, המכשיר יכול לדווח על צפיפות שרירותית שונה בהתאם לשינויים בהגדרות התצוגה שבוצעו על ידי המשתמש (לדוגמה, גודל התצוגה) שהוגדרו אחרי ההפעלה הראשונית. -
הטמעות של מכשירים צריכות להגדיר את הצפיפות הסטנדרטית של מסגרת Android שהכי קרובה מבחינה מספרית לצפיפות הפיזית של המסך, אלא אם הצפיפות הלוגית הזו גורמת לכך שגודל המסך המדווח קטן מהגודל המינימלי הנתמך. אם צפיפות המסגרת הרגילה של Android שהכי קרובה מבחינה מספרית לצפיפות הפיזית יוצרת גודל מסך שקטן מגודל המסך התואם הקטן ביותר הנתמך (רוחב של 320dp), הטמעות של מכשירים צריכות לדווח על צפיפות המסגרת הרגילה של Android שהכי קרובה מבחינה מספרית לצפיפות הפיזית.
אם יש אפשרות לשנות את גודל התצוגה של המכשיר:
- [C-1-1] גודל התצוגה לא יכול להיות גדול יותר מפי 1.5 מהצפיפות המקורית, או ליצור ממד מסך מינימלי אפקטיבי שקטן מ-320dp (שווה ערך למסווג המשאבים sw320dp), לפי מה שקורה קודם.
- [C-1-2] גודל התצוגה לא יכול להיות קטן יותר מ-0.85 פעמים הצפיפות המקורית.
- כדי להבטיח שימושיות טובה וגדלים עקביים של גופנים, מומלץ לספק את האפשרויות הבאות של שינוי קנה מידה של אפשרויות תצוגה מקוריות (תוך הקפדה על המגבלות שצוינו למעלה)
- קטן: 0.85x
- ברירת מחדל: 1x (קנה מידה מקורי של התצוגה)
- גדול: 1.15x
- גדול יותר: 1.3x
- הגדול ביותר 1.45x
7.1.2. מדדים של רשת המדיה
אם הטמעות המכשירים כוללות מסכים שתואמים ל-Android או פלט וידאו למסכים שתואמים ל-Android, הן:
- [C-1-1] חובה לדווח על ערכים נכונים לכל מדדי התצוגה שתואמים ל-Android ומוגדרים ב-API
android.util.DisplayMetrics
.
אם הטמעות המכשיר לא כוללות מסך מוטמע או פלט וידאו, הן:
- [C-2-1] חובה לדווח על ערכים נכונים של התצוגה שתואמת ל-Android, כפי שמוגדר ב-API
android.util.DisplayMetrics
עבורview.Display
ברירת המחדל שנוצרה באמצעות אמולטור.
7.1.3. כיוון מסך
הטמעות במכשיר:
- [C-0-1] חובה לדווח על כיווני המסך הנתמכים (
android.hardware.screen.portrait
ו/אוandroid.hardware.screen.landscape
) וחובה לדווח על כיוון נתמך אחד לפחות. לדוגמה, מכשיר עם מסך לרוחב בעל כיוון קבוע, כמו טלוויזיה או מחשב נייד, צריך לדווח רק עלandroid.hardware.screen.landscape
. - [C-0-2] חובה לדווח על הערך הנכון של האוריינטציה הנוכחית של המכשיר, בכל פעם שמתבצעת שאילתה באמצעות
android.content.res.Configuration.orientation
,android.view.Display.getOrientation()
או ממשקי API אחרים.
אם הטמעות המכשירים תומכות בשני כיווני המסך, הן:
- [C-1-1] המכשיר חייב לתמוך בכיוון דינמי של המסך לאורך או לרוחב, בהתאם לאפליקציות. כלומר, המכשיר חייב לכבד את הבקשה של האפליקציה לכיוון מסך ספציפי.
- [C-1-2] אסור לשנות את גודל המסך או הצפיפות המדווחים כשמשנים את הכיוון.
- יכול להיות שיוגדר כברירת מחדל כיוון לאורך או לרוחב.
7.1.4. האצת גרפיקה דו-ממדית ותלת-ממדית
7.1.4.1 OpenGL ES
הטמעות במכשיר:
- [C-0-1] חובה לזהות בצורה נכונה את גרסאות OpenGL ES הנתמכות (1.1, 2.0, 3.0, 3.1, 3.2) באמצעות ממשקי ה-API המנוהלים (למשל באמצעות השיטה
GLES10.getString()
) וממשקי ה-API המקוריים. - [C-0-2] חובה לכלול תמיכה בכל ממשקי ה-API המנוהלים וממשקי ה-API המקוריים התואמים לכל גרסה של OpenGL ES שהמכשיר מזוהה כתומך בה.
אם הטמעות המכשירים כוללות מסך או פלט וידאו, הן:
- [C-1-1] המכשיר חייב לתמוך ב-OpenGL ES 1.1 וב-2.0, כפי שמתואר ומפורט בתיעוד Android SDK.
- [C-SR] מומלץ מאוד לתמוך ב-OpenGL ES 3.1.
- צריך לתמוך ב-OpenGL ES 3.2.
אם הטמעות המכשירים תומכות באחת מגרסאות OpenGL ES, הן:
- [C-2-1] חובה לדווח באמצעות ממשקי ה-API המנוהלים של OpenGL ES וממשקי ה-API המקוריים של OpenGL ES על כל תוסף אחר של OpenGL ES שהם הטמיעו, ולהיפך, אסור לדווח על מחרוזות של תוספים שהם לא תומכים בהם.
- [C-2-2] חובה לתמוך בתוספים
EGL_KHR_image
,EGL_KHR_image_base
,EGL_ANDROID_image_native_buffer
,EGL_ANDROID_get_native_client_buffer
,EGL_KHR_wait_sync
,EGL_KHR_get_all_proc_addresses
,EGL_ANDROID_presentation_time
,EGL_KHR_swap_buffers_with_damage
,EGL_ANDROID_recordable
ו-EGL_ANDROID_GLES_layers
. - [C-SR] מומלץ מאוד לתמוך בתוספים
EGL_KHR_partial_update
ו-OES_EGL_image_external
. - צריכים לדווח בצורה מדויקת באמצעות השיטה
getString()
על כל פורמט דחיסה של טקסטורה שהם תומכים בו, שלרוב הוא ספציפי לספק.
אם יישומי מכשירים מצהירים על תמיכה ב-OpenGL ES 3.0, 3.1 או 3.2, הם:
- [C-3-1] חובה לייצא את סמלי הפונקציות המתאימים לגרסה הזו בנוסף לסמלי הפונקציות של OpenGL ES 2.0 בספרייה libGLESv2.so.
- [SR] מומלץ מאוד לתמוך בתוסף
OES_EGL_image_external_essl3
.
אם הטמעות המכשירים תומכות ב-OpenGL ES 3.2, הן:
- [C-4-1] המכשיר חייב לתמוך בחבילת ההרחבות של OpenGL ES Android במלואה.
אם הטמעות המכשירים תומכות בחבילת ההרחבות ל-Android של OpenGL ES במלואה, הן:
- [C-5-1] חובה לזהות את התמיכה באמצעות תג התכונה
android.hardware.opengles.aep
.
אם הטמעות של מכשירים חושפות תמיכה בתוסף EGL_KHR_mutable_render_buffer
, הן:
- [C-6-1] חובה לתמוך גם בתוסף
EGL_ANDROID_front_buffer_auto_refresh
.
7.1.4.2 Vulkan
Android כולל תמיכה ב-Vulkan, ממשק API חוצה פלטפורמות עם תקורה נמוכה לגרפיקה תלת-ממדית עם ביצועים גבוהים.
אם הטמעות המכשירים תומכות ב-OpenGL ES 3.1, הן:
- [SR] מומלץ מאוד לכלול תמיכה ב-Vulkan 1.1.
אם הטמעות המכשירים כוללות מסך או פלט וידאו, הן:
- צריך לכלול תמיכה ב-Vulkan 1.1.
אם ההטמעות של המכשירים כוללות תמיכה ב-Vulkan 1.0, הן:
- [C-1-1] חובה לדווח על ערך השלם הנכון באמצעות סימון התכונות
android.hardware.vulkan.level
ו-android.hardware.vulkan.version
. - [C-1-2] חובה למנות לפחות
VkPhysicalDevice
עבור Vulkan native APIvkEnumeratePhysicalDevices()
. - [C-1-3] חובה להטמיע באופן מלא את ממשקי Vulkan 1.0 API עבור כל
VkPhysicalDevice
שמופיע ברשימה. - [C-1-4] חובה למנות שכבות, שנכללות בספריות מקוריות בשם
libVkLayer*.so
בספריית הספריות המקוריות של חבילת האפליקציה, באמצעות ממשקי ה-API המקוריים של VulkanvkEnumerateInstanceLayerProperties()
ו-vkEnumerateDeviceLayerProperties()
. - [C-1-5] אסור למנות שכבות שסופקו על ידי ספריות מחוץ לחבילת האפליקציה, או לספק דרכים אחרות למעקב אחר Vulkan API או ליירוט שלו, אלא אם המאפיין
android:debuggable
של האפליקציה מוגדר כ-true
. - [C-1-6] חובה לדווח על כל מחרוזות התוספים שהן תומכות בהן באמצעות ממשקי ה-API המקוריים של Vulkan, ולהיפך, אסור לדווח על מחרוזות תוספים שהן לא תומכות בהן בצורה נכונה.
- [C-1-7] חובה לתמוך בתוספים VK_KHR_surface, VK_KHR_android_surface, VK_KHR_swapchain ו-VK_KHR_incremental_present.
- [C-SR] מומלץ מאוד לתמוך בתוספים VK_KHR_driver_properties ו-VK_GOOGLE_display_timing.
אם הטמעות המכשירים לא כוללות תמיכה ב-Vulkan 1.0, הן:
- [C-2-1] אסור להצהיר על אף אחד ממתגי ה-feature flag של Vulkan (למשל
android.hardware.vulkan.level
, android.hardware.vulkan.version
). - [C-2-2] אסור למנות
VkPhysicalDevice
כלשהם עבור Vulkan native APIvkEnumeratePhysicalDevices()
.
אם הטמעות של מכשירים כוללות תמיכה ב-Vulkan 1.1 ומצהירות על אחד מדגלי התכונות של Vulkan, הן:
- [C-3-1] חובה לחשוף תמיכה בסוגי הטיפול והסמפור החיצוניים
SYNC_FD
ובתוסףVK_ANDROID_external_memory_android_hardware_buffer
.
7.1.4.3 RenderScript
- [C-0-1] הטמעות של מכשירים חייבות לתמוך ב-Android RenderScript, כפי שמפורט במסמכי ה-SDK של Android.
7.1.4.4 האצת גרפיקה דו-ממדית
מערכת Android כוללת מנגנון שמאפשר לאפליקציות להצהיר שהן רוצות להפעיל האצת חומרה לגרפיקה דו-ממדית ברמת האפליקציה, הפעילות, החלון או התצוגה, באמצעות שימוש בתג מניפסט android:hardwareAccelerated או באמצעות קריאות ישירות ל-API.
הטמעות במכשיר:
- [C-0-1] חובה להפעיל את התכונה 'שיפור מהירות באמצעות חומרה' כברירת מחדל, וחובה להשבית אותה אם המפתח מבקש זאת על ידי הגדרת android:hardwareAccelerated=&�="false” או השבתה ישירה של התכונה באמצעות ממשקי ה-API של Android View.
- [C-0-2] חובה להציג התנהגות שתואמת לתיעוד של Android SDK בנושא שיפור מהירות באמצעות חומרה.
Android כולל אובייקט TextureView שמאפשר למפתחים לשלב ישירות טקסטורות של OpenGL ES עם האצת חומרה כיעדי עיבוד בהיררכיית ממשק המשתמש.
הטמעות במכשיר:
- [C-0-3] המכשיר חייב לתמוך ב-TextureView API, וההתנהגות שלו חייבת להיות עקבית עם ההטמעה של Android במעלה הזרם.
7.1.4.5 מסכים עם טווח צבעים רחב
אם הטמעות של מכשירים טוענות לתמיכה בצגים עם טווח צבעים רחב באמצעות Configuration.isScreenWideColorGamut()
, הן:
- [C-1-1] חובה להשתמש במסך עם כיול צבעים.
- [C-1-2] חובה להשתמש במסך שטווח הצבעים שלו מכסה את טווח הצבעים sRGB באופן מלא במרחב CIE 1931 xyY.
- [C-1-3] חובה להשתמש במסך עם סולם צבעים ששטחו הוא לפחות 90% מ-DCI-P3 במרחב הצבעים CIE 1931 xyY.
- [C-1-4] המכשיר חייב לתמוך ב-OpenGL ES 3.1 או 3.2 ולדווח על כך בצורה תקינה.
- [C-1-5] חובה לפרסם תמיכה בתוספים
EGL_KHR_no_config_context
,EGL_EXT_pixel_format_float
,EGL_KHR_gl_colorspace
,EGL_EXT_gl_colorspace_scrgb
,EGL_EXT_gl_colorspace_scrgb_linear
,EGL_EXT_gl_colorspace_display_p3
,EGL_EXT_gl_colorspace_display_p3_linear
ו-EGL_EXT_gl_colorspace_display_p3_passthrough
. - מומלץ מאוד להשתמש ב-STR כדי לתמוך ב-
GL_EXT_sRGB
.
לעומת זאת, אם הטמעות במכשירים לא תומכות במסכים עם טווח צבעים רחב, הן:
- [C-2-1] צריך לכסות 100% או יותר מ-sRGB במרחב CIE 1931 xyY, למרות שסולם הצבעים של המסך לא מוגדר.
7.1.5. מצב תאימות לאפליקציות מדור קודם
ב-Android יש 'מצב תאימות' שבו המסגרת פועלת במצב ששווה לגודל מסך 'רגיל' (רוחב של 320dp), לטובת אפליקציות מדור קודם שלא פותחו לגרסאות ישנות של Android שקדמו לשינוי שמאפשר התאמה לגודל המסך.
7.1.6. טכנולוגיית המסך
פלטפורמת Android כוללת ממשקי API שמאפשרים לאפליקציות להציג גרפיקה עשירה במסך שתואם ל-Android. המכשירים חייבים לתמוך בכל ממשקי ה-API האלה כפי שמוגדרים ב-Android SDK, אלא אם צוין אחרת במסמך הזה.
כל המסכים התואמים ל-Android בהטמעה של מכשיר:
- [C-0-1] חובה שתהיה אפשרות לעבד גרפיקה בצבע 16 ביט.
- צריך לתמוך במסכים עם גרפיקה צבעונית של 24 ביט.
- [C-0-2] חובה שתהיה אפשרות לעבד אנימציות.
- [C-0-3] חובה שיהיה יחס גובה-רוחב של פיקסלים (PAR) בין 0.9 ל-1.15. כלומר, יחס הגובה-רוחב של הפיקסלים חייב להיות קרוב לריבוע (1.0) עם טווח שגיאה של 10% עד 15%.
7.1.7. מסכים משניים
Android כולל תמיכה במסכים משניים שתואמים ל-Android, כדי לאפשר שיתוף של מדיה וממשקי API למפתחים לגישה למסכים חיצוניים.
אם הטמעות המכשירים תומכות במסך חיצוני באמצעות חיבור קווי, אלחוטי או חיבור נוסף מוטמע של מסך, הן:
- [C-1-1] חובה להטמיע את שירות המערכת ואת ה-API
DisplayManager
כפי שמתואר במסמכי ה-SDK של Android.
7.2. התקני קלט
הטמעות במכשיר:
- [C-0-1] חובה לכלול מנגנון קלט, כמו מסך מגע או ניווט ללא מגע, כדי לנווט בין רכיבי ממשק המשתמש.
7.2.1. מקלדת
אם הטמעות המכשירים כוללות תמיכה באפליקציות של עורך שיטות קלט (IME) של צד שלישי, הן:
- [C-1-1] חובה להצהיר על ה-feature flag
android.software.input_methods
. - [C-1-2] חובה להטמיע באופן מלא את
Input Management Framework
- [C-1-3] חובה לכלול מקלדת תוכנה שמותקנת מראש.
הטמעות של מכשירים: * [C-0-1] אסור לכלול מקלדת חומרה שלא תואמת לאחד מהפורמטים שצוינו ב-android.content.res.Configuration.keyboard (QWERTY או 12 מקשים). * צריך לכלול הטמעות נוספות של מקלדת וירטואלית. * יכול להיות שהמכשיר כולל מקלדת חומרה.
7.2.2. ניווט ללא מגע
Android כולל תמיכה בלחצני חצים, בכדור עקיבה ובגלגל כשיטות לניווט ללא מגע.
הטמעות במכשיר:
- [C-0-1] חובה לדווח על הערך הנכון של android.content.res.Configuration.navigation.
אם במכשירים אין אפשרויות ניווט שאינן מבוססות על מגע, הם:
- [C-1-1] חובה לספק מנגנון סביר של ממשק משתמש חלופי לבחירה ולעריכה של טקסט, שתואם למנועי ניהול קלט. ההטמעה של Android בקוד פתוח כוללת מנגנון בחירה שמתאים לשימוש במכשירים שאין להם אמצעי קלט לניווט שאינם מגע.
7.2.3. מקשי ניווט
הפונקציות מסך הבית, אחרונים והקודם, שמופעלות בדרך כלל באמצעות אינטראקציה עם לחצן פיזי ייעודי או עם חלק נפרד במסך המגע, חיוניות לפרדיגמת הניווט ב-Android, ולכן גם להטמעות במכשירים:
- [C-0-1] חובה לספק למשתמש אפשרות להפעיל אפליקציות מותקנות שיש להן פעילות עם
<intent-filter>
שהוגדר עםACTION=MAIN
ו-CATEGORY=LAUNCHER
אוCATEGORY=LEANBACK_LAUNCHER
בהטמעות של מכשירי טלוויזיה. הפונקציה 'בית' צריכה להיות המנגנון שמאפשר למשתמש את הפעולה הזו. - צריך לספק לחצנים לפונקציות 'פריטים אחרונים' ו'חזרה'.
אם הפונקציות 'בית', 'פריטים אחרונים' או 'הקודם' זמינות, הן:
- [C-1-1] חובה להנגיש את כל הפעולות האלה באמצעות פעולה אחת (למשל, הקשה, לחיצה כפולה או תנועה) אם הן נגישות.
- [C-1-2] חובה לספק אינדיקציה ברורה לגבי הפעולה היחידה שתפעיל כל פונקציה. דוגמאות לאינדיקציה כזו הן הצגת סמל גלוי על הכפתור, הצגת סמל תוכנה בחלק של סרגל הניווט במסך או הצגת הדגמה מודרכת של תהליך ההגדרה למשתמשים.
הטמעות במכשיר:
- [SR] מומלץ מאוד לא לספק את מנגנון הקלט עבור פונקציית התפריט, כי היא הוצאה משימוש לטובת סרגל הפעולות מאז Android 4.0.
אם הטמעות של מכשירים מספקות את הפונקציה Menu, הן:
- [C-2-1] חובה להציג את לחצן האפשרויות הנוספות של הפעולה בכל פעם שהתפריט הקופץ של האפשרויות הנוספות של הפעולה לא ריק וסרגל הפעולות גלוי.
- [C-2-2] אסור לשנות את המיקום של התפריט הקופץ של האפשרויות הנוספות שמוצג כשבוחרים את לחצן האפשרויות הנוספות בסרגל הפעולות, אבל מותר להציג את התפריט הקופץ של האפשרויות הנוספות במיקום שונה במסך כשבוחרים את פונקציית התפריט.
אם הטמעות של מכשירים לא מספקות את פונקציית התפריט, כדי להבטיח תאימות לאחור, הן: * [C-SR] מומלצות מאוד להפוך את פונקציית התפריט לזמינה לאפליקציות כאשר targetSdkVersion
קטן מ-10, באמצעות לחצן פיזי, מקש תוכנה או תנועות. צריכה להיות גישה לפונקציית התפריט הזו, אלא אם היא מוסתרת יחד עם פונקציות ניווט אחרות.
אם הטמעות המכשירים מספקות את הפונקציה 'עזרה', הן:
- [C-4-1] חובה להפוך את פונקציית העזרה לנגישה באמצעות פעולה אחת (למשל הקשה, לחיצה כפולה או תנועה) כשמקשי ניווט אחרים נגישים.
- [SR] מומלץ מאוד להשתמש בלחיצה ארוכה על הפונקציה 'בית' כאינטראקציה המיועדת הזו.
אם הטמעות במכשירים משתמשות בחלק נפרד של המסך כדי להציג את מקשי הניווט, הן:
- [C-5-1] מקשי הניווט צריכים להשתמש בחלק נפרד של המסך, שלא זמין לאפליקציות, ואסור להם להסתיר את החלק של המסך שזמין לאפליקציות או להפריע לו בדרך אחרת.
- [C-5-2] חובה להקצות חלק מהמסך לאפליקציות שעומדות בדרישות שמוגדרות בסעיף 7.1.1.
- [C-5-3] חובה לכבד את ההגדרות שהוגדרו על ידי האפליקציה באמצעות שיטת ה-API
View.setSystemUiVisibility()
, כך שהחלק הנפרד הזה במסך (שנקרא גם סרגל הניווט) יוסתר בצורה תקינה כפי שמתואר ב-SDK.
אם פונקציית הניווט מסופקת כפעולה מבוססת-תנועות במסך:
- [C-6-1]
WindowInsets#getMandatorySystemGestureInsets()
חייב לשמש רק לדיווח על אזור הזיהוי של תנועת הבית. - [C-6-2] אסור ליירט תנועות שמתחילות בתוך מלבן החרגה שסופק על ידי האפליקציה שבחזית באמצעות
View#setSystemGestureExclusionRects()
, אבל מחוץ ל-WindowInsets#getMandatorySystemGestureInsets()
, לצורך פונקציית הניווט, כל עוד מלבן ההחרגה מותר במסגרת מגבלת ההחרגה המקסימלית שצוינה במסמכי התיעוד שלView#setSystemGestureExclusionRects()
. - [C-6-3] חובה לשלוח לאפליקציה בחזית אירוע
MotionEvent.ACTION_CANCEL
ברגע שההקשות מתחילות להיות מיועדות למחוות מערכת, אם לאפליקציה בחזית נשלח בעבר אירועMotionEvent.ACTION_DOWN
. - [C-6-4] חובה לספק למשתמש אפשרות לעבור לניווט במסך שמבוסס על לחצנים (לדוגמה, בהגדרות).
- צריך לספק פונקציית מסך בית באמצעות החלקה כלפי מעלה מהקצה התחתון של המסך בכיוון הנוכחי.
- מומלץ לספק פונקציה של פריטים אחרונים באמצעות החלקה כלפי מעלה והחזקה לפני השחרור, מאותו אזור כמו תנועת הבית.
- תנועות שמתחילות בתוך
WindowInsets#getMandatorySystemGestureInsets()
לא אמורות להיות מושפעות ממלבני החרגה שסופקו על ידי האפליקציה שפועלת בחזית באמצעותView#setSystemGestureExclusionRects()
.
אם פונקציית ניווט מסופקת מכל מקום בקצוות השמאלי והימני של כיוון המסך הנוכחי:
- [C-7-1] פונקציית הניווט חייבת להיות 'חזרה', והיא צריכה להיות זמינה באמצעות החלקה מהקצה השמאלי ומהקצה הימני של המסך בהתאם לכיוון הנוכחי שלו.
- [C-7-2] אם יש חלוניות מערכת מותאמות אישית שאפשר להחליק כדי לפתוח אותן בקצוות השמאליים או הימניים, הן צריכות להיות ממוקמות בשליש העליון של המסך, עם אינדיקציה חזותית ברורה וקבועה שגרירה פנימה תפתח את החלוניות האלה, ולא תפעיל את לחצן 'הקודם'. משתמש יכול להגדיר חלונית מערכת כך שהיא תופיע מתחת לשליש העליון של קצוות המסך, אבל חלונית המערכת לא יכולה להשתמש ביותר משליש מקצוות המסך.
- [C-7-3] כשמוגדרים לאפליקציה בחזית הדגלים
View.SYSTEM_UI_FLAG_IMMERSIVE
אוView.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
, החלקה מהקצוות חייבת להתנהג כמו שהיא מיושמת ב-AOSP, כפי שמתואר ב-SDK. - [C-7-4] כשהאפליקציה בחזית כוללת את ההגדרות
View.SYSTEM_UI_FLAG_IMMERSIVE
אוView.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
, חלוניות מערכת מותאמות אישית שאפשר להחליק כדי לפתוח אותן חייבות להיות מוסתרות עד שהמשתמש מציג את סרגלי המערכת (כלומר, סרגל הניווט וסרגל המצב) כמו שמוטמע ב-AOSP.
7.2.4. קלט ממסך מגע
Android כולל תמיכה במגוון מערכות קלט של מצביעים, כמו מסכי מגע, משטחי מגע ומכשירי קלט של מגע מזויף. הטמעות של מכשירים מבוססי מסך מגע משויכות לתצוגה כך שהמשתמש מקבל את הרושם שהוא מפעיל ישירות פריטים במסך. מכיוון שהמשתמש נוגע ישירות במסך, המערכת לא צריכה לספק אמצעים נוספים כדי לציין את האובייקטים שמופעלים.
הטמעות במכשיר:
- צריכה להיות מערכת קלט של מצביע כלשהו (כמו עכבר או מגע).
- צריכה להיות תמיכה מלאה בסמנים שעוקבים אחריהם באופן עצמאי.
אם הטמעות המכשירים כוללות מסך מגע (מגע יחיד או טוב יותר), הן:
- [C-1-1] חובה לדווח על
TOUCHSCREEN_FINGER
בשדהConfiguration.touchscreen
של ה-API. - [C-1-2] חובה לדווח על סימוני התכונות
android.hardware.touchscreen
ו-android.hardware.faketouch
.
אם הטמעות של מכשירים כוללות מסך מגע שיכול לעקוב אחרי יותר ממגע אחד, הן:
- [C-2-1] המכשיר חייב לדווח על דגלי התכונות המתאימים
android.hardware.touchscreen.multitouch
,android.hardware.touchscreen.multitouch.distinct
,android.hardware.touchscreen.multitouch.jazzhand
בהתאם לסוג מסך המגע הספציפי במכשיר.
אם הטמעות של מכשירים לא כוללות מסך מגע (ומסתמכות רק על מכשיר מצביע) ועומדות בדרישות של מגע מזויף שמפורטות בקטע 7.2.5, הן:
- [C-3-1] אסור לדווח על אף דגל תכונה שמתחיל ב-
android.hardware.touchscreen
, וחובה לדווח רק עלandroid.hardware.faketouch
.
7.2.5. קלט מגע מזויף
ממשק מגע מדומה מספק מערכת קלט משתמש שמבצעת קירוב של קבוצת משנה של יכולות מסך מגע. לדוגמה, עכבר או שלט רחוק שמפעילים סמן במסך מדמים מגע, אבל דורשים מהמשתמש קודם להצביע או להתמקד ואז ללחוץ. מכשירים רבים לקליטת נתונים, כמו עכבר, משטח מגע, עכבר אוויר מבוסס גירוסקופ, מצביע גירוסקופי, ג'ויסטיק ומשטח מגע עם מגע במספר נקודות, יכולים לתמוך באינטראקציות של מגע מזויף. Android כולל את התכונה הקבועה android.hardware.faketouch, שמתאימה למכשיר קלט באיכות גבוהה שאינו מבוסס על מגע (מבוסס על מצביע), כמו עכבר או משטח מגע, שיכול לדמות בצורה מספקת קלט מבוסס-מגע (כולל תמיכה במחוות בסיסיות), ומציין שהמכשיר תומך בקבוצת משנה מדומה של פונקציונליות מסך המגע.
אם הטמעות של מכשירים לא כוללות מסך מגע אבל כוללות מערכת קלט אחרת של מצביע שהם רוצים להפוך לזמינה, הם:
- צריך להצהיר על תמיכה ב-feature flag
android.hardware.faketouch
.
אם הטמעות של מכשירים מצהירות על תמיכה ב-android.hardware.faketouch
, הן:
- [C-1-1] המכשיר חייב לדווח על המיקום המוחלט של מצביע העכבר בציר X ובציר Y ולהציג מצביע חזותי על המסך.
- [C-1-2] חובה לדווח על אירוע מגע עם קוד הפעולה שמציין את שינוי המצב שמתרחש כשהמצביע עולה או יורד במסך.
- [C-1-3] המכשיר חייב לתמוך בהצבעה למטה ולמעלה על אובייקט במסך, כדי לאפשר למשתמשים לדמות הקשה על אובייקט במסך.
- [C-1-4] המכשיר חייב לתמוך בהצבעה למטה, בהצבעה למעלה, בהצבעה למטה ואז בהצבעה למעלה באותו מקום באובייקט במסך בתוך סף זמן, כדי לאפשר למשתמשים לדמות הקשה כפולה על אובייקט במסך.
- [C-1-5] המכשיר חייב לתמוך בהצבעה כלפי מטה בנקודה שרירותית במסך, בהזזת ההצבעה לנקודה שרירותית אחרת במסך, ואז בהצבעה כלפי מעלה, כדי לאפשר למשתמשים לדמות גרירה באמצעות מגע.
- [C-1-6] המכשיר חייב לתמוך בהצבעה כלפי מטה, ולאחר מכן לאפשר למשתמשים להזיז במהירות את האובייקט למיקום אחר במסך, ואז להצביע כלפי מעלה במסך, כדי לאפשר למשתמשים להעיף אובייקט במסך.
- [C-1-7] חובה לדווח על
TOUCHSCREEN_NOTOUCH
בשדהConfiguration.touchscreen
של ה-API.
אם הטמעות של מכשירים מצהירות על תמיכה ב-android.hardware.faketouch.multitouch.distinct
, הן:
- [C-2-1] חובה להצהיר על תמיכה ב-
android.hardware.faketouch
. - [C-2-2] המערכת חייבת לתמוך במעקב נפרד אחרי שני קלטים עצמאיים או יותר של מצביעים.
אם הטמעות של מכשירים מצהירות על תמיכה ב-android.hardware.faketouch.multitouch.jazzhand
, הן:
- [C-3-1] חובה להצהיר על תמיכה ב-
android.hardware.faketouch
. - [C-3-2] המכשיר חייב לתמוך במעקב נפרד אחרי 5 (מעקב אחרי יד עם אצבעות) או יותר קלט של מצביעים באופן עצמאי לחלוטין.
7.2.6. תמיכה בשלט לגיימינג
7.2.6.1. מיפוי לחצנים
אם הטמעות של מכשירים מצהירות על דגל התכונה android.hardware.gamepad
, הן:
- [C-1-1] חובה להטמיע במוצר בקר או לשלוח אותו עם בקר נפרד בקופסה, שיאפשר להזין את כל האירועים שמפורטים בטבלאות שלמטה.
- [C-1-2] חובה למפות אירועי HID לקבועי Android
view.InputEvent
המשויכים, כפי שמפורט בטבלאות שלמטה. ההטמעה של Android במעלה הזרם כוללת הטמעה של בקרי משחקים שעומדת בדרישה הזו.
לחצן | HID Usage2 | Android Button |
---|---|---|
A1 | 0x09 0x0001 | KEYCODE_BUTTON_A (96) |
B1 | 0x09 0x0002 | KEYCODE_BUTTON_B (97) |
X1 | 0x09 0x0004 | KEYCODE_BUTTON_X (99) |
Y1 | 0x09 0x0005 | KEYCODE_BUTTON_Y (100) |
D-pad up1 D-pad down1 |
0x01 0x00393 | AXIS_HAT_Y4 |
מקש החץ שמאלה1 מקש החץ ימינה1 |
0x01 0x00393 | AXIS_HAT_X4 |
הכפתור השמאלי העליון1 | 0x09 0x0007 | KEYCODE_BUTTON_L1 (102) |
הלחצן הימני העליון1 | 0x09 0x0008 | KEYCODE_BUTTON_R1 (103) |
לחיצה על המקל השמאלי1 | 0x09 0x000E | KEYCODE_BUTTON_THUMBL (106) |
לחיצה על הג'ויסטיק הימני1 | 0x09 0x000F | KEYCODE_BUTTON_THUMBR (107) |
דף הבית1 | 0x0c 0x0223 | KEYCODE_HOME (3) |
הקודם1 | 0x0c 0x0224 | KEYCODE_BACK (4) |
1 KeyEvent
2 השימושים ב-HID שצוינו למעלה חייבים להיות מוצהרים ב-CA של לוח משחקים (0x01 0x0005).
3 לשימוש הזה צריך להיות ערך מינימלי לוגי של 0, ערך מקסימלי לוגי של 7, ערך מינימלי פיזי של 0, ערך מקסימלי פיזי של 315, יחידות במעלות וגודל דוח של 4. הערך הלוגי מוגדר כסיבוב בכיוון השעון הרחק מהציר האנכי. לדוגמה, ערך לוגי של 0 מייצג סיבוב של 0 מעלות ולחיצה על לחצן החלק העליון, בעוד שערך לוגי של 1 מייצג סיבוב של 45 מעלות ולחיצה על המקשים 'חלק עליון' ו'שמאלה'.
4 MotionEvent
פקדים אנלוגיים1 | שימוש ב-HID | Android Button |
---|---|---|
הדק שמאלי | 0x02 0x00C5 | AXIS_LTRIGGER |
הדק ימני | 0x02 0x00C4 | AXIS_RTRIGGER |
ג'ויסטיק שמאלי |
0x01 0x0030 0x01 0x0031 |
AXIS_X AXIS_Y |
ג'ויסטיק ימני |
0x01 0x0032 0x01 0x0035 |
AXIS_Z AXIS_RZ |
1 MotionEvent
7.2.7. שלט רחוק
בקטע 2.3.1 מפורטות הדרישות הספציפיות למכשירים.
7.3. חיישנים
אם הטמעות של מכשירים כוללות סוג מסוים של חיישן שיש לו API תואם למפתחים של צד שלישי, ההטמעה של המכשיר חייבת להטמיע את ה-API הזה כפי שמתואר בתיעוד של Android SDK ובתיעוד של Android Open Source בנושא חיישנים.
הטמעות במכשיר:
- [C-0-1] חובה לדווח בצורה מדויקת על נוכחות או היעדר של חיישנים לפי המחלקה
android.content.pm.PackageManager
. - [C-0-2] המכשיר חייב להחזיר רשימה מדויקת של חיישנים נתמכים באמצעות
SensorManager.getSensorList()
ושיטות דומות. - [C-0-3] חובה שההתנהגות תהיה סבירה עבור כל שאר ממשקי ה-API של החיישנים (לדוגמה, החזרת
true
אוfalse
בהתאם כשיישומים מנסים לרשום מאזינים, לא מתבצעת קריאה למאזיני החיישנים כשהחיישנים התואמים לא קיימים וכו').
אם הטמעות של מכשירים כוללות סוג מסוים של חיישן שיש לו API תואם למפתחים של צד שלישי, הן:
- [C-1-1] חובה לדווח על כל המדידות של החיישנים באמצעות הערכים הרלוונטיים של היחידות הבינלאומיות (מטריות) לכל סוג חיישן, כפי שמוגדר במסמכי ה-SDK של Android.
- [C-1-2] חובה לדווח על נתוני חיישנים עם חביון מקסימלי של 100 מילישניות + 2 * sample_time במקרה של זרם חיישנים עם חביון מקסימלי של 0 מילישניות כשהמעבד של האפליקציה פעיל. העיכוב הזה לא כולל עיכובים בסינון.
- [C-1-3] חובה לדווח על הדגימה הראשונה של החיישן תוך 400 מילישניות + 2 * sample_time מרגע הפעלת החיישן. מקובל שרמת הדיוק של המדגם הזה תהיה 0.
-
[SR] SHOULD report the event time in nanoseconds as defined in the Android SDK documentation, representing the time the event happened and synchronized with the SystemClock.elapsedRealtimeNano() clock. מומלץ מאוד שמכשירי Android קיימים וחדשים יעמדו בדרישות האלה, כדי שיהיה אפשר לשדרג אותם לגרסאות פלטפורמה עתידיות שבהן יכול להיות שהרכיב הזה יהיה חובה. שגיאת הסנכרון צריכה להיות מתחת ל-100 מילי-שניות.
-
[C-1-4] לכל API שמצוין במסמכי Android SDK כחיישן רציף, הטמעות במכשירים חייבות לספק באופן רציף דגימות נתונים תקופתיות, שסטיית התקן שלהן צריכה להיות מתחת ל-3%. סטיית התקן מוגדרת כסטיית התקן של ההפרש בין ערכי חותמת הזמן המדווחים בין אירועים עוקבים.
-
[C-1-5] חובה לוודא שזרם אירועי החיישן לא ימנע מהמעבד של המכשיר להיכנס למצב השהיה או לצאת ממצב השהיה.
- כשכמה חיישנים מופעלים, צריכת החשמל לא צריכה להיות גבוהה מסכום צריכת החשמל המדווחת של כל חיישן בנפרד.
הרשימה שלמעלה לא מלאה. ההתנהגות המתועדת של Android SDK והתיעוד של Android Open Source בנושא חיישנים הם המקור המוסמך.
חלק מסוגי החיישנים הם מורכבים, כלומר אפשר לגזור אותם מנתונים שמסופקים על ידי חיישן אחד או יותר. (לדוגמה, חיישן הכיוון וחיישן התאוצה הליניארית).
הטמעות במכשיר:
- מומלץ להטמיע את סוגי החיישנים האלה, אם הם כוללים את החיישנים הפיזיים הנדרשים כפי שמתואר בסוגי החיישנים.
אם יישומי המכשיר כוללים חיישן מורכב, הם:
- [C-2-1] חובה להטמיע את החיישן כפי שמתואר במסמכי התיעוד של Android Open Source בנושא חיישנים מורכבים.
7.3.1. מד תאוצה
הטמעות במכשיר:
- [C-SR] מומלץ מאוד לכלול מד תאוצה ב-3 צירים.
אם הטמעות המכשיר כוללות מד תאוצה ב-3 צירים, הן:
- [C-1-1] המכשיר חייב להיות מסוגל לדווח על אירועים בתדירות של 50 הרץ לפחות.
- [C-1-2] חובה להטמיע ולדווח על חיישן
TYPE_ACCELEROMETER
. - [C-1-3] חובה לעמוד בדרישות של מערכת הקואורדינטות של חיישני Android, כפי שמפורט בממשקי ה-API של Android.
- [C-1-4] חייב להיות מסוגל למדוד נפילה חופשית עד פי ארבעה מכוח המשיכה(4g) או יותר בכל ציר.
- [C-1-5] חייבת להיות רזולוציה של 12 ביט לפחות.
- [C-1-6] סטיית התקן חייבת להיות קטנה או שווה ל-0.05 מ' לשנייה בריבוע, כאשר סטיית התקן צריכה להיות מחושבת על בסיס כל ציר בנפרד על דגימות שנאספו במשך תקופה של לפחות 3 שניות בקצב הדגימה המהיר ביותר.
- [SR] מומלץ מאוד להטמיע את
TYPE_SIGNIFICANT_MOTION
חיישן המורכב. - [SR] מומלץ מאוד להטמיע את חיישן
TYPE_ACCELEROMETER_UNCALIBRATED
ולדווח עליו. מומלץ מאוד שמכשירי Android יעמדו בדרישה הזו כדי שיהיה אפשר לשדרג אותם לגרסת הפלטפורמה העתידית, שבה יכול להיות שהדרישה הזו תהיה חובה. - מומלץ להטמיע את חיישני
TYPE_SIGNIFICANT_MOTION
,TYPE_TILT_DETECTOR
,TYPE_STEP_DETECTOR
,TYPE_STEP_COUNTER
המורכבים כפי שמתואר במסמך Android SDK. - צריך לדווח על אירועים בתדירות של 200 הרץ לפחות.
- מומלץ להשתמש ברזולוציה של 16 ביט לפחות.
- צריך לכייל את המכשיר בזמן השימוש אם המאפיינים משתנים במהלך מחזור החיים שלו, ולשמור את פרמטרי הפיצוי בין הפעלות מחדש של המכשיר.
- צריך להיות עם פיצוי טמפרטורה.
אם הטמעות המכשירים כוללות מד תאוצה בעל 3 צירים ואחד מהחיישנים המורכבים TYPE_SIGNIFICANT_MOTION
, TYPE_TILT_DETECTOR
, TYPE_STEP_DETECTOR
, TYPE_STEP_COUNTER
מוטמע:
- [C-2-1] סכום צריכת החשמל שלהם חייב להיות תמיד פחות מ-4mW.
- כל אחד מהם צריך להיות מתחת ל-2mW ו-0.5mW כשהמכשיר במצב דינמי או סטטי.
אם הטמעות המכשירים כוללות מד תאוצה עם 3 צירים וחיישן ג'ירוסקופ עם 3 צירים, הן:
- [C-3-1] חובה להטמיע את החיישנים המורכבים
TYPE_GRAVITY
ו-TYPE_LINEAR_ACCELERATION
. - [C-SR] מומלץ מאוד להטמיע את החיישן המורכב
TYPE_GAME_ROTATION_VECTOR
.
אם הטמעות המכשירים כוללות מד תאוצה עם 3 צירים, חיישן ג'ירוסקופ עם 3 צירים וחיישן מגנטומטר, הן:
- [C-4-1] חובה להטמיע חיישן מורכב
TYPE_ROTATION_VECTOR
.
7.3.2. מגנטומטר
הטמעות במכשיר:
- [C-SR] מומלץ מאוד לכלול מגנטומטר (מצפן) עם 3 צירים.
אם הטמעות המכשירים כוללות מגנטומטר בעל 3 צירים, הן:
- [C-1-1] חובה להטמיע את החיישן
TYPE_MAGNETIC_FIELD
. - [C-1-2] המכשיר חייב להיות מסוגל לדווח על אירועים בתדירות של 10 הרץ לפחות, ומומלץ לדווח על אירועים בתדירות של 50 הרץ לפחות.
- [C-1-3] חובה לעמוד בדרישות של מערכת הקואורדינטות של חיישני Android, כפי שמפורט בממשקי ה-API של Android.
- [C-1-4] חייב להיות מסוגל למדוד בין -900 µT ל-+900 µT בכל ציר לפני ההגעה לנקודת הרוויה.
- [C-1-5] חובה להגדיר ערך אופסט של ברזל קשה שהוא פחות מ-700 מיקרוטסלה (µT), ומומלץ להגדיר ערך שהוא פחות מ-200 מיקרוטסלה (µT), על ידי הצבת המגנטומטר הרחק משדות מגנטיים דינמיים (שנוצרים על ידי זרם) וסטטיים (שנוצרים על ידי מגנט).
- [C-1-6] הרזולוציה חייבת להיות שווה ל-0.6 מיקרוטסלה או גבוהה ממנה.
- [C-1-7] המכשיר חייב לתמוך בכיול מקוון ובפיצוי על הטיית הברזל הקשה, ולשמור את פרמטרי הפיצוי בין אתחולי המכשיר.
- [C-1-8] חובה להחיל פיצוי של ברזל רך – אפשר לבצע את הכיול בזמן השימוש או במהלך הייצור של המכשיר.
- [C-1-9] חובה שתהיה סטיית תקן, שמחושבת על בסיס כל ציר בנפרד על מדגמים שנאספו במשך תקופה של 3 שניות לפחות בקצב הדגימה המהיר ביותר, ולא יותר מ-1.5 מיקרוטסלה (µT). מומלץ שסטיית התקן לא תהיה גדולה מ-0.5 מיקרוטסלה (µT).
- מומלץ להטמיע חיישן
TYPE_MAGNETIC_FIELD_UNCALIBRATED
. - [SR] מומלץ מאוד להטמיע את חיישן
TYPE_MAGNETIC_FIELD_UNCALIBRATED
במכשירי Android קיימים ובמכשירי Android חדשים.
אם הטמעות המכשירים כוללות מגנטומטר עם 3 צירים, חיישן מד תאוצה וחיישן ג'ירוסקופ עם 3 צירים, הן:
- [C-2-1] חובה להטמיע חיישן מורכב
TYPE_ROTATION_VECTOR
.
אם יישומי המכשיר כוללים מגנטומטר עם 3 צירים ומד תאוצה, הם:
- יכול להיות שיוטמע חיישן
TYPE_GEOMAGNETIC_ROTATION_VECTOR
.
אם הטמעות המכשירים כוללות מגנטומטר עם 3 צירים, מד תאוצה וחיישן TYPE_GEOMAGNETIC_ROTATION_VECTOR
, הן:
- [C-3-1] צריכת החשמל חייבת להיות פחות מ-10mW.
- החיישן צריך לצרוך פחות מ-3mW כשהוא רשום למצב אצווה בתדר של 10Hz.
7.3.3. GPS
הטמעות במכשיר:
- [C-SR] מומלץ מאוד לכלול מקלט GPS/GNSS.
אם הטמעות של מכשירים כוללות מקלט GPS/GNSS ומדווחות על היכולת לאפליקציות באמצעות תג התכונה android.hardware.location.gps
, הן:
- [C-1-1] המכשיר חייב לתמוך בפלט של מיקום בקצב של לפחות 1 הרץ כשמבקשים זאת באמצעות
LocationManager#requestLocationUpdate
. - [C-1-2] המכשיר חייב להיות מסוגל לקבוע את המיקום בתנאים של שמיים פתוחים (אותות חזקים, ריבוי נתיבים זניח, HDOP < 2) תוך 10 שניות (זמן מהיר עד לתיקון הראשון), כשהוא מחובר לחיבור אינטרנט עם מהירות נתונים של 0.5Mbps או יותר. בדרך כלל, כדי לעמוד בדרישה הזו, משתמשים בטכניקה כלשהי של GPS/GNSS מסוג Assisted או Predicted כדי לצמצם את זמן הנעילה של GPS/GNSS (נתוני הסיוע כוללים זמן ייחוס, מיקום ייחוס ואפמריס/שעון של לוויין).
- [C-1-6] אחרי ביצוע חישוב מיקום כזה, הטמעות של מכשירים חייבות לקבוע את המיקום שלהם, בשמיים פתוחים, תוך 5 שניות, כשבקשות המיקום מופעלות מחדש, עד שעה אחרי חישוב המיקום הראשוני, גם אם הבקשה הבאה מבוצעת ללא חיבור נתונים, ו/או אחרי הפעלה מחדש.
-
בתנאי שמיים פתוחים אחרי קביעת המיקום, בזמן שהמכשיר נייח או בתנועה עם תאוצה של פחות ממטר אחד לשנייה בריבוע:
- [C-1-3] המכשיר חייב להיות מסוגל לקבוע את המיקום בטווח של 20 מטרים, ואת המהירות בטווח של 0.5 מטרים לשנייה, לפחות ב-95% מהזמן.
- [C-1-4] חובה לעקוב אחרי לפחות 8 לוויינים מקבוצה אחת ולדווח עליהם בו-זמנית באמצעות
GnssStatus.Callback
. - המכשיר צריך להיות מסוגל לעקוב בו-זמנית אחרי לפחות 24 לוויינים מכמה קבוצות כוכבים (למשל GPS + לפחות אחד מהלוויינים Glonass, Beidou, Galileo).
- [C-SR] מומלץ מאוד להמשיך לספק פלט מיקום רגיל של GPS/GNSS באמצעות ממשקי API של ספק מיקום GNSS במהלך שיחת טלפון במקרה חירום.
- [C-SR] מומלץ מאוד לדווח על מדידות GNSS מכל מערכות הניווט שנמצאות במעקב (כפי שמדווח בהודעות GnssStatus), למעט SBAS.
- [C-SR] מומלץ מאוד לדווח על AGC ותדירות המדידה של GNSS.
- [C-SR] מומלץ מאוד לדווח על כל הערכות הדיוק (כולל כיוון, מהירות וגובה) כחלק מכל מיקום GPS/GNSS.
- [C-SR] מומלץ מאוד לדווח על מדידות GNSS ברגע שהן נמצאות, גם אם מיקום שמחושב מ-GPS/GNSS עדיין לא דווח.
- [C-SR] מומלץ מאוד לדווח על טווחי פסאודו ועל שיעורי טווחי פסאודו של GNSS, שבתנאי שמיים פתוחים אחרי קביעת המיקום, בזמן שהמכשיר נייח או נע בתאוצה של פחות מ-0.2 מטר לשנייה בריבוע, מספיקים לחישוב המיקום בטווח של 20 מטרים, והמהירות בטווח של 0.2 מטרים לשנייה, לפחות ב-95% מהזמן.
7.3.4. ג'ירוסקופ
הטמעות במכשיר:
- [C-SR] מומלץ מאוד לכלול חיישן ג'ירוסקופ, אלא אם כלול גם מד תאוצה ב-3 צירים.
אם הטמעות המכשירים כוללות ג'ירוסקופ ב-3 צירים, הן:
- [C-1-1] המכשיר חייב להיות מסוגל לדווח על אירועים בתדירות של 50 הרץ לפחות.
- [C-1-2] חובה להטמיע את החיישן
TYPE_GYROSCOPE
ומומלץ מאוד להטמיע גם את החיישןTYPE_GYROSCOPE_UNCALIBRATED
. - [C-1-4] הרזולוציה חייבת להיות 12 ביט ומעלה, ומומלץ שהיא תהיה 16 ביט ומעלה.
- [C-1-5] חובה לבצע מדידת פיצוי טמפרטורה.
- [C-1-6] חייב להיות מכויל ומפוצה בזמן השימוש, ולשמור על פרמטרי הפיצוי בין הפעלות מחדש של המכשיר.
- [C-1-7] השונות לא יכולה להיות גדולה מ-1e-7 rad^2 / s^2 לכל הרץ (שונות לכל הרץ, או rad^2 / s). השונות יכולה להשתנות בהתאם לקצב הדגימה, אבל היא חייבת להיות מוגבלת על ידי הערך הזה. במילים אחרות, אם מודדים את השונות של הג'ירוסקופ בקצב דגימה של 1 הרץ, היא צריכה להיות קטנה או שווה ל-1e-7 rad^2/s^2.
- [SR] מומלץ מאוד ששגיאת הכיול תהיה קטנה מ-0.01 רדיאן/שנייה כשהמכשיר נייח בטמפרטורת החדר.
- צריך לדווח על אירועים בתדירות של 200 הרץ לפחות.
אם הטמעות המכשירים כוללות ג'ירוסקופ עם 3 צירים, חיישן מד תאוצה וחיישן מגנטומטר, הן:
- [C-2-1] חובה להטמיע חיישן מורכב
TYPE_ROTATION_VECTOR
.
אם הטמעות המכשירים כוללות מד תאוצה עם 3 צירים וחיישן ג'ירוסקופ עם 3 צירים, הן:
- [C-3-1] חובה להטמיע את החיישנים המורכבים
TYPE_GRAVITY
ו-TYPE_LINEAR_ACCELERATION
. - [C-SR] מומלץ מאוד להטמיע את החיישן המורכב
TYPE_GAME_ROTATION_VECTOR
.
7.3.5. ברומטר
הטמעות במכשיר:
- [C-SR] מומלץ מאוד לכלול ברומטר (חיישן לחץ אוויר סביבתי).
אם ההטמעות במכשיר כוללות ברומטר, הן:
- [C-1-1] חובה להטמיע את חיישן
TYPE_PRESSURE
ולדווח עליו. - [C-1-2] המכשיר חייב להיות מסוגל להעביר אירועים בתדר של 5 הרץ או יותר.
- [C-1-3] חייב להיות עם פיצוי טמפרטורה.
- [SR] מומלץ מאוד כדי לאפשר דיווח על מדידות לחץ בטווח של 300hPa עד 1100hPa.
- הדיוק המוחלט צריך להיות 1 hPa.
- צריך להיות בעל דיוק יחסי של 0.12hPa בטווח של 20hPa (שווה לדיוק של ~1m בשינוי של ~200m בגובה פני הים).
7.3.6. מדחום
הטמעות במכשיר:
- יכול להיות שהמכשיר כולל מדחום לטמפרטורת החדר (חיישן טמפרטורה).
- יכול לכלול חיישן טמפרטורה של המעבד, אבל לא מומלץ.
אם הטמעות המכשיר כוללות מדחום סביבתי (חיישן טמפרטורה), הן:
- [C-1-1] חובה להגדיר כ-
SENSOR_TYPE_AMBIENT_TEMPERATURE
וחובה למדוד את טמפרטורת הסביבה (החדר או תא הנוסעים ברכב) מהמקום שבו המשתמש מקיים אינטראקציה עם המכשיר במעלות צלזיוס. - [C-1-2] הערך חייב להיות
SENSOR_TYPE_TEMPERATURE
. - [C-1-3] חובה למדוד את הטמפרטורה של המעבד (CPU) של המכשיר.
- [C-1-4] אסור למדוד טמפרטורה אחרת.
שימו לב שסוג החיישן SENSOR_TYPE_TEMPERATURE
הוצא משימוש ב-Android 4.0.
7.3.7. פוטומטר
- יכול להיות שהטמעות של מכשירים יכללו פוטומטר (חיישן אור רגיש לסביבה).
7.3.8. חיישן קירבה
- יכול להיות שהטמעות של מכשירים יכללו חיישן קירבה.
אם יישומי המכשיר כוללים חיישן קירבה, הם:
- [C-1-1] חובה למדוד את הקרבה של אובייקט באותו כיוון של המסך. כלומר, חיישן הקרבה חייב להיות מכוון לזיהוי אובייקטים קרובים למסך, כי המטרה העיקרית של סוג החיישן הזה היא לזהות טלפון שנמצא בשימוש על ידי המשתמש. אם הטמעות של מכשירים כוללות חיישן קירבה עם כיוון אחר, אסור שתהיה אליו גישה דרך ה-API הזה.
- [C-1-2] חייב להיות בעל רמת דיוק של ביט אחד או יותר.
7.3.9. חיישנים באיכות גבוהה
אם הטמעות המכשירים כוללות קבוצה של חיישנים באיכות גבוהה יותר כפי שמוגדר בקטע הזה, והן מאפשרות לאפליקציות של צד שלישי להשתמש בהם, הן:
- [C-1-1] חובה לזהות את היכולת באמצעות ה-feature flag
android.hardware.sensor.hifi_sensors
.
אם הטמעות של מכשירים מצהירות על android.hardware.sensor.hifi_sensors
, הן:
-
[C-2-1] חייב להיות חיישן
TYPE_ACCELEROMETER
ש:- חייב להיות בעל טווח מדידה של לפחות -8g עד +8g, מומלץ שיהיה בעל טווח מדידה של לפחות -16g עד +16g.
- חייב להיות בעל רזולוציית מדידה של לפחות 2048 LSB/g.
- חייב להיות בעל תדר מדידה מינימלי של 12.5 הרץ או פחות.
- חייבת להיות תמיכה בתדר מדידה מקסימלי של 400 הרץ ומעלה; מומלץ לתמוך ב-SensorDirectChannel
RATE_VERY_FAST
. - חייב להיות רעש מדידה שלא עולה על 400 μg/√Hz.
- חובה להטמיע חיישן כזה שלא מפעיל את המכשיר, עם יכולת אחסון זמני של לפחות 3,000 אירועים של החיישן.
- צריכת החשמל של העיבוד באצווה לא יכולה להיות גדולה מ-3mW.
- [C-SR] מומלץ מאוד שרוחב הפס של המדידה יהיה לפחות 80% מתדירות נייקוויסט, וספקטרום הרעש הלבן יהיה בתוך רוחב הפס הזה.
- צריך להיות בעל תאוצה אקראית של פחות מ-30 מיקרוגרם √Hz שנבדקה בטמפרטורת החדר.
- צריך להיות שינוי הטיה לעומת טמפרטורה של ≤ +/- 1 mg/°C.
- צריכה להיות לו ליניאריות של קו ההתאמה הטובה ביותר של ≤ 0.5%, ושינוי רגישות לעומת טמפרטורה של ≤ 0.03%/C°.
- רצוי שתהיה רגישות בין-צירית של פחות מ-2.5 % ושונות של רגישות בין-צירית של פחות מ-0.2% בטווח טמפרטורת ההפעלה של המכשיר.
-
[C-2-2] חובה לכלול
TYPE_ACCELEROMETER_UNCALIBRATED
עם אותן דרישות איכות כמוTYPE_ACCELEROMETER
. -
[C-2-3] חייב להיות חיישן
TYPE_GYROSCOPE
ש:- חייב להיות לגירוסקופ טווח מדידה של לפחות -1,000 עד +1,000 dps.
- חייב להיות בעל רזולוציית מדידה של לפחות 16 LSB/dps.
- חייב להיות בעל תדר מדידה מינימלי של 12.5 הרץ או פחות.
- חייבת להיות תמיכה בתדר מדידה מקסימלי של 400 הרץ ומעלה; מומלץ לתמוך ב-SensorDirectChannel
RATE_VERY_FAST
. - חייב להיות בעל רעש מדידה שלא עולה על 0.014°/s/√Hz.
- [C-SR] מומלץ מאוד שרוחב הפס של המדידה יהיה לפחות 80% מתדירות נייקוויסט, וספקטרום הרעש הלבן יהיה בתוך רוחב הפס הזה.
- מומלץ ששיעור ההליכה האקראית יהיה קטן מ-0.001 °/s √Hz שנבדק בטמפרטורת החדר.
- צריך להיות שינוי הטיה לעומת טמפרטורה של ≤ +/- 0.05 °/ s / °C.
- רצוי שרגישות השינוי לעומת הטמפרטורה תהיה ≤ 0.02% / °C.
- צריך לכלול קו בעל ההתאמה הטובה ביותר עם אי-ליניאריות של ≤ 0.2%.
- צריכה להיות צפיפות רעש של ≤ 0.007 °/s/√Hz.
- צריכה להיות שגיאת כיול קטנה מ-0.002 rad/s בטווח הטמפרטורות 10 עד 40 מעלות צלזיוס כשהמכשיר נייח.
- הערך של רגישות ה-g צריך להיות קטן מ-0.1°/s/g.
- החיישן צריך להיות בעל רגישות בין-צירית של פחות מ-4.0 % ושינוי ברגישות בין-צירית של פחות מ-0.3% בטווח טמפרטורות הפעולה של המכשיר.
-
[C-2-4] חייב לכלול
TYPE_GYROSCOPE_UNCALIBRATED
עם אותן דרישות איכות כמוTYPE_GYROSCOPE
. -
[C-2-5] חייב להיות חיישן
TYPE_GEOMAGNETIC_FIELD
ש:- חייב להיות בעל טווח מדידה של לפחות -900 עד +900 μT.
- חייבת להיות רזולוציית מדידה של לפחות 5 LSB/uT.
- חייב להיות בעל תדר מדידה מינימלי של 5 הרץ או פחות.
- חייב להיות בעל תדירות מדידה מקסימלית של 50 הרץ ומעלה.
- חייב להיות רעש מדידה שלא עולה על 0.5 מיקרוטסלה.
-
[C-2-6] חובה להשתמש ב-
TYPE_MAGNETIC_FIELD_UNCALIBRATED
שעומד בדרישות האיכות שלTYPE_GEOMAGNETIC_FIELD
, ובנוסף:- חובה להטמיע חיישן כזה שלא מפעיל את המכשיר, עם יכולת אגירה של לפחות 600 אירועים של החיישן.
- [C-SR] מומלץ מאוד להשתמש בספקטרום של רעש לבן מ-1 הרץ עד 10 הרץ לפחות, כשקצב הדיווח הוא 50 הרץ או יותר.
-
[C-2-7] חייב להיות חיישן
TYPE_PRESSURE
ש:- חייב להיות לו טווח מדידה של לפחות 300 עד 1,100 hPa.
- חייבת להיות רזולוציית מדידה של לפחות 80 LSB/hPa.
- חייב להיות בעל תדר מדידה מינימלי של 1 הרץ או פחות.
- חייב להיות בעל תדירות מדידה מקסימלית של 10 הרץ ומעלה.
- חייב להיות רעש מדידה שלא עולה על 2 Pa/√Hz.
- חובה להטמיע חיישן כזה בצורה שלא מעירה את המכשיר, עם יכולת אחסון במאגר זמני של לפחות 300 אירועים של החיישן.
- צריכת החשמל של העיבוד באצווה לא יכולה להיות גבוהה מ-2mW.
- [C-2-8] חייב להיות חיישן
TYPE_GAME_ROTATION_VECTOR
. - [C-2-9] חובה לכלול חיישן
TYPE_SIGNIFICANT_MOTION
ש:- צריכת האנרגיה לא יכולה להיות גבוהה מ-0.5mW כשהמכשיר נייח, ומ-1.5mW כשהמכשיר בתנועה.
- [C-2-10] חובה לכלול חיישן
TYPE_STEP_DETECTOR
ש:- חובה להטמיע חיישן כזה שלא מפעיל את המכשיר, עם יכולת אחסון במאגר זמני של לפחות 100 אירועים של החיישן.
- צריכת האנרגיה לא יכולה להיות גבוהה מ-0.5mW כשהמכשיר נייח, ומ-1.5mW כשהמכשיר בתנועה.
- צריכת החשמל של העיבוד באצווה לא יכולה להיות גבוהה מ-4mW.
- [C-2-11] חובה לכלול חיישן
TYPE_STEP_COUNTER
ש:- צריכת האנרגיה לא יכולה להיות גבוהה מ-0.5mW כשהמכשיר נייח, ומ-1.5mW כשהמכשיר בתנועה.
- [C-2-12] חובה לכלול חיישן
TILT_DETECTOR
ש:- צריכת האנרגיה לא יכולה להיות גבוהה מ-0.5mW כשהמכשיר נייח, ומ-1.5mW כשהמכשיר בתנועה.
- [C-2-13] חותמת הזמן של האירוע הפיזי זהה, שדווח על ידי מד התאוצה, הג'ירוסקופ והמגנטומטר, וחייבת להיות בהפרש של עד 2.5 אלפיות השנייה בין אחת לשנייה. חותמת הזמן של האירוע הפיזי זהה לזו שמדווחת על ידי מד התאוצה והג'ירוסקופ, וההפרש ביניהן צריך להיות עד 0.25 אלפיות השנייה.
- [C-2-14] חובה שחותמות הזמן של אירועים בחיישן הג'ירוסקופ יהיו באותו בסיס זמן כמו מערכת המשנה של המצלמה, ועם שגיאה של עד אלפית השנייה.
- [C-2-15] חובה לספק דגימות לאפליקציות תוך 5 אלפיות השנייה מהרגע שבו הנתונים זמינים באחד מהחיישנים הפיזיים שלמעלה לאפליקציה.
- [C-2-16] צריכת החשמל לא יכולה להיות גבוהה מ-0.5 מיליוואט כשהמכשיר נייח ומ-2.0 מיליוואט כשהמכשיר בתנועה, כשמופעל שילוב כלשהו של החיישנים הבאים:
-
SENSOR_TYPE_SIGNIFICANT_MOTION
-
SENSOR_TYPE_STEP_DETECTOR
-
SENSOR_TYPE_STEP_COUNTER
-
SENSOR_TILT_DETECTORS
-
- [C-2-17] יכול להיות שיהיה מכשיר
TYPE_PROXIMITY
, אבל אם יש כזה, הוא חייב לכלול מאגר נתונים זמני עם קיבולת מינימלית של 100 אירועים של חיישנים.
חשוב לדעת: כל הדרישות בנוגע לצריכת החשמל שמפורטות בקטע הזה לא כוללות את צריכת החשמל של מעבד האפליקציה. הוא כולל את צריכת החשמל של כל שרשרת החיישנים – החיישן, כל המעגלים התומכים, כל מערכת עיבוד החיישנים הייעודית וכו'.
אם הטמעות המכשירים כוללות תמיכה ישירה בחיישנים, הן:
- [C-3-1] חובה להצהיר בצורה נכונה על תמיכה בסוגים של ערוצים ישירים וברמות של שיעורי דיווח ישירים באמצעות ממשקי ה-API
isDirectChannelTypeSupported
ו-getHighestDirectReportRateLevel
. - [C-3-2] חובה לתמוך לפחות באחד משני סוגי הערוצים הישירים של החיישנים עבור כל החיישנים שמצהירים על תמיכה בערוץ ישיר של חיישן.
- חובה לתמוך בדיווח על אירועים דרך ערוץ ישיר של חיישן עבור חיישן ראשי (גרסה ללא הפעלה) מהסוגים הבאים:
-
TYPE_ACCELEROMETER
-
TYPE_ACCELEROMETER_UNCALIBRATED
-
TYPE_GYROSCOPE
-
TYPE_GYROSCOPE_UNCALIBRATED
-
TYPE_MAGNETIC_FIELD
-
TYPE_MAGNETIC_FIELD_UNCALIBRATED
-
7.3.10. חיישנים ביומטריים
מידע נוסף על מדידת האבטחה של ביטול נעילה ביומטרי זמין במסמכי מדידת האבטחה הביומטרית.
אם הטמעות המכשיר כוללות מסך נעילה מאובטח, הן:
- מומלץ לכלול חיישן ביומטרי
חיישנים ביומטריים יכולים להיות מסווגים כחזקים, חלשים או נוחים על סמך שיעורי הקבלה של זיופים ומתחזים, ועל סמך האבטחה של צינור הנתונים הביומטרי. הסיווג הזה קובע את היכולות של החיישן הביומטרי ליצור אינטראקציה עם הפלטפורמה ועם אפליקציות של צד שלישי. חיישנים מסווגים כנוחות כברירת מחדל, והם צריכים לעמוד בדרישות נוספות שמפורטות בהמשך כדי להיות מסווגים כחלשים או כחזקים. גם ביומטריה חלשה וגם ביומטריה חזקה מקבלות יכולות נוספות, כמו שמפורט בהמשך.
כדי להפוך חיישן ביומטרי לזמין לאפליקציות של צד שלישי, הטמעות של מכשירים:
- [C-0-1] חייב לעמוד בדרישות של אימות ביומטרי חזק או חלש, כפי שמוגדר במסמך הזה.
כדי לאפשר לאפליקציות צד שלישי וליישומים במכשיר לגשת למפתחות של חנות המפתחות:
- [C-0-2] חובה לעמוד בדרישות של אימות חזק כפי שמוגדר במסמך הזה.
בנוסף:
- [C-0-3] צריך להיות משויך לפעולת אישור מפורשת (למשל, לחיצה על לחצן) אם הזיהוי הביומטרי החזק הוא פסיבי (למשל, זיהוי פנים או קשתית העין, שבהם לא קיים אות מפורש של כוונת המשתמש).
- [C-SR] מומלץ מאוד לאבטח את פעולת האישור של נתונים ביומטריים פסיביים, כך שפריצה למערכת ההפעלה או לליבה לא תוכל לזייף אותה. לדוגמה, המשמעות היא שפעולת האישור שמבוססת על לחצן פיזי מנותבת דרך פין קלט/פלט (GPIO) למטרה כללית של קלט בלבד של רכיב מאובטח (SE), שלא ניתן להפעיל אותו בשום דרך אחרת מלבד לחיצה על לחצן פיזי.
אם רוצים להגדיר חיישן ביומטרי במכשיר כנוח, צריך:
- [C-1-1] שיעור הקבלה השגוי חייב להיות נמוך מ-0.002%.
- [C-1-2] חובה לציין שהמצב הזה עשוי להיות פחות מאובטח מקוד אימות, מקו ביטול נעילה או מסיסמה חזקים, ולפרט באופן ברור את הסיכונים בהפעלת המצב הזה, אם שיעורי הקבלה של זיוף והתחזות גבוהים מ-7%.
- [C-1-3] חובה להגביל את קצב הניסיונות למשך 30 שניות לפחות אחרי חמישה ניסיונות כושלים לאימות ביומטרי – ניסיון כושל הוא ניסיון עם איכות לכידה מספקת (
BIOMETRIC_ACQUIRED_GOOD
) שלא תואמת לנתונים ביומטריים רשומים. - [C-1-4] המערכת חייבת למנוע הוספה של נתונים ביומטריים חדשים בלי ליצור קודם שרשרת אמון, על ידי דרישה מהמשתמש לאשר נתוני כניסה קיימים או להוסיף נתוני כניסה חדשים למכשיר (קוד אימות, תבנית או סיסמה) שמאובטחים על ידי TEE. ההטמעה של Android Open Source Project מספקת את המנגנון במסגרת הפעולה כדי לעשות זאת.
- [C-1-5] חובה להסיר באופן מלא את כל הנתונים הביומטריים שניתן לזהות של משתמש כשמסירים את החשבון שלו (כולל באמצעות איפוס להגדרות המקוריות).
- [C-1-6] חובה לכבד את הדגל האישי של אותו נתון ביומטרי (כלומר
DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT
,DevicePolicymanager.KEYGUARD_DISABLE_FACE
אוDevicePolicymanager.KEYGUARD_DISABLE_IRIS
). - [C-1-7] המכשיר חייב לדרוש מהמשתמש אימות ראשי מומלץ (למשל קוד אימות, קו ביטול נעילה או סיסמה) פעם ב-24 שעות או פחות במכשירים חדשים עם Android גרסה 10, ופעם ב-72 שעות או פחות במכשירים שמשדרגים מגרסה קודמת של Android.
-
[C-1-8] המערכת חייבת לבקש מהמשתמש לבצע את האימות הראשי המומלץ (למשל: קוד אימות, תבנית, סיסמה) אחרי אחד מהמקרים הבאים:
- תקופה של 4 שעות ללא פעילות, או
- 3 ניסיונות כושלים של אימות ביומטרי.
- אחרי כל אישור מוצלח של פרטי הכניסה למכשיר, תקופת ההמתנה עד שהמכשיר יופעל מחדש ומספר ניסיונות האימות הכושלים יאופסו.
אפשר לקבל פטור מהדרישה C-1-8 לגבי שדרוג מכשירים מגרסת Android קודמת.
-
[C-SR] מומלץ מאוד ששיעור הדחייה השגוי יהיה פחות מ-10%, כפי שנמדד במכשיר.
- [C-SR] מומלץ מאוד שזמן האחזור יהיה מתחת לשנייה אחת, מהרגע שבו מזוהה נתון ביומטרי ועד שהמסך נפתח, לכל נתון ביומטרי רשום.
אם הטמעות של מכשירים רוצות להתייחס לחיישן ביומטרי כחלש, הן:
- [C-2-1] חייב לעמוד בכל הדרישות של נוחות שפורטו למעלה, למעט [C-1-2].
- [C-2-2] שיעור הקבלה של זיופים ומתחזים לא יכול להיות גבוה מ-20%.
- [C-2-3] חובה להטמיע מאגר מפתחות שמגובה בחומרה, ולבצע את ההתאמה הביומטרית בסביבת ביצוע מבודדת מחוץ למרחב המשתמש או לליבה של Android, כמו סביבת מחשוב אמינה (TEE), או בשבב עם ערוץ מאובטח לסביבת הביצוע המבודדת.
- [C-2-4] חובה להצפין את כל הנתונים המזהים ולאמת אותם באופן קריפטוגרפי, כך שלא ניתן יהיה להשיג, לקרוא או לשנות אותם מחוץ לסביבת הביצוע המבודדת או מחוץ לשבב עם ערוץ מאובטח לסביבת הביצוע המבודדת, כפי שמתואר בהנחיות ההטמעה באתר של פרויקט הקוד הפתוח של Android.
- [C-2-5] במקרה של נתונים ביומטריים שמבוססים על מצלמה, בזמן שמתבצע אימות או רישום שמבוססים על נתונים ביומטריים:
- המצלמה חייבת לפעול במצב שמונע קריאה או שינוי של פריימים של המצלמה מחוץ לסביבת ההרצה המבודדת או מחוץ לשבב עם ערוץ מאובטח לסביבת ההרצה המבודדת.
- בפתרונות RGB עם מצלמה אחת, אפשר לקרוא את הפריימים של המצלמה מחוץ לסביבת הביצוע המבודדת כדי לתמוך בפעולות כמו תצוגה מקדימה להרשמה, אבל אסור לשנות אותם.
- [C-2-6] אסור לאפשר לאפליקציות של צד שלישי להבחין בין רישומים ביומטריים של משתמשים שונים.
- [C-2-7] אסור לאפשר גישה לא מוצפנת לנתונים ביומטריים מזהים או לנתונים שנגזרים מהם (כמו הטמעות) למעבד האפליקציות מחוץ להקשר של TEE.
-
[C-2-8] חובה להשתמש בצינור עיבוד מאובטח, כך שפריצה למערכת הפעלה או לליבת מערכת לא תאפשר להחדיר נתונים ישירות כדי לבצע אימות כמשתמש באופן כוזב.
אם הטמעות המכשירים כבר הושקו בגרסה קודמת של Android ולא עומדות בדרישה C-2-8 באמצעות עדכון תוכנת מערכת, יכול להיות שהן יהיו פטורות מהדרישה.
אם רוצים להגדיר חיישן ביומטרי כחזק בהטמעות של מכשירים, צריך:
- [C-3-1] חובה לעמוד בכל הדרישות של חלש שפורטו למעלה. שדרוג מכשירים מגרסה קודמת של Android לא פטור מדרישה C-2-7.
- [C-3-2] שיעור הקבלה של הודעות מזויפות והתחזות לא יכול להיות גבוה מ-7%.
- [C-3-3] חובה להציג למשתמש בקשה לאימות ראשי מומלץ (למשל, קוד אימות, קו ביטול נעילה, סיסמה) פעם אחת בכל 72 שעות או פחות.
7.3.12. חיישן תנוחה
הטמעות במכשיר:
- יכול להיות שיש תמיכה בחיישן תנוחה עם 6 דרגות חופש.
אם הטמעות המכשירים תומכות בחיישן תנוחה עם 6 דרגות חופש, הן:
- [C-1-1] חובה להטמיע את חיישן
TYPE_POSE_6DOF
ולדווח עליו. - [C-1-2] חייב להיות מדויק יותר מוקטור הסיבוב בלבד.
7.4. קישוריות נתונים
7.4.1. טלפוניה
המונח 'טלפוניה' כפי שמשמש בממשקי ה-API של Android ובמסמך הזה מתייחס באופן ספציפי לחומרה שקשורה לביצוע שיחות קוליות ולשליחת הודעות SMS דרך רשת GSM או CDMA. יכול להיות ששיחות קוליות כאלה יועברו באמצעות מיתוג מנות ויכול להיות שלא, אבל לצורך Android הן נחשבות לשיחות עצמאיות שלא קשורות לחיבור נתונים שאולי מיושם באמצעות אותה רשת. במילים אחרות, הפונקציונליות וממשקי ה-API של 'טלפוניה' ב-Android מתייחסים ספציפית לשיחות קוליות ול-SMS. לדוגמה, מכשירים שלא יכולים לבצע שיחות או לשלוח ולקבל הודעות SMS לא נחשבים למכשיר טלפוניה, גם אם הם משתמשים ברשת סלולרית לחיבור נתונים.
- יכול להיות שיהיה אפשר להשתמש ב-Android במכשירים שלא כוללים חומרה לטלפוניה. כלומר, Android תואמת למכשירים שהם לא טלפונים.
אם הטמעות המכשירים כוללות טלפוניה של GSM או CDMA, הן:
- [C-1-1] חובה להצהיר על ה-feature flag
android.hardware.telephony
ועל feature flags אחרים של תכונות משנה בהתאם לטכנולוגיה. - [C-1-2] חובה להטמיע תמיכה מלאה ב-API של הטכנולוגיה הזו.
אם הטמעות המכשירים לא כוללות חומרה לטלפוניה, הן:
- [C-2-1] חובה להטמיע את כל ממשקי ה-API כפעולות שלא עושות כלום (no-ops).
אם הטמעות המכשירים תומכות ב-eUICC או ב-eSIM/כרטיסי SIM מוטמעים וכוללות מנגנון קנייני להנגשת הפונקציונליות של eSIM למפתחים של צד שלישי, הן:
- [C-3-1] חובה לספק הטמעה מלאה של
EuiccManager API
.
7.4.1.1. תאימות לחסימת מספרים
אם הטמעות של מכשירים מדווחות על android.hardware.telephony feature
, הן:
- [C-1-1] חובה לכלול תמיכה בחסימת מספרים
- [C-1-2] חובה להטמיע באופן מלא את
BlockedNumberContract
ואת ה-API המתאים, כפי שמתואר במסמכי ה-SDK. - [C-1-3] חובה לחסום את כל השיחות וההודעות ממספר טלפון ב-BlockedNumberProvider ללא אינטראקציה עם אפליקציות. יוצא מן הכלל היחיד הוא כשביטול חסימת המספרים מבוטל באופן זמני, כפי שמתואר במסמכי ה-SDK.
- [C-1-4] אסור לכתוב לספק יומן השיחות של הפלטפורמה לגבי שיחה חסומה.
- [C-1-5] אסור לכתוב אל ספק הטלפוניה לגבי הודעה חסומה.
- [C-1-6] חובה להטמיע ממשק משתמש לניהול מספרים חסומים, שנפתח באמצעות הכוונה שמוחזרת על ידי השיטה
TelecomManager.createManageBlockedNumbersIntent()
. - [C-1-7] אסור לאפשר למשתמשים משניים להציג או לערוך את המספרים החסומים במכשיר, כי פלטפורמת Android מניחה שלמשתמש הראשי יש שליטה מלאה בשירותי הטלפוניה, מופע יחיד, במכשיר. צריך להסתיר את כל ממשק המשתמש שקשור לחסימה ממשתמשים משניים, ועדיין להתייחס לרשימת החסימה.
- צריך להעביר את המספרים החסומים לספק כשהמכשיר מתעדכן ל-Android 7.0.
7.4.1.2. Telecom API
אם הטמעות של מכשירים מדווחות על android.hardware.telephony
, הן:
- [C-1-1] חובה לתמוך בממשקי
ConnectionService
API שמתוארים ב-SDK. - [C-1-2] חובה להציג שיחה נכנסת חדשה ולספק למשתמש אפשרות לקבל או לדחות את השיחה הנכנסת, אם המשתמש נמצא בשיחה פעילה שמתבצעת דרך אפליקציה של צד שלישי שלא תומכת בתכונת ההמתנה שצוינה באמצעות
CAPABILITY_SUPPORT_HOLD
. - [C-1-3] חובה להשתמש באפליקציה שמטמיעה את InCallService.
-
[C-SR] מומלץ מאוד להודיע למשתמש שמענה לשיחה נכנסת ינתק שיחה פעילה.
ההטמעה של AOSP עומדת בדרישות האלה באמצעות התראה קופצת שמציינת למשתמש שאם הוא יענה לשיחה הנכנסת, השיחה השנייה תנותק.
-
[C-SR] מומלץ מאוד לטעון מראש את אפליקציית החייגן שבה מוצג רשומה ביומן השיחות והשם של אפליקציית צד שלישי ביומן השיחות שלה, כאשר אפליקציית הצד השלישי מגדירה את מפתח התוספים
EXTRA_LOG_SELF_MANAGED_CALLS
ב-PhoneAccount
שלה ל-true
. - [C-SR] מומלץ מאוד לטפל באירועים
KEYCODE_MEDIA_PLAY_PAUSE
ו-KEYCODE_HEADSETHOOK
של אוזניות השמע עבור ממשקי ה-API שלandroid.telecom
באופן הבא:- הפונקציה
Connection.onDisconnect()
מופעלת כשמזוהה לחיצה קצרה על אירוע המקש במהלך שיחה פעילה. - התקשרות אל
Connection.onAnswer()
כשמזוהה לחיצה קצרה על האירוע המרכזי במהלך שיחה נכנסת. - התקשרות אל
Connection.onReject()
כשמזוהה לחיצה ארוכה על אירוע המקש במהלך שיחה נכנסת. - השתקה או ביטול השתקה של
CallAudioState
.
- הפונקציה
7.4.2. IEEE 802.11 (Wi-Fi)
הטמעות במכשיר:
- צריך לכלול תמיכה בצורה אחת או יותר של 802.11.
אם הטמעות של מכשירים כוללות תמיכה ב-802.11 וחושפות את הפונקציונליות לאפליקציה של צד שלישי, הן:
- [C-1-1] חובה להטמיע את ה-API התואם ל-Android.
- [C-1-2] חובה לדווח על דגל התכונה של החומרה
android.hardware.wifi
. - [C-1-3] חובה להטמיע את multicast API כפי שמתואר בתיעוד של ה-SDK.
- [C-1-4] חובה לתמוך ב-DNS מרובה שידור (mDNS) ואסור לסנן חבילות mDNS (224.0.0.251) בכל זמן פעולה, כולל:
- גם כשהמסך לא במצב פעיל.
- במכשירי Android TV, גם כשהמכשיר במצב המתנה.
- [C-1-5] אסור להתייחס לקריאה למתודה
WifiManager.enableNetwork()
API כאינדיקציה מספקת להחלפתNetwork
הפעיל כרגע, שמשמש כברירת מחדל לתנועת נתונים של אפליקציות ומוחזר על ידי מתודותConnectivityManager
API כמוgetActiveNetwork
ו-registerDefaultNetworkCallback
. במילים אחרות, הם יכולים להשבית את הגישה לאינטרנט שסופקה על ידי ספק רשת אחר (למשל, חבילת גלישה) רק אם הם מאמתים בהצלחה שרשת ה-Wi-Fi מספקת גישה לאינטרנט. - [C-1-6] מומלץ מאוד, כשקוראים לשיטת ה-API
ConnectivityManager.reportNetworkConnectivity()
, להעריך מחדש את הגישה לאינטרנט ב-Network
, וכשההערכה קובעת שה-Network
הנוכחי כבר לא מספק גישה לאינטרנט, לעבור לכל רשת זמינה אחרת (למשל, חבילת גלישה) שמספקת גישה לאינטרנט. - [C-SR] מומלץ מאוד להגריל את כתובת ה-MAC של המקור ואת המספר הסידורי של מסגרות בקשת הבדיקה, פעם אחת בתחילת כל סריקה, בזמן שה-STA מנותק.
- כל קבוצה של מסגרות בקשת בדיקה שמרכיבות סריקה אחת צריכה להשתמש בכתובת MAC עקבית אחת (אסור להקצות כתובת MAC אקראית באמצע הסריקה).
- מספר הרצף של בקשת הבדיקה צריך לעבור איטרציה כרגיל (בסדר עוקב) בין בקשות הבדיקה בסריקה.
- מספר הרצף של בקשת הבדיקה צריך להיות אקראי בין בקשת הבדיקה האחרונה של סריקה לבין בקשת הבדיקה הראשונה של הסריקה הבאה.
- [C-SR] מומלץ מאוד להשתמש ב-STR, בזמן ש-STA מנותק, כדי לאפשר רק את הרכיבים הבאים בפריימים של בקשות בדיקה:
- ערכת פרמטרים של SSID (0)
- קבוצת פרמטרים של DS (3)
אם ההטמעות של המכשירים כוללות תמיכה במצב חיסכון בצריכת חשמל ב-Wi-Fi, כפי שמוגדר בתקן IEEE 802.11, הן:
- [C-3-1] חובה להשבית את מצב החיסכון באנרגיה של Wi-Fi בכל פעם שאפליקציה מקבלת נעילה מסוג
WIFI_MODE_FULL_HIGH_PERF
או נעילה מסוגWIFI_MODE_FULL_LOW_LATENCY
באמצעות ממשקי ה-APIWifiManager.createWifiLock()
ו-WifiManager.WifiLock.acquire()
, והנעילה פעילה. - [C-3-2] זמן האחזור הממוצע הלוך ושוב בין המכשיר לנקודת גישה כשהמכשיר במצב נעילה של Wi-Fi עם זמן אחזור נמוך (
WIFI_MODE_FULL_LOW_LATENCY
) חייב להיות קצר יותר מזמן האחזור במצב נעילה של Wi-Fi עם ביצועים גבוהים (WIFI_MODE_FULL_HIGH_PERF
). - [C-SR] מומלץ מאוד למזער את זמן האחזור של הלוך ושוב ב-Wi-Fi בכל פעם שמתבצעת נעילה של זמן אחזור נמוך (
WIFI_MODE_FULL_LOW_LATENCY
) והיא נכנסת לתוקף.
אם הטמעות המכשירים תומכות ב-Wi-Fi ומשתמשות ב-Wi-Fi לסריקת מיקום, הן:
- [C-2-1] חובה לספק למשתמש אפשרות להפעיל או להשבית את קריאת הערך באמצעות שיטת ה-API
WifiManager.isScanAlwaysAvailable
.
7.4.2.1. Wi-Fi ישיר
הטמעות במכשיר:
- צריכה להיות תמיכה ב-Wi-Fi Direct (Wi-Fi peer-to-peer).
אם הטמעות המכשירים כוללות תמיכה ב-Wi-Fi Direct, הן:
- [C-1-1] חובה להטמיע את ממשק ה-API התואם ל-Android כפי שמתואר במסמכי ה-SDK.
- [C-1-2] חובה לדווח על תכונת החומרה
android.hardware.wifi.direct
. - [C-1-3] חובה לתמוך בפעולה רגילה של Wi-Fi.
- [C-1-4] המכשיר חייב לתמוך בפעולות של Wi-Fi ו-Wi-Fi Direct בו-זמנית.
7.4.2.2. הגדרה של קישור ישיר עם מנהור Wi-Fi
הטמעות במכשיר:
- צריך לכלול תמיכה בהגדרה של קישור ישיר מנהור Wi-Fi (TDLS) כפי שמתואר בתיעוד של Android SDK.
אם הטמעות המכשירים כוללות תמיכה ב-TDLS וה-TDLS מופעל על ידי ה-API של WiFiManager, הן:
- [C-1-1] חובה להצהיר על תמיכה ב-TDLS באמצעות
WifiManager.isTdlsSupported
. - מומלץ להשתמש ב-TDLS רק אם הדבר אפשרי ומועיל.
- צריך להשתמש בהיוריסטיקה כלשהי ולא להשתמש ב-TDLS אם הביצועים שלו עלולים להיות גרועים יותר מאשר מעבר דרך נקודת הגישה ל-Wi-Fi.
7.4.2.3. Wi-Fi Aware
הטמעות במכשיר:
- מומלץ לכלול תמיכה ב-Wi-Fi Aware.
אם הטמעות המכשירים כוללות תמיכה ב-Wi-Fi Aware וחושפות את הפונקציונליות לאפליקציות של צד שלישי, אז הן:
- [C-1-1] חובה להטמיע את ממשקי ה-API של
WifiAwareManager
כפי שמתואר בתיעוד ה-SDK. - [C-1-2] חובה להצהיר על ה-feature flag
android.hardware.wifi.aware
. - [C-1-3] המכשיר חייב לתמוך בפעולות של Wi-Fi ו-Wi-Fi Aware בו-זמנית.
- [C-1-4] חובה ליצור כתובת אקראית לממשק הניהול של Wi-Fi Aware במרווחי זמן של עד 30 דקות, ובכל פעם שמפעילים את Wi-Fi Aware.
אם הטמעות המכשירים כוללות תמיכה ב-Wi-Fi Aware ובמיקום Wi-Fi כפי שמתואר בקטע 7.4.2.5, והן חושפות את הפונקציות האלה לאפליקציות של צד שלישי, אז:
- [C-2-1] חובה להטמיע את ממשקי ה-API לחיפוש מיקום: setRangingEnabled, setMinDistanceMm, setMaxDistanceMm ו-onServiceDiscoveredWithinRange.
7.4.2.4. פרוטוקול Passpoint ל-Wi-Fi
הטמעות במכשיר:
- צריכה להיות תמיכה ב-Wi-Fi Passpoint.
אם הטמעות המכשירים כוללות תמיכה ב-Wi-Fi Passpoint, הן:
- [C-1-1] חובה להטמיע את ממשקי ה-API שקשורים ל-Passpoint
WifiManager
כפי שמתואר בתיעוד ה-SDK. - [C-1-2] חובה לתמוך בתקן IEEE 802.11u, במיוחד בנוגע לגילוי רשת ובחירת רשת, כמו Generic Advertisement Service (שירות פרסום כללי, GAS) ו-Access Network Query Protocol (פרוטוקול שאילתת רשת גישה, ANQP).
לעומת זאת, אם הטמעות המכשירים לא כוללות תמיכה ב-Wi-Fi Passpoint:
- [C-2-1] ההטמעה של ממשקי ה-API שקשורים ל-Passpoint ב-
WifiManager
חייבת להחזיר את השגיאהUnsupportedOperationException
.
7.4.2.5. מיקום Wi-Fi (זמן הלוך ושוב ב-Wi-Fi – RTT)
הטמעות במכשיר:
- צריך לכלול תמיכה במיקום Wi-Fi.
אם הטמעות המכשירים כוללות תמיכה במיקום באמצעות Wi-Fi וחושפות את הפונקציונליות לאפליקציות של צד שלישי, אז הן:
- [C-1-1] חובה להטמיע את ממשקי ה-API של
WifiRttManager
כפי שמתואר בתיעוד ה-SDK. - [C-1-2] חובה להצהיר על ה-feature flag
android.hardware.wifi.rtt
. - [C-1-3] חובה לבצע רנדומיזציה של כתובת ה-MAC של המקור עבור כל פרץ RTT שמופעל בזמן שממשק ה-Wi-Fi שבו מופעל ה-RTT לא משויך לנקודת גישה.
7.4.2.6. העברה של שמירת חיבור Wi-Fi פעיל
הטמעות במכשיר:
- צריך לכלול תמיכה בהעברת נתונים של Wi-Fi keepalive.
אם הטמעות המכשירים כוללות תמיכה בהעברת עומס של שמירת חיבור Wi-Fi פעיל (keepalive) ומציגות את הפונקציונליות לאפליקציות של צד שלישי, הן:
-
[C-1-1] חובה לתמוך ב-API SocketKeepAlive.
-
[C-1-2] המכשיר חייב לתמוך בלפחות שלושה חריצי שמירת חיבור בו-זמנית ב-Wi-Fi, ולפחות בחריץ שמירת חיבור אחד ברשת סלולרית.
אם הטמעות של מכשירים לא כוללות תמיכה בהעברת נתונים של שמירת חיבור ה-Wi-Fi, הן:
- [C-2-1] חובה להחזיר
ERROR_UNSUPPORTED
.
7.4.2.7. חיבור קל ל-Wi-Fi (פרוטוקול הקצאת הרשאות למכשיר)
הטמעות במכשיר:
- צריך לכלול תמיכה ב-Wi-Fi Easy Connect (DPP).
אם הטמעות המכשירים כוללות תמיכה ב-Wi-Fi Easy Connect וחושפות את הפונקציונליות לאפליקציות של צד שלישי, הן:
- [C-1-1] חובה להטמיע את ממשקי ה-API של Intent
Settings#ACTION_PROCESS_WIFI_EASY_CONNECT_URI
כפי שמתואר בתיעוד של ה-SDK. - [C-1-2] השיטה WifiManager#isEasyConnectSupported() חייבת להחזיר את הערך
true
.
7.4.3. Bluetooth
אם הטמעות המכשירים תומכות בפרופיל Bluetooth Audio, הן:
- צריכה להיות תמיכה בקודקים מתקדמים לאודיו ובקודקים לאודיו ב-Bluetooth (למשל LDAC).
אם יישומי המכשיר תומכים ב-HFP, A2DP ו-AVRCP, הם:
- צריך לתמוך בחיבור של 5 מכשירים לפחות.
אם הטמעות של מכשירים מצהירות על התכונה android.hardware.vr.high_performance
, הן:
- [C-1-1] המכשיר חייב לתמוך ב-Bluetooth 4.2 וב-Bluetooth LE Data Length Extension.
Android כולל תמיכה ב-Bluetooth וב-Bluetooth עם צריכת אנרגיה נמוכה.
אם הטמעות המכשירים כוללות תמיכה ב-Bluetooth וב-Bluetooth Low Energy, הן:
- [C-2-1] חובה להצהיר על התכונות הרלוונטיות של הפלטפורמה (
android.hardware.bluetooth
ו-android.hardware.bluetooth_le
בהתאמה) ולהטמיע את ממשקי ה-API של הפלטפורמה. - מומלץ להטמיע פרופילים רלוונטיים של Bluetooth כמו A2DP, AVRCP, OBEX, HFP וכו' בהתאם למכשיר.
אם ההטמעות של המכשירים כוללות תמיכה ב-Bluetooth Low Energy, הן:
- [C-3-1] חובה להצהיר על תכונת החומרה
android.hardware.bluetooth_le
. - [C-3-2] חובה להפעיל את ממשקי ה-API של Bluetooth שמבוססים על GATT (פרופיל מאפיינים כללי), כפי שמתואר במסמכי התיעוד של ה-SDK וב-android.bluetooth.
- [C-3-3] חובה לדווח על הערך הנכון של
BluetoothAdapter.isOffloadedFilteringSupported()
כדי לציין אם הוטמעה לוגיקת הסינון של מחלקות ה-API ScanFilter. - [C-3-4] חובה לדווח על הערך הנכון של
BluetoothAdapter.isMultipleAdvertisementSupported()
כדי לציין אם יש תמיכה בפרסום עם צריכת אנרגיה נמוכה. - צריכה להיות תמיכה בהעברת הלוגיקה של הסינון לערכת השבבים של Bluetooth כשמטמיעים את ScanFilter API.
- צריכה להיות תמיכה בהעברת העומס של סריקה באצווה לערכת השבבים של Bluetooth.
-
צריך לתמוך בהצגת כמה מודעות עם לפחות 4 מיקומי מודעות.
-
[SR] מומלץ מאוד להטמיע פסק זמן של כתובת פרטית שניתנת לפתרון (RPA) שלא יעלה על 15 דקות, ולשנות את הכתובת בתום פסק הזמן כדי להגן על פרטיות המשתמש.
אם הטמעות המכשירים תומכות ב-Bluetooth LE ומשתמשות ב-Bluetooth LE לסריקת מיקום, הן:
- [C-4-1] חובה לספק למשתמש אפשרות להפעיל או להשבית את קריאת הערך דרך System API
BluetoothAdapter.isBleScanAlwaysAvailable()
.
אם הטמעות המכשירים כוללות תמיכה ב-Bluetooth LE ובפרופיל מכשירי שמיעה, כפי שמתואר במאמר תמיכה באודיו של מכשירי שמיעה באמצעות Bluetooth LE, הן:
- [C-5-1] הפונקציה BluetoothAdapter.getProfileProxy(context, listener, BluetoothProfile.HEARING_AID) חייבת להחזיר
true
.
7.4.4. תקשורת מטווח קצר (NFC)
הטמעות במכשיר:
- צריך לכלול משדר ומקלט ורכיבי חומרה קשורים לתקשורת מטווח קצר (NFC).
- [C-0-1] חובה להטמיע ממשקי API של
android.nfc.NdefMessage
ושלandroid.nfc.NdefRecord
גם אם הם לא כוללים תמיכה ב-NFC או שמצהירים על התכונהandroid.hardware.nfc
, כי המחלקות מייצגות פורמט של נתונים שאינו תלוי בפרוטוקול.
אם הטמעות המכשירים כוללות חומרת NFC ואתם מתכננים להפוך אותה לזמינה לאפליקציות של צד שלישי, אתם צריכים:
- [C-1-1] חובה לדווח על התכונה
android.hardware.nfc
מהשיטהandroid.content.pm.PackageManager.hasSystemFeature()
. - חייבת להיות אפשרות לקרוא ולכתוב הודעות NDEF באמצעות תקני ה-NFC הבאים:
- [C-1-2] חייבת להיות אפשרות להשתמש במכשיר כקורא/כותב של NFC Forum (כפי שמוגדר במפרט הטכני של NFC Forum NFCForum-TS-DigitalProtocol-1.0) באמצעות תקני ה-NFC הבאים:
- NfcA (ISO14443-3A)
- NfcB (ISO14443-3B)
- NfcF (JIS X 6319-4)
- IsoDep (ISO 14443-4)
- סוגי תגים 1, 2, 3, 4, 5 של NFC Forum (מוגדרים על ידי NFC Forum)
-
[SR] מומלץ מאוד שתהיה אפשרות לקרוא ולכתוב הודעות NDEF וגם נתונים גולמיים באמצעות תקני ה-NFC הבאים. שימו לב: למרות שהתקנים של NFC מוגדרים כ'מומלץ מאוד', מתוכנן שינוי בהגדרת התאימות לגרסה עתידית, כך שהם יוגדרו כ'חובה'. התקנים האלה הם אופציונליים בגרסה הזו, אבל הם יהיו חובה בגרסאות עתידיות. מומלץ מאוד שמכשירים קיימים וחדשים שמריצים את הגרסה הזו של Android יעמדו בדרישות האלה כבר עכשיו, כדי שיוכלו לשדרג לגרסאות הפלטפורמה העתידיות.
-
[C-1-13] חובה לבצע סקר לכל הטכנולוגיות הנתמכות בזמן שמצב הגילוי של NFC מופעל.
- צריך להיות במצב גילוי NFC בזמן שהמכשיר פעיל, המסך פעיל ומסך הנעילה לא נעול.
- צריכה להיות אפשרות לקרוא את הברקוד ואת כתובת ה-URL (אם הם מקודדים) של מוצרים עם ברקוד NFC של Thinfilm.
שימו לב: הקישורים שזמינים לציבור לא זמינים למפרטים של JIS, ISO ו-NFC Forum שצוינו למעלה.
Android כולל תמיכה במצב Host Card Emulation (HCE) של NFC.
אם הטמעות במכשירים כוללות ערכת שבבים של בקר NFC עם יכולת HCE (עבור NfcA ו/או NfcB) ותמיכה בניתוב של מזהה אפליקציה (AID), הן:
- [C-2-1] חובה לדווח על קבוע התכונה
android.hardware.nfc.hce
. - [C-2-2] חובה לתמוך בממשקי NFC HCE API כפי שמוגדרים ב-Android SDK.
אם הטמעות המכשירים כוללות ערכת שבבים של בקר NFC עם יכולת HCE עבור NfcF, ומטמיעות את התכונה עבור אפליקציות צד שלישי, הן:
- [C-3-1] חובה לדווח על קבוע התכונה
android.hardware.nfc.hcef
. - [C-3-2] חובה להטמיע את ממשקי ה-API של NfcF Card Emulation כפי שמוגדר ב-Android SDK.
אם הטמעות המכשירים כוללות תמיכה כללית ב-NFC כפי שמתואר בקטע הזה ותמיכה בטכנולוגיות MIFARE (MIFARE Classic, MIFARE Ultralight, NDEF ב-MIFARE Classic) בתפקיד הקורא/הכותב, הן:
- [C-4-1] חובה להטמיע את ממשקי ה-API התואמים ל-Android כפי שמתואר ב-Android SDK.
- [C-4-2] חובה לדווח על התכונה
com.nxp.mifare
מהשיטהandroid.content.pm.PackageManager.hasSystemFeature
(). הערה: זו לא תכונה רגילה של Android, ולכן היא לא מופיעה כקבוע במחלקהandroid.content.pm.PackageManager
.
7.4.5. יכולת רשת מינימלית
הטמעות במכשיר:
- [C-0-1] חובה לכלול תמיכה בצורה אחת או יותר של רשת נתונים. באופן ספציפי, הטמעות של מכשירים חייבות לכלול תמיכה לפחות בתקן נתונים אחד עם יכולת של 200 Kbit/sec או יותר. דוגמאות לטכנולוגיות שעומדות בדרישה הזו כוללות EDGE, HSPA, EV-DO, 802.11g, Ethernet ו-Bluetooth PAN.
- בנוסף, המכשיר צריך לתמוך לפחות בתקן נפוץ אחד של נתונים אלחוטיים, כמו 802.11 (Wi-Fi), אם תקן רשת פיזי (כמו אתרנט) הוא חיבור הנתונים העיקרי.
- יכול להיות שיהיו כמה דרכים לחיבור נתונים.
- [C-0-2] חובה לכלול מחסנית רשת IPv6 ולתמוך בתקשורת IPv6 באמצעות ממשקי ה-API המנוהלים, כמו
java.net.Socket
ו-java.net.URLConnection
, וגם ממשקי ה-API המקוריים, כמו שקעיAF_INET6
. - [C-0-3] חובה להפעיל IPv6 כברירת מחדל.
- חובה לוודא שהתקשורת ב-IPv6 אמינה כמו ב-IPv4, למשל:
- [C-0-4] חובה לשמור על קישוריות IPv6 במצב שינה.
- [C-0-5] הגבלת קצב לא יכולה לגרום למכשיר לאבד קישוריות IPv6 בכל רשת שתואמת ל-IPv6 ומשתמשת בערכי זמן חיים של RA של 180 שניות לפחות.
- [C-0-6] חובה לספק לאפליקציות של צד שלישי קישוריות IPv6 ישירה לרשת כשהמכשיר מחובר לרשת IPv6, ללא תרגום של כתובת או יציאה שמתבצע באופן מקומי במכשיר. גם ממשקי API מנוהלים כמו
Socket#getLocalAddress
אוSocket#getLocalPort
) וגם ממשקי NDK API כמוgetsockname()
אוIPV6_PKTINFO
חייבים להחזיר את כתובת ה-IP והיציאה שמשמשים בפועל לשליחה ולקבלה של מנות ברשת.
רמת התמיכה הנדרשת ב-IPv6 תלויה בסוג הרשת, כפי שמוצג בדרישות הבאות.
אם הטמעות המכשירים תומכות ב-Wi-Fi, הן:
- [C-1-1] חובה לתמוך בפעולה של dual-stack ו-IPv6 בלבד ב-Wi-Fi.
אם הטמעות המכשירים תומכות באתרנט, הן:
- [C-2-1] חובה לתמוך בפעולה של dual-stack ב-Ethernet.
אם הטמעות המכשירים תומכות בנתונים סלולריים, הן:
- צריכה להיות תמיכה בפעולת IPv6 (IPv6 בלבד ואולי גם dual-stack) ברשת הסלולרית.
אם הטמעות המכשירים תומכות ביותר מסוג רשת אחד (לדוגמה, Wi-Fi וחבילת גלישה), הם:
- [C-3-1] המכשיר חייב לעמוד בדרישות שלמעלה בכל רשת בו-זמנית, כשהוא מחובר בו-זמנית ליותר מסוג רשת אחד.
7.4.6. הגדרות סנכרון
הטמעות במכשיר:
- [C-0-1] חובה להגדיר את הגדרת הסנכרון האוטומטי הראשי כהגדרה שמופעלת כברירת מחדל, כדי שהשיטה
getMasterSyncAutomatically()
תחזיר את הערך true.
7.4.7. חסכונית בנתונים
אם ההטמעות במכשיר כוללות חיבור לפי נפח נתונים, הן:
- [SR] מומלץ מאוד לספק את מצב חיסכון בחבילת הגלישה.
אם הטמעות המכשיר מספקות את מצב חוסך הנתונים, הן:
- [C-1-1] חובה לתמוך בכל ממשקי ה-API בכיתה
ConnectivityManager
כפי שמתואר במסמכי ה-SDK - [C-1-2] חובה לספק ממשק משתמש בהגדרות שמטפל בכוונת
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
, כדי לאפשר למשתמשים להוסיף אפליקציות לרשימת ההיתרים או להסיר אפליקציות ממנה.
אם הטמעות המכשירים לא מספקות את מצב חיסכון הנתונים, הן:
- [C-2-1] הפונקציה חייבת להחזיר את הערך
RESTRICT_BACKGROUND_STATUS_DISABLED
עבורConnectivityManager.getRestrictBackgroundStatus()
- [C-2-2] אסור לשדר
ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED
. - [C-2-3] חובה להגדיר פעילות שמטפלת ב-Intent
Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS
, אבל אפשר להטמיע אותה כפעולה שלא עושה כלום.
7.4.8. רכיבים מאובטחים
אם הטמעות המכשירים תומכות בממשק API נייד פתוח עם רכיבי אבטחה שיכולים לספק גישה לאפליקציות של צד שלישי, הן:
- [C-1-1] חובה למנות את קוראי הרכיבים המאובטחים הזמינים כשקוראים לשיטה
android.se.omapi.SEService.getReaders()
.
7.5. מצלמות
אם הטמעות המכשירים כוללות לפחות מצלמה אחת, הן:
- [C-1-1] חובה להצהיר על ה-feature flag
android.hardware.camera.any
. - [C-1-2] אפליקציה חייבת להיות מסוגלת להקצות בו-זמנית 3 מפות סיביות מסוג RGBA_8888 שוות לגודל התמונות שנוצרות על ידי חיישן המצלמה עם הרזולוציה הגדולה ביותר במכשיר, בזמן שהמצלמה פתוחה למטרת תצוגה מקדימה בסיסית וצילום תמונות סטילס.
- [C-1-3] חובה לוודא שאפליקציית המצלמה שמותקנת מראש כברירת מחדל ומטפלת ב-intent
MediaStore.ACTION_IMAGE_CAPTURE
, MediaStore.ACTION_IMAGE_CAPTURE_SECURE
אוMediaStore.ACTION_VIDEO_CAPTURE
, אחראית להסרת המיקום של המשתמש במטא-נתונים של התמונה לפני שליחתה לאפליקציה המקבלת, אם לאפליקציה המקבלת איןACCESS_FINE_LOCATION
.
7.5.1. מצלמה אחורית
מצלמה אחורית היא מצלמה שממוקמת בצד המכשיר שמנוגד למסך. כלומר, היא מצלמת סצנות בצד הרחוק של המכשיר, כמו מצלמה רגילה.
הטמעות במכשיר:
- צריך לכלול מצלמה אחורית.
אם הטמעות של מכשירים כוללות לפחות מצלמה אחת שפונה לאחור, הן:
- [C-1-1] חובה לדווח על סימון התכונה
android.hardware.camera
ו-android.hardware.camera.any
. - [C-1-2] חייבת להיות ברזולוציה של לפחות 2 מגה-פיקסל.
- חייב להיות מנגנון פוקוס אוטומטי בחומרה או בתוכנה שמוטמע במנהל ההתקן של המצלמה (שקוף לתוכנת האפליקציה).
- יכול להיות שיש להם חומרה עם מיקוד קבוע או EDOF (עומק שדה מורחב).
- יכול להיות שיהיה פלאש.
אם המצלמה כוללת פלאש:
- [C-2-1] אסור להפעיל את מנורת הפלאש בזמן שמופע של
android.hardware.Camera.PreviewCallback
נרשם בפלטפורמה של תצוגה מקדימה של המצלמה, אלא אם האפליקציה הפעילה את הפלאש באופן מפורש על ידי הפעלת המאפייניםandroid.hardware.Camera.PreviewCallback
אוFLASH_MODE_ON
של אובייקטCamera.Parameters
.FLASH_MODE_AUTO
חשוב לציין שההגבלה הזו לא חלה על אפליקציית המצלמה המובנית במכשיר, אלא רק על אפליקציות של צד שלישי שמשתמשות ב-Camera.PreviewCallback
.
7.5.2. מצלמה קדמית
מצלמה קדמית היא מצלמה שממוקמת באותו צד של המכשיר כמו המסך. כלומר, מצלמה שבדרך כלל משמשת לצילום תמונות של המשתמש, למשל לשיחות ועידה בווידאו ולאפליקציות דומות.
הטמעות במכשיר:
- יכול להיות שכולל מצלמה קדמית.
אם הטמעות המכשירים כוללות לפחות מצלמה אחת שפונה קדימה, הן:
- [C-1-1] חובה לדווח על סימון התכונה
android.hardware.camera.any
ו-android.hardware.camera.front
. - [C-1-2] הרזולוציה חייבת להיות VGA לפחות (640x480 פיקסלים).
- [C-1-3] אסור להשתמש במצלמה הקדמית כברירת מחדל ב-Camera API, ואסור להגדיר את ה-API כך שיחשיב מצלמה קדמית כמצלמה אחורית כברירת מחדל, גם אם זו המצלמה היחידה במכשיר.
- [C-1-4] התצוגה המקדימה של המצלמה חייבת להיות הפוכה אופקית ביחס לכיוון שצוין על ידי האפליקציה, אם האפליקציה הנוכחית ביקשה במפורש שהתצוגה של המצלמה תסתובב באמצעות קריאה לשיטה
android.hardware.Camera.setDisplayOrientation()
. לעומת זאת, התצוגה המקדימה חייבת להיות משוקפת לאורך הציר האופקי שמוגדר כברירת מחדל במכשיר, אם האפליקציה הנוכחית לא מבקשת במפורש לסובב את תצוגת המצלמה באמצעות קריאה לשיטהandroid.hardware.Camera.setDisplayOrientation()
. - [C-1-5] אסור לשקף את תמונת הסטילס או את זרמי הווידאו הסופיים שצולמו ומוחזרים לקריאות חוזרות (callback) של האפליקציה או שנשמרים באחסון המדיה.
- [C-1-6] חובה לשקף את התמונה שמוצגת בתצוגה המקדימה אחרי הצילום באותו אופן כמו זרם התמונות בתצוגה המקדימה של המצלמה.
- יכול לכלול תכונות (כמו פוקוס אוטומטי, פלאש וכו') שזמינות למצלמות שפונות לאחור, כפי שמתואר בסעיף 7.5.1.
אם אפשר לסובב את ההטמעות של המכשיר על ידי המשתמש (למשל, באופן אוטומטי באמצעות מד תאוצה או באופן ידני באמצעות קלט משתמש):
- [C-2-1] התצוגה המקדימה של המצלמה חייבת להיות הפוכה אופקית ביחס לאוריינטציה הנוכחית של המכשיר.
7.5.3. מצלמה חיצונית
הטמעות במכשיר:
- יכול להיות שתהיה תמיכה במצלמה חיצונית שלא תמיד מחוברת.
אם הטמעות המכשירים כוללות תמיכה במצלמה חיצונית, הן:
- [C-1-1] חובה להצהיר על דגל התכונה של הפלטפורמה
android.hardware.camera.external
ו-android.hardware camera.any
. - [C-1-2] המכשיר חייב לתמוך ב-USB Video Class (UVC 1.0 ומעלה) אם המצלמה החיצונית מתחברת דרך יציאת המארח של ה-USB.
- [C-1-3] המכשיר חייב לעבור את בדיקות ה-CTS של המצלמה עם מכשיר מצלמה חיצוני פיזי מחובר. פרטים על בדיקות CTS של מצלמות זמינים בכתובת source.android.com.
- צריכה להיות תמיכה בדחיסת וידאו כמו MJPEG כדי לאפשר העברה של סטרימינג באיכות גבוהה ללא קידוד (כלומר, סטרימינג של תמונות לא ערוכות או סטרימינג של תמונות שנדחסו בנפרד).
- יכול להיות שתהיה תמיכה בכמה מצלמות.
- יכול להיות שהמכשיר תומך בקידוד וידאו שמבוסס על מצלמה.
אם יש תמיכה בקידוד וידאו שמבוסס על מצלמה:
- [C-2-1] הטמעת המכשיר חייבת לאפשר גישה לשידור בו-זמני לא מוצפן / MJPEG (ברזולוציה QVGA או ברזולוציה גבוהה יותר).
7.5.4. התנהגות של Camera API
Android כוללת שני חבילות API לגישה למצלמה. ה-API החדש יותר android.hardware.camera2 מאפשר לאפליקציה שליטה במצלמה ברמה נמוכה יותר, כולל זרימות יעילות של צילום רצף או סטרימינג ללא העתקה, ובקרות לכל פריים של חשיפה, הגברה, איזון לבן, המרת צבעים, הפחתת רעשים, חידוד ועוד.
חבילת ה-API הישנה יותר, android.hardware.Camera
, מסומנת כחבילה שהוצאה משימוש ב-Android 5.0, אבל היא עדיין אמורה להיות זמינה לשימוש באפליקציות. הטמעות של מכשירי Android חייבות להבטיח את המשך התמיכה ב-API כפי שמתואר בקטע הזה וב-Android SDK.
כל התכונות שמשותפות למחלקה android.hardware.Camera שהוצאה משימוש ולחבילה החדשה יותר android.hardware.camera2 חייבות לספק ביצועים ואיכות שווים בשני ממשקי ה-API. לדוגמה, בהגדרות שוות ערך, מהירות המיקוד האוטומטי והדיוק שלו חייבים להיות זהים, ואיכות התמונות שצולמו חייבת להיות זהה. תכונות שתלויות בסמנטיקה השונה של שני ממשקי ה-API לא צריכות להיות זהות במהירות או באיכות, אבל מומלץ שהן יהיו זהות ככל האפשר.
ההטמעות במכשיר חייבות להטמיע את ההתנהגויות הבאות עבור ממשקי ה-API שקשורים למצלמה, לכל המצלמות הזמינות. הטמעות במכשיר:
- [C-0-1] חובה להשתמש ב-
android.hardware.PixelFormat.YCbCr_420_SP
כדי להציג נתונים בתצוגה מקדימה שמועברים לקריאות חוזרות (callbacks) של אפליקציה, אם האפליקציה מעולם לא קראה ל-android.hardware.Camera.Parameters.setPreviewFormat(int)
. - [C-0-2] אם אפליקציה רושמת מופע של
android.hardware.Camera.PreviewCallback
והמערכת קוראת לשיטהonPreviewFrame()
ופורמט התצוגה המקדימה הוא YCbCr_420_SP, הנתונים ב-byte[] שמועברים אלonPreviewFrame()
חייבים להיות בפורמט הקידוד NV21. כלומר, NV21 חייב להיות ברירת המחדל. - [C-0-3] חובה לתמוך בפורמט YV12 (כפי שמצוין בקבוע
android.graphics.ImageFormat.YV12
) בתצוגות מקדימות של המצלמה, הן במצלמה הקדמית והן במצלמה האחורית, ב-android.hardware.Camera
. (מקודד הווידאו והמצלמה עשויים להשתמש בכל פורמט פיקסלים מקורי, אבל ההטמעה במכשיר חייבת לתמוך בהמרה ל-YV12). - [C-0-4] חובה לתמוך בפורמטים
android.hardware.ImageFormat.YUV_420_888
ו-android.hardware.ImageFormat.JPEG
כפלט דרךandroid.media.ImageReader
API למכשיריandroid.hardware.camera2
שמפרסמים יכולתREQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE
ב-android.request.availableCapabilities
. - [C-0-5] עדיין צריך להטמיע את Camera API המלא שכלול בתיעוד של Android SDK, בלי קשר לשאלה אם המכשיר כולל פוקוס אוטומטי בחומרה או יכולות אחרות. לדוגמה, מצלמות שאין להן פוקוס אוטומטי עדיין צריכות להפעיל את כל המקרים הרשומים של
android.hardware.Camera.AutoFocusCallback
(גם אם זה לא רלוונטי למצלמה ללא פוקוס אוטומטי). חשוב לציין שההנחיות האלה חלות גם על מצלמות קדמיות. לדוגמה, למרות שרוב המצלמות הקדמיות לא תומכות בפוקוס אוטומטי, עדיין צריך ליצור 'זיוף' של הקריאות החוזרות (callback) של ה-API, כמו שמתואר. - [C-0-6] חובה לזהות ולכבד כל שם פרמטר שמוגדר כקבוע במחלקה
android.hardware.Camera.Parameters
ובמחלקהandroid.hardware.camera2.CaptureRequest
. לעומת זאת, הטמעות של מכשירים לא יכולות לכבד או לזהות קבועי מחרוזת שמועברים לשיטהandroid.hardware.Camera.setParameters()
, מלבד אלה שמתועדים כקבועים ב-android.hardware.Camera.Parameters
. כלומר, הטמעות של מכשירים חייבות לתמוך בכל הפרמטרים הסטנדרטיים של המצלמה אם החומרה מאפשרת זאת, ואסור להן לתמוך בסוגים של פרמטרים מותאמים אישית של המצלמה. לדוגמה, הטמעות במכשירים שתומכות בצילום תמונות באמצעות טכניקות צילום עם טווח דינמי גבוה (HDR) חייבות לתמוך בפרמטר המצלמהCamera.SCENE_MODE_HDR
. - [C-0-7] חובה לדווח על רמת התמיכה המתאימה באמצעות המאפיין
android.info.supportedHardwareLevel
כפי שמתואר ב-Android SDK, ולדווח על הפעלת התכונות המתאימות ב-framework. - [C-0-8] חובה גם להצהיר על יכולות המצלמה האישיות של
android.hardware.camera2
באמצעות המאפייןandroid.request.availableCapabilities
ולהצהיר על דגלי התכונות המתאימים. חובה להגדיר את דגל התכונה אם אחד ממכשירי המצלמה המחוברים תומך בתכונה. - [C-0-9] חייב לשדר את כוונת
Camera.ACTION_NEW_PICTURE
בכל פעם שהמצלמה מצלמת תמונה חדשה והתמונה נוספת למאגר המדיה. - [C-0-10] חובה לשדר את כוונת
Camera.ACTION_NEW_VIDEO
בכל פעם שמצלמים סרטון חדש והערך של התמונה נוסף למאגר המדיה. - [C-0-11] חובה שכל המצלמות שנגישות דרך ממשק
android.hardware.Camera
API שהוצא משימוש יהיו נגישות גם דרך ממשקandroid.hardware.camera2
API. - [C-SR] במכשירים עם כמה מצלמות RGB שפונות לאותו כיוון, מומלץ מאוד לתמוך במכשיר מצלמה לוגי שמציג את היכולת
CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
, שכולל את כל מצלמות ה-RGB שפונות לאותו כיוון כמכשירי משנה פיזיים.
אם הטמעות של מכשירים מספקות API קנייני למצלמה לאפליקציות של צד שלישי, הן:
- [C-1-1] חובה להטמיע API כזה למצלמה באמצעות
android.hardware.camera2
API. - יכול להיות שספקים יספקו תגים או תוספים ל-API של
android.hardware.camera2
.
7.5.5. כיוון המצלמה
אם יש במכשיר מצלמה קדמית או מצלמה אחורית, המצלמות האלה:
- [C-1-1] המצלמה צריכה להיות ממוקמת כך שהמימד הארוך שלה יהיה מקביל למימד הארוך של המסך. כלומר, כשהמכשיר מוחזק לרוחב, המצלמות חייבות לצלם תמונות לרוחב. ההגדרה הזו חלה ללא קשר לכיוון הטבעי של המכשיר, כלומר היא חלה על מכשירים שהכיוון הראשי שלהם הוא לרוחב וגם על מכשירים שהכיוון הראשי שלהם הוא לאורך.
7.6. זיכרון ואחסון
7.6.1. זיכרון ואחסון מינימליים
הטמעות במכשיר:
- [C-0-1] חובה לכלול מנהל הורדות שאפליקציות יכולות להשתמש בו כדי להוריד קבצים של נתונים, והן חייבות להיות מסוגלות להוריד קבצים בודדים בגודל של לפחות 100MB למיקום ברירת המחדל של ה'מטמון'.
7.6.2. נפח אחסון משותף של אפליקציות
הטמעות במכשיר:
- [C-0-1] חובה להציע אחסון שניתן לשיתוף בין אפליקציות, שנקרא גם 'אחסון חיצוני משותף', 'אחסון משותף לאפליקציות' או לפי נתיב Linux '/sdcard' שבו הוא מותקן.
- [C-0-2] חייב להיות מוגדר עם אחסון משותף שמוטמע כברירת מחדל, כלומר 'מוכן לשימוש', בלי קשר לשאלה אם האחסון מיושם ברכיב אחסון פנימי או במדיה לאחסון נשלף (למשל, חריץ לכרטיס Secure Digital).
- [C-0-3] חובה לטעון את האחסון השיתופי של האפליקציה ישירות בנתיב Linux
sdcard
או לכלול קישור סמלי של Linux מ-sdcard
לנקודת הטעינה בפועל. - [C-0-4] חובה לאכוף את ההרשאה
android.permission.WRITE_EXTERNAL_STORAGE
באחסון המשותף הזה, כפי שמתואר ב-SDK. - [C-0-5] חובה להפעיל אחסון בהיקף מוגבל כברירת מחדל בכל האפליקציות שמטרגטות רמת API 29 ומעלה, למעט במקרים הבאים:
- אם האפליקציה הותקנה לפני שהמכשיר שודרג לרמת API 29, ללא קשר לרמת ה-API לטירגוט של האפליקציה.
- כשהאפליקציה מבקשת
android:requestLegacyExternalStorage="true"
במניפסט שלה. - כשהאפליקציה מקבלת את ההרשאה
android.permission.WRITE_MEDIA_STORAGE
.
- [C-0-6] חובה לוודא שלאפליקציות עם אחסון בהיקף מוגבל מופעלת אין גישה ישירה למערכת הקבצים לקבצים מחוץ לספריות הספציפיות לאפליקציה, כפי שמוחזר על ידי שיטות
Context
API כמו השיטותContext.getExternalFilesDirs()
,Context.getExternalCacheDirs()
,Context.getExternalMediaDirs()
ו-Context.getObbDirs()
. - [C-0-7] חובה לצנזר מטא-נתוני מיקום, כמו תגי Exif של GPS, שמאוחסנים בקובצי מדיה, כשניגשים לקבצים האלה דרך
MediaStore
, אלא אם לאפליקציה שקוראת יש הרשאהACCESS_MEDIA_LOCATION
.
יכול להיות שהטמעות של מכשירים יעמדו בדרישות שלמעלה באמצעות אחת מהאפשרויות הבאות:
- אחסון נשלף שנגיש למשתמש, כמו חריץ לכרטיס SD (Secure Digital).
- חלק מהאחסון הפנימי (שאי אפשר להסיר) כפי שמיושם בפרויקט הקוד הפתוח של Android (AOSP).
אם הטמעות של מכשירים משתמשות באחסון נשלף כדי לעמוד בדרישות שלמעלה, הן:
- [C-1-1] חובה להטמיע אזהרה בממשק המשתמש בצורת הודעה קופצת או חלון קופץ, שמוצגת למשתמש כשלא מוכנס אמצעי אחסון לחריץ.
- [C-1-2] חובה לכלול אמצעי אחסון בפורמט FAT (למשל כרטיס SD) או לציין על הקופסה ובחומרים אחרים שזמינים בזמן הרכישה שאמצעי האחסון נרכש בנפרד.
אם הטמעות במכשירים משתמשות בחלק מהאחסון שלא ניתן להסרה כדי לעמוד בדרישות שלמעלה, הן:
- מומלץ להשתמש בהטמעה של AOSP של האחסון המשותף הפנימי של האפליקציה.
- יכול להיות שהאפליקציה תשתף את נפח האחסון עם הנתונים הפרטיים שלה.
אם הטמעות המכשיר כוללות כמה נתיבי אחסון משותפים (כמו חריץ לכרטיס SD ואחסון פנימי משותף), הן:
- [C-2-1] חובה לאפשר רק לאפליקציות Android מותקנות מראש עם הרשאת
WRITE_MEDIA_STORAGE
לכתוב לאחסון החיצוני המשני, אלא אם הכתיבה היא לספריות ספציפיות לחבילה או בתוךURI
שמוחזר על ידי הפעלת intent שלACTION_OPEN_DOCUMENT_TREE
. - [C-2-2] חובה לדרוש שהגישה הישירה שמשויכת להרשאה
android.permission.WRITE_MEDIA_STORAGE
תינתן רק לאפליקציות שגלויות למשתמשים, ורק אם ניתנה גם ההרשאהandroid.permission.WRITE_EXTERNAL_STORAGE
. - [SR] מומלץ מאוד שאפליקציות Android מותקנות מראש עם הרשאות מיוחדות ישתמשו בממשקי API ציבוריים כמו
MediaStore
כדי ליצור אינטראקציה עם מכשירי אחסון, במקום להסתמך על הגישה הישירה שניתנת על ידיandroid.permission.WRITE_MEDIA_STORAGE
.
אם בהטמעות של מכשירים יש יציאת USB עם תמיכה במצב ציוד היקפי של USB, המכשירים:
- [C-3-1] חובה לספק מנגנון לגישה לנתונים באחסון השיתופי של האפליקציה ממחשב מארח.
- צריך לחשוף תוכן משני נתיבי האחסון בצורה שקופה דרך שירות סורק המדיה של Android ודרך
android.provider.MediaStore
. - מותר להשתמש באחסון USB בנפח גדול, אבל מומלץ להשתמש בפרוטוקול העברת מדיה כדי לעמוד בדרישה הזו.
אם הטמעות של מכשירים כוללות יציאת USB עם מצב ציוד היקפי USB ותמיכה בפרוטוקול העברת מדיה (MTP), הן:
- צריכה להיות תאימות למארח ההפניה של Android MTP, Android File Transfer.
- צריך לדווח על מחלקה של מכשיר USB עם הערך 0x00.
- צריך לדווח על שם ממשק USB של MTP.
7.6.3. אחסון שניתן להתאמה
אם המכשיר אמור להיות נייד, בניגוד לטלוויזיה, ההטמעות של המכשיר הן:
- [SR] מומלץ מאוד להטמיע את האחסון הנייד במיקום יציב לטווח ארוך, כי ניתוק לא מכוון עלול לגרום לאובדן או להשחתה של נתונים.
אם יציאת התקן האחסון הנייד נמצאת במיקום יציב לטווח ארוך, למשל בתוך תא הסוללה או כיסוי מגן אחר, הטמעות המכשיר הן:
- [SR] מומלץ מאוד להטמיע אחסון שניתן להתאמה.
7.7. USB
אם יש ליציאת USB במכשיר, היא:
- צריכה להיות תמיכה במצב ציוד היקפי USB ותמיכה במצב מארח USB.
7.7.1. מצב ציוד היקפי בחיבור USB
אם ההטמעות של המכשיר כוללות יציאת USB שתומכת במצב ציוד היקפי:
- [C-1-1] היציאה חייבת להיות ניתנת לחיבור למארח USB עם יציאת USB רגילה מסוג A או מסוג C.
- [C-1-2] חובה לדווח על הערך הנכון של
iSerialNumber
בתיאור המכשיר הסטנדרטי של USB באמצעותandroid.os.Build.SERIAL
. - [C-1-3] אם המכשיר תומך ב-USB Type-C, הוא חייב לזהות מטענים של 1.5A ו-3.0A בהתאם לתקן הנגד Type-C, וחייב לזהות שינויים בפרסום.
- [SR] היציאה צריכה להיות מסוג מיקרו-B, מיקרו-AB או USB Type-C. מומלץ מאוד שמכשירי Android קיימים וחדשים יעמדו בדרישות האלה, כדי שיהיה אפשר לשדרג אותם לגרסאות עתידיות של הפלטפורמה.
- [SR] היציאה צריכה להיות ממוקמת בתחתית המכשיר (בהתאם לכיוון הטבעי) או לאפשר סיבוב מסך בתוכנה לכל האפליקציות (כולל מסך הבית), כך שהתצוגה תהיה תקינה כשהמכשיר מוצב כשהיציאה בתחתית. מומלץ מאוד שמכשירי Android קיימים וחדשים יעמדו בדרישות האלה, כדי שיהיה אפשר לשדרג אותם לגרסאות פלטפורמה עתידיות.
- [SR] SHOULD implement support to draw 1.5 A current during HS chirp and traffic as specified in the USB Battery Charging specification, revision 1.2. מומלץ מאוד שמכשירי Android קיימים וחדשים יעמדו בדרישות האלה, כדי שיהיה אפשר לשדרג אותם לגרסאות עתידיות של הפלטפורמה.
- [SR] מומלץ מאוד לא לתמוך בשיטות טעינה קנייניות שמשנות את מתח ה-Vbus מעבר לרמות ברירת המחדל, או משנות את תפקידי המקור/הצרכן, כי זה עלול לגרום לבעיות תאימות עם המטענים או המכשירים שתומכים בשיטות הסטנדרטיות של אספקת חשמל ב-USB. אומנם ההמלצה הזו מוגדרת כ'מומלץ מאוד', אבל יכול להיות שבעתיד נדרוש מכל המכשירים עם חיבור USB-C לתמוך בפעולה הדדית מלאה עם מטענים רגילים עם חיבור USB-C.
- [SR] מומלץ מאוד לתמוך באספקת חשמל להחלפת תפקידים של נתונים וחשמל כשהם תומכים ב-USB Type-C ובמצב מארח USB.
- צריכה להיות תמיכה בטעינה מהירה במתח גבוה ובמצבים חלופיים כמו תצוגה חיצונית.
- מומלץ להטמיע את ממשק ה-API ואת המפרט של Android Open Accessory (AOA) כפי שמתואר בתיעוד של Android SDK.
אם הטמעות של מכשירים כוללות יציאת USB ומיישמות את מפרט AOA, הן:
- [C-2-1] חובה להצהיר על תמיכה בתכונת החומרה
android.hardware.usb.accessory
. - [C-2-2] מחלקת האחסון ההמוני ב-USB חייבת לכלול את המחרוזת android בסוף המחרוזת
iInterface
של תיאור הממשק של האחסון ההמוני ב-USB
7.7.2. מצב מארח USB
אם יישומי המכשירים כוללים יציאת USB שתומכת במצב מארח, הם:
- [C-1-1] חובה להטמיע את Android USB host API כפי שמתואר ב-Android SDK, וחובה להצהיר על תמיכה בתכונת החומרה
android.hardware.usb.host
. - [C-1-2] חובה להטמיע תמיכה בחיבור ציוד היקפי רגיל בחיבור USB, כלומר, חובה לבצע את אחת מהפעולות הבאות:
- יש לו יציאת Type C במכשיר או שהוא נשלח עם כבלים שמתאימים יציאה קניינית במכשיר ליציאת USB Type-C רגילה (מכשיר USB Type-C).
- יש להם יציאת USB מסוג A או שהם מגיעים עם כבלים שמתאימים יציאה קניינית במכשיר ליציאת USB רגילה מסוג A.
- יש לו יציאת מיקרו AB במכשיר, שאמורה להגיע עם כבל שמתאים ליציאת Type-A רגילה.
- [C-1-3] אסור לשלוח עם מתאם שממיר מיציאות USB מסוג A או מיקרו-AB ליציאת Type-C (שקע).
- [C-SR] מומלץ מאוד להטמיע את מחלקת האודיו של USB כפי שמתואר במסמכי התיעוד של Android SDK.
- צריך לתמוך בטעינת מכשיר הציוד ההיקפי שמחובר ב-USB בזמן שהוא במצב מארח. צריך לפרסם זרם מקור של לפחות 1.5A כפי שמפורט בקטע Termination Parameters (פרמטרים של סיום) במפרט של כבל ומחבר USB Type-C, גרסה 1.2 למחברי USB Type-C, או להשתמש בטווח זרם הפלט של יציאת טעינה במורד הזרם (CDP) כפי שמפורט במפרט של טעינת סוללה ב-USB, גרסה 1.2 למחברי Micro-AB.
- צריכים להטמיע את תקני USB Type-C ולתמוך בהם.
אם הטמעות של מכשירים כוללות יציאת USB שתומכת במצב מארח ובמחלקה של אודיו USB, הן:
- [C-2-1] חובה לתמוך בממשק אנושי (HID) של USB.
- [C-2-2] המכשיר חייב לתמוך בזיהוי ובמיפוי של שדות הנתונים הבאים של HID שצוינו בטבלאות השימוש ב-USB HID ובבקשת השימוש בפקודה קולית לקבועי
KeyEvent
כמו שמוצג בהמשך:- דף שימוש (0xC) מזהה שימוש (0x0CD):
KEYCODE_MEDIA_PLAY_PAUSE
- Usage Page (0xC) Usage ID (0x0E9):
KEYCODE_VOLUME_UP
- דף שימוש (0xC) מזהה שימוש (0x0EA):
KEYCODE_VOLUME_DOWN
- דף שימוש (0xC) מזהה שימוש (0x0CF):
KEYCODE_VOICE_ASSIST
- דף שימוש (0xC) מזהה שימוש (0x0CD):
אם הטמעות של מכשירים כוללות יציאת USB שתומכת במצב מארח ובמסגרת Storage Access Framework (SAF), הן:
- [C-3-1] המכשיר חייב לזהות מכשירי MTP (פרוטוקול העברת מדיה) שמחוברים מרחוק ולאפשר גישה לתוכן שלהם באמצעות כוונות
ACTION_GET_CONTENT
,ACTION_OPEN_DOCUMENT
ו-ACTION_CREATE_DOCUMENT
.
אם הטמעות של מכשירים כוללות יציאת USB שתומכת במצב מארח וב-USB-C, הן:
- [C-4-1] חובה להטמיע פונקציונליות של יציאה עם תפקיד כפול, כפי שמוגדר במפרט USB Type-C (סעיף 4.5.1.3.3).
- [SR] מומלץ מאוד לתמוך ב-DisplayPort, מומלץ לתמוך בשיעורי העברת נתונים ב-USB SuperSpeed, ומומלץ מאוד לתמוך באספקת חשמל להחלפת תפקידים של נתונים וחשמל.
- [SR] מומלץ מאוד לא לתמוך במצב אביזר של מתאם אודיו, כפי שמתואר בנספח א' של המפרט של כבל ומחבר USB Type-C, גרסה 1.2.
- מומלץ להטמיע את המודל Try.* המתאים ביותר לגורם הצורה של המכשיר. לדוגמה, מכשיר נייד צריך להטמיע את מודל Try.SNK.
7.8. אודיו
7.8.1. מיקרופון
אם המיקרופון כלול בהטמעות של המכשיר, הוא:
- [C-1-1] חובה לדווח על קבוע התכונה
android.hardware.microphone
. - [C-1-2] חובה לעמוד בדרישות בנוגע להקלטות אודיו שמפורטות בקטע 5.4.
- [C-1-3] המכשיר חייב לעמוד בדרישות בנוגע לזמן אחזור אודיו שמפורטות בסעיף 5.6.
- [SR] מומלץ מאוד לתמוך בהקלטה של תדרים קרובים לאולטרסאונד, כפי שמתואר בסעיף 7.8.3.
אם בהטמעות של מכשירים לא נכלל מיקרופון, המכשירים:
- [C-2-1] אסור לדווח על הקבוע של התכונה
android.hardware.microphone
. - [C-2-2] חובה להטמיע את ה-API להקלטת אודיו לפחות כפעולות שלא עושות כלום, בהתאם לסעיף 7.
7.8.2. יעד השמע
אם יישומי המכשיר כוללים רמקול או יציאת פלט אודיו/מולטימדיה לציוד היקפי של פלט אודיו, כמו שקע אודיו 3.5 מ"מ עם 4 מוליכים או יציאת מצב מארח USB באמצעות מחלקת אודיו USB, הם:
- [C-1-1] חובה לדווח על קבוע התכונה
android.hardware.audio.output
. - [C-1-2] חובה לעמוד בדרישות בנוגע להפעלת אודיו שמפורטות בקטע 5.5.
- [C-1-3] המכשיר חייב לעמוד בדרישות בנוגע לזמן אחזור אודיו שמפורטות בסעיף 5.6.
- [SR] מומלץ מאוד לתמוך בהפעלה של תדרים קרובים לאולטרסאונד, כפי שמתואר בסעיף 7.8.3.
אם ההטמעות של המכשירים לא כוללות רמקול או יציאת פלט אודיו, הן:
- [C-2-1] אסור לדווח על התכונה
android.hardware.audio.output
. - [C-2-2] חובה להטמיע את ממשקי ה-API שקשורים לפלט אודיו כפעולות שלא עושות כלום לפחות.
לצורך הסעיף הזה, 'יציאת פלט' היא ממשק פיזי כמו שקע אודיו של 3.5 מ"מ, HDMI או יציאת מצב מארח USB עם מחלקת אודיו USB. תמיכה בפלט אודיו באמצעות פרוטוקולים מבוססי רדיו כמו Bluetooth, Wi-Fi או רשת סלולרית לא נחשבת כהכללה של 'יציאת פלט'.
7.8.2.1. יציאות אודיו אנלוגיות
כדי שמכשירים יהיו תואמים לאוזניות ולאביזרי אודיו אחרים עם תקע אודיו בגודל 3.5 מ"מ בכל מערכת האקולוגית של Android, אם ההטמעות של המכשירים כוללות יציאת אודיו אנלוגית אחת או יותר, הן צריכות:
- [C-SR] מומלץ מאוד לכלול לפחות יציאת אודיו אחת מסוג שקע אודיו 3.5 מ"מ עם 4 מוליכים.
אם הטמעות המכשיר כוללות שקע אודיו בגודל 3.5 מ"מ עם 4 מוליכים, הן:
- [C-1-1] חובה לתמוך בהפעלת אודיו באוזניות סטריאו ובדיבוריות סטריאו עם מיקרופון.
- [C-1-2] חובה לתמוך בתקעי אודיו TRRS עם סדר הפינים של CTIA.
- [C-1-3] חובה לתמוך בזיהוי ובמיפוי לקודי המקשים של 3 טווחי עכבה שווים בין המיקרופון לבין מוליכי הארקה בתקע האודיו:
-
70 אוהם או פחות:
KEYCODE_HEADSETHOOK
-
210-290 אוהם:
KEYCODE_VOLUME_UP
-
360-680 אוהם:
KEYCODE_VOLUME_DOWN
-
70 אוהם או פחות:
- [C-1-4] חובה להפעיל את
ACTION_HEADSET_PLUG
כשמחברים את התקע, אבל רק אחרי שכל המגעים בתקע נוגעים בפלחים הרלוונטיים שלהם בשקע. - [C-1-5] חובה שתהיה אפשרות להפעיל לפחות 150 mV ± 10% של מתח יציאה בעכבת רמקול של 32 אוהם.
- [C-1-6] חובה להשתמש במתח הטיה למיקרופון בין 1.8 V ל-2.9 V.
- [C-1-7] המכשיר חייב לזהות את קוד המקש ולמפות אותו לטווח הבא של עכבה שוות ערך בין המיקרופון לבין מוליכי הארקה בתקע האודיו:
-
110-180 אוהם:
KEYCODE_VOICE_ASSIST
-
110-180 אוהם:
- [C-SR] מומלץ מאוד לתמוך בתקעים לאודיו עם סדר הפינים של OMTP.
- [C-SR] מומלץ מאוד לתמוך בהקלטת אודיו מאוזניות סטריאו עם מיקרופון.
אם הטמעות המכשירים כוללות שקע אודיו 3.5 מ"מ עם 4 מוליכים ותמיכה במיקרופון, והן משדרות את android.intent.action.HEADSET_PLUG
עם ערך המיקרופון הנוסף שמוגדר כ-1, הן:
- [C-2-1] המכשיר חייב לתמוך בזיהוי של מיקרופון באביזר אודיו מחובר.
7.8.2.2. יציאות אודיו דיגיטליות
כדי להיות תואם לאוזניות ולאביזרי אודיו אחרים שמשתמשים במחברי USB-C ומיישמים (מחלקה של אודיו USB) במערכת האקולוגית של Android, כפי שמוגדר במפרט של אוזניות USB ל-Android.
בקטע 2.2.1 מפורטות הדרישות הספציפיות למכשירים.
7.8.3. תדרים קרובים לאולטרסאונד
אודיו בתדר קרוב לאולטרסאונד הוא פס התדרים מ-18.5kHz עד 20kHz.
הטמעות במכשיר:
- חובה לדווח בצורה נכונה על התמיכה ביכולת של אודיו בתדר קרוב לאולטרסאונד באמצעות AudioManager.getProperty API באופן הבא:
אם הערך של PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND
הוא true, מקורות האודיו VOICE_RECOGNITION
ו-UNPROCESSED
חייבים לעמוד בדרישות הבאות:
- [C-1-1] תגובת ההספק הממוצע של המיקרופון בפס התדרים 18.5 kHz עד 20 kHz לא יכולה להיות נמוכה ביותר מ-15 dB מהתגובה ב-2 kHz.
- [C-1-2] יחס האות לרעש הלא משוקלל של המיקרופון בטווח של 18.5kHz עד 20kHz עבור צליל של 19kHz ב--26 dBFS חייב להיות לפחות 50dB.
אם PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND
הוא true:
- [C-2-1] התגובה הממוצעת של הרמקול בטווח 18.5 kHz עד 20 kHz לא יכולה להיות נמוכה מ-40 dB מתחת לתגובה ב-2 kHz.
7.8.4. תקינות האות
הטמעות במכשיר:
- מומלץ לספק נתיב אות אודיו ללא תקלות לזרמי קלט ופלט במכשירים ניידים, כפי שמוגדר על ידי אפס תקלות שנמדדו במהלך בדיקה של דקה אחת לכל נתיב. בודקים באמצעות [OboeTester] (https://github.com/google/oboe/tree/master/apps/OboeTester) 'בדיקת תקלות אוטומטית'.
הבדיקה דורשת מתאם ללולאת אודיו, שמשמש ישירות בשקע 3.5 מ"מ, או בשילוב עם מתאם USB-C ל-3.5 מ"מ. מומלץ לבדוק את כל יציאות האודיו.
נכון לעכשיו, OboeTester תומך בנתיבי AAudio, ולכן צריך לבדוק את השילובים הבאים לגבי תקלות באמצעות AAudio:
מצב ביצועים | שיתוף | תדירות הדגימה של הפלט | In Chans | Out Chans |
---|---|---|---|---|
LOW_LATENCY | בלעדי | לא צוין | 1 | 2 |
LOW_LATENCY | בלעדי | לא צוין | 2 | 1 |
LOW_LATENCY | משותף | לא צוין | 1 | 2 |
LOW_LATENCY | משותף | לא צוין | 2 | 1 |
ללא | משותף | 48000 | 1 | 2 |
ללא | משותף | 48000 | 2 | 1 |
ללא | משותף | 44100 | 1 | 2 |
ללא | משותף | 44100 | 2 | 1 |
ללא | משותף | 16000 | 1 | 2 |
ללא | משותף | 16000 | 2 | 1 |
סטרימינג אמין צריך לעמוד בקריטריונים הבאים של יחס אות לרעש (SNR) ועיוות הרמוני כולל (THD) עבור סינוס של 2,000 הרץ.
מתמר | THD | SNR |
---|---|---|
רמקול מובנה ראשי, שנמדד באמצעות מיקרופון חיצוני להשוואה | < 3.0% | 50dB ומעלה |
מיקרופון מובנה ראשי, שנמדד באמצעות רמקול חיצוני להשוואה | < 3.0% | 50dB ומעלה |
שקעי אנלוג 3.5 מ"מ מובנים, שנבדקו באמצעות מתאם loopback | פחות מ-1% | >= 60 dB |
מתאמי USB שסופקו עם הטלפון, נבדקו באמצעות מתאם לולאה חוזרת | < 1.0% | >= 60 dB |
7.9. מציאות מדומה
Android כולל ממשקי API וכלים לבניית אפליקציות של מציאות מדומה (VR), כולל חוויות VR בנייד באיכות גבוהה. ההטמעות במכשירים חייבות להטמיע את ממשקי ה-API ואת ההתנהגויות האלה בצורה נכונה, כפי שמפורט בקטע הזה.
7.9.1. מצב מציאות מדומה
Android כולל תמיכה במצב VR, תכונה שמטפלת בעיבוד סטריאוסקופי של הודעות ומשביתה רכיבי ממשק משתמש מונוקולריים של המערכת בזמן שאפליקציית VR נמצאת במוקד המשתמש.
7.9.2. מצב מציאות מדומה – ביצועים גבוהים
אם הטמעות המכשירים תומכות במצב VR, הן:
- [C-1-1] המכשיר חייב לכלול לפחות 2 ליבות פיזיות.
- [C-1-2] חובה להצהיר על התכונה
android.hardware.vr.high_performance
. - [C-1-3] חובה לתמוך במצב ביצועים רציף.
- [C-1-4] חובה לתמוך ב-OpenGL ES 3.2.
- [C-1-5] חובה לתמוך ב-
android.hardware.vulkan.level
0. - מומלץ לתמוך ב-
android.hardware.vulkan.level
1 ומעלה. - [C-1-6] חובה להטמיע את
EGL_KHR_mutable_render_buffer
,EGL_ANDROID_front_buffer_auto_refresh
,EGL_ANDROID_get_native_client_buffer
,EGL_KHR_fence_sync
,EGL_KHR_wait_sync
,EGL_IMG_context_priority
,EGL_EXT_protected_content
,EGL_EXT_image_gl_colorspace
ולחשוף את התוספים ברשימת התוספים הזמינים של EGL. - [C-1-8] חובה להטמיע את
GL_EXT_multisampled_render_to_texture2
,GL_OVR_multiview
,GL_OVR_multiview2
,GL_OVR_multiview_multisampled_render_to_texture
,GL_EXT_protected_textures
ולחשוף את התוספים ברשימת התוספים הזמינים של GL. - [C-SR] מומלץ מאוד להטמיע את
GL_EXT_external_buffer
,GL_EXT_EGL_image_array
ולחשוף את התוספים ברשימת התוספים הזמינים של GL. - [C-SR] מומלץ מאוד לתמוך ב-Vulkan 1.1.
- [C-SR] מומלץ מאוד להטמיע את
VK_ANDROID_external_memory_android_hardware_buffer
,VK_GOOGLE_display_timing
ו-VK_KHR_shared_presentable_image
, ולחשוף אותם ברשימת התוספים הזמינים של Vulkan. - [C-SR] מומלץ מאוד לחשוף לפחות משפחת תורים אחת של Vulkan שבה
flags
מכיל גם אתVK_QUEUE_GRAPHICS_BIT
וגם אתVK_QUEUE_COMPUTE_BIT
, ו-queueCount
הוא לפחות 2. - [C-1-7] המעבד הגרפי והמסך חייבים להיות מסוגלים לסנכרן את הגישה למאגר הקדמי המשותף, כך שהצגת תוכן VR בטכנולוגיית רינדור לסירוגין של העין בקצב של 60fps עם שני הקשרים של רינדור תתבצע ללא ארטיפקטים גלויים של קריעת מסך.
- [C-1-9] חובה להטמיע תמיכה בדגלים
AHardwareBuffer
AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER
, AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA
ו-AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT
כפי שמתואר ב-NDK. - [C-1-10] חובה להטמיע תמיכה ב-
AHardwareBuffer
עם כל שילוב של דגלי השימושAHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT
, AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE
, AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT
לפחות בפורמטים הבאים:AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM
, AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM
, AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM
, AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT
. - [C-SR] מומלץ מאוד לתמוך בהקצאה של
AHardwareBuffer
עם יותר משכבה אחת ועם סימונים ופורמטים שצוינו ב-C-1-10. - [C-1-11] המכשיר חייב לתמוך בפענוח H.264 ברזולוציה של לפחות 3840 x 2160 בקצב של 30fps, בדחיסה ממוצעת של 40Mbps (שווה ל-4 מקרים של 1920 x1080 בקצב של 30fps – 10Mbps או ל-2 מקרים של 1920 x 1080 בקצב של 60fps – 20Mbps).
- [C-1-12] חובה לתמוך ב-HEVC וב-VP9, חובה להיות מסוגל לפענח לפחות 1920 x 1080 ב-30 fps בדחיסה ממוצעת של 10 Mbps, ומומלץ להיות מסוגל לפענח 3840 x 2160 ב-30 fps – 20 Mbps (שווה ערך ל-4 מקרים של 1920 x 1080 ב-30 fps – 5 Mbps).
- [C-1-13] המכשיר חייב לתמוך ב-API
HardwarePropertiesManager.getDeviceTemperatures
ולהחזיר ערכים מדויקים של טמפרטורת העור. - [C-1-14] חובה להטמיע מסך, והרזולוציה שלו חייבת להיות 1920 x 1080 לפחות.
- [C-SR] מומלץ מאוד להשתמש ברזולוציית תצוגה של 2560 x 1440 לפחות.
- [C-1-15] התצוגה חייבת להתעדכן בקצב של 60 הרץ לפחות בזמן שהמכשיר במצב VR.
- [C-1-17] המסך חייב לתמוך במצב של שימור נמוך עם שימור של ≤ 5 מילישניות. שימור מוגדר כמשך הזמן שבו פיקסל פולט אור.
- [C-1-18] חובה לתמוך ב-Bluetooth 4.2 וב-Bluetooth LE Data Length Extension section 7.4.3.
- [C-1-19] חובה לתמוך בסוג הערוץ הישיר ולדווח עליו בצורה תקינה עבור כל סוגי החיישנים הבאים שמוגדרים כברירת מחדל:
-
TYPE_ACCELEROMETER
-
TYPE_ACCELEROMETER_UNCALIBRATED
-
TYPE_GYROSCOPE
-
TYPE_GYROSCOPE_UNCALIBRATED
-
TYPE_MAGNETIC_FIELD
-
TYPE_MAGNETIC_FIELD_UNCALIBRATED
-
- [C-SR] מומלץ מאוד לתמוך בסוג הערוץ הישיר
TYPE_HARDWARE_BUFFER
לכל סוגי הערוצים הישירים שמופיעים למעלה. - [C-1-21] המכשיר חייב לעמוד בדרישות שקשורות לג'ירוסקופ, למד תאוצה ולמגנטומטר עבור
android.hardware.hifi_sensors
, כפי שמפורט בסעיף 7.3.9. - [C-SR] מומלץ מאוד לתמוך בתכונה
android.hardware.sensor.hifi_sensors
. - [C-1-22] זמן האחזור הכולל מהתנועה ועד לפוטון לא יכול להיות גבוה מ-28 מילישניות.
- [C-SR] מומלץ מאוד שזמן האחזור הכולל מהתנועה ועד לפוטון לא יהיה גבוה מ-20 מילישניות.
- [C-1-23] חובה לכלול יחס מסגרת ראשונה, שהוא היחס בין בהירות הפיקסלים במסגרת הראשונה אחרי מעבר משחור ללבן, לבין בהירות הפיקסלים הלבנים במצב יציב, של לפחות 85%.
- [C-SR] מומלץ מאוד שיהיה יחס של לפחות 90% בין המסגרת הראשונה לבין שאר המסגרות.
- יכול להיות שהמערכת תספק ליבה בלעדית לאפליקציה שפועלת בחזית, ויכול להיות שהיא תתמוך ב-API
Process.getExclusiveCores
כדי להחזיר את מספרי ליבות ה-CPU שבלעדיות לאפליקציה המובילה שפועלת בחזית.
אם יש תמיכה בשימוש בלעדי בליבה, אז הליבה:
- [C-2-1] אסור לאפשר הפעלה של תהליכים אחרים במרחב המשתמש (מלבד מנהלי התקנים של מכשירים שמשמשים את האפליקציה), אבל מותר לאפשר הפעלה של תהליכי ליבה מסוימים לפי הצורך.
8. ביצועים וצריכת חשמל
קריטריונים מסוימים של ביצועים וצריכת חשמל מינימליים הם חיוניים לחוויית המשתמש, ומשפיעים על הנחות הבסיס שמפתחים מניחים כשהם מפתחים אפליקציה.
8.1. עקביות חוויית המשתמש
אפשר לספק למשתמש הקצה ממשק משתמש חלק אם יש דרישות מינימליות מסוימות כדי להבטיח קצב פריימים עקבי וזמני תגובה מהירים לאפליקציות ולמשחקים. הטמעות במכשירים, בהתאם לסוג המכשיר, עשויות לכלול דרישות מדידות לגבי זמן האחזור של ממשק המשתמש ומעבר בין משימות, כפי שמתואר בקטע 2.
8.2. ביצועי גישה לקובץ I/O
הגדרת בסיס משותף לביצועים עקביים של גישה לקבצים באחסון הנתונים הפרטי של האפליקציה (מחיצת /data
) מאפשרת למפתחי אפליקציות להגדיר ציפייה מתאימה שתעזור להם בתכנון התוכנה. הטמעות במכשירים, בהתאם לסוג המכשיר, עשויות לכלול דרישות מסוימות שמתוארות בקטע 2 עבור פעולות הקריאה והכתיבה הבאות:
- ביצועי כתיבה רציפה. הבדיקה מתבצעת על ידי כתיבת קובץ בגודל 256MB באמצעות מאגר זמני לכתיבה בגודל 10MB.
- ביצועים של כתיבה אקראית. הבדיקה מתבצעת על ידי כתיבת קובץ בגודל 256MB באמצעות מאגר כתיבה בגודל 4KB.
- ביצועים של קריאה רציפה. הבדיקה מתבצעת על ידי קריאת קובץ בגודל 256MB באמצעות מאגר כתיבה בגודל 10MB.
- ביצועים של קריאה אקראית. הבדיקה מתבצעת על ידי קריאת קובץ בגודל 256MB באמצעות מאגר כתיבה בגודל 4KB.
8.3. מצבי חיסכון באנרגיה
אם הטמעות של מכשירים כוללות תכונות לשיפור ניהול צריכת החשמל במכשיר, שנכללות ב-AOSP או מרחיבות את התכונות שנכללות ב-AOSP, הן:
- [C-1-1] אסור לסטות מההטמעה של AOSP לגבי ההפעלה, התחזוקה, האלגוריתמים של ההתעוררות והשימוש בהגדרות מערכת גלובליות של מצב המתנה של האפליקציה ומצבי חיסכון בסוללה.
- [C-1-2] אסור לסטות מההטמעה של AOSP לשימוש בהגדרות גלובליות לניהול ההגבלה של משימות, אזעקות ורשתות עבור אפליקציות בכל דלי של מצב המתנה של אפליקציות.
- [C-1-3] אסור לסטות מההטמעה של AOSP לגבי מספר הדליים של מצב המתנה של האפליקציה שמשמשים למצב המתנה של האפליקציה.
- [C-1-4] חובה להטמיע App Standby Buckets ו-Doze כמו שמתואר בניהול צריכת חשמל.
- [C-1-5] חובה להחזיר
true
עבורPowerManager.isPowerSaveMode()
כשהמכשיר נמצא במצב חיסכון באנרגיה. - [C-SR] מומלץ מאוד לספק למשתמשים אפשרות להפעיל ולהשבית את התכונה לחיסכון בסוללה.
- [C-SR] מומלץ מאוד לספק למשתמשים אפשרות להצגת כל האפליקציות שמוחרגות ממצב המתנה של האפליקציה וממצב שינה לחיסכון באנרגיה.
בנוסף למצבי חיסכון באנרגיה, הטמעות של מכשירי Android יכולות להטמיע חלק ממצבי השינה או את כולם, מתוך 4 מצבי השינה שמוגדרים על ידי Advanced Configuration and Power Interface (ACPI).
אם הטמעות של מכשירים מטמיעות מצבי הפעלה S4 כפי שמוגדר על ידי ACPI, הן:
- [C-1-1] המכשיר חייב להיכנס למצב הזה רק אחרי שהמשתמש ביצע פעולה מפורשת כדי להעביר את המכשיר למצב לא פעיל (למשל, סגירת מכסה שהוא חלק פיזי מהמכשיר או כיבוי של רכב או טלוויזיה) ולפני שהמשתמש מפעיל מחדש את המכשיר (למשל, פתיחת המכסה או הפעלה מחדש של הרכב או הטלוויזיה).
אם הטמעות של מכשירים מטמיעות מצבי הפעלה של S3 כפי שמוגדרים ב-ACPI, הן:
-
[C-2-1] המכשיר חייב לעמוד בדרישה C-1-1 שלמעלה, או שהוא חייב להיכנס למצב S3 רק כשאין צורך במשאבי המערכת (למשל המסך, המעבד) באפליקציות של צד שלישי.
לעומת זאת, המערכת חייבת לצאת ממצב S3 כשיישומים של צד שלישי צריכים את משאבי המערכת, כפי שמתואר ב-SDK הזה.
לדוגמה, אם אפליקציות צד שלישי שולחות בקשה להשאיר את המסך דולק באמצעות
FLAG_KEEP_SCREEN_ON
או להשאיר את המעבד פועל באמצעותPARTIAL_WAKE_LOCK
, המכשיר לא יכול להיכנס למצב S3, אלא אם המשתמש ביצע פעולה מפורשת כדי להעביר את המכשיר למצב לא פעיל, כפי שמתואר ב-C-1-1. לעומת זאת, בזמן שמשימה שאפליקציות צד שלישי מיישמות באמצעות JobScheduler מופעלת או כששירות העברת ההודעות בענן ב-Firebase מועבר לאפליקציות צד שלישי, המכשיר חייב לצאת ממצב S3, אלא אם המשתמש העביר את המכשיר למצב לא פעיל. אלו לא דוגמאות מקיפות, וב-AOSP מיושמים אותות השכמה רבים שמפעילים השכמה מהמצב הזה.
8.4. דיווח על צריכת חשמל
דיווח מדויק יותר על צריכת החשמל מספק למפתחי האפליקציה תמריצים וכלים לאופטימיזציה של דפוס השימוש בחשמל של האפליקציה.
הטמעות במכשיר:
- [SR] מומלץ מאוד לספק פרופיל צריכת חשמל לכל רכיב שמגדיר את ערך צריכת הזרם של כל רכיב חומרה ואת קצב ניקוז הסוללה המשוער שנגרם על ידי הרכיבים לאורך זמן, כפי שמתועד באתר של פרויקט הקוד הפתוח של Android.
- [SR] מומלץ מאוד לדווח על כל ערכי צריכת החשמל במיליאמפר לשעה (mAh).
- [SR] מומלץ מאוד לדווח על צריכת החשמל של המעבד לכל UID של תהליך. פרויקט הקוד הפתוח של Android עומד בדרישה באמצעות הטמעה של מודול ליבת
uid_cputime
. - [SR] מומלץ מאוד להפוך את נתוני צריכת החשמל האלה לזמינים למפתח האפליקציה באמצעות פקודת ה-shell
adb shell dumpsys batterystats
. - צריך לשייך את צריכת החשמל לרכיב החומרה עצמו אם אי אפשר לשייך אותה לאפליקציה.
8.5. ביצועים עקביים
הביצועים של אפליקציות שפועלות לאורך זמן ודורשות ביצועים גבוהים יכולים להשתנות באופן משמעותי, בגלל אפליקציות אחרות שפועלות ברקע או בגלל הגבלת מהירות המעבד (CPU throttling) עקב מגבלות טמפרטורה. Android כולל ממשקי תכנות, כך שאם המכשיר מסוגל לכך, האפליקציה העליונה בחזית יכולה לבקש מהמערכת לבצע אופטימיזציה של הקצאת המשאבים כדי לטפל בתנודות כאלה.
הטמעות במכשיר:
-
[C-0-1] חובה לדווח על התמיכה במצב ביצועים רציף בצורה מדויקת באמצעות שיטת ה-API
PowerManager.isSustainedPerformanceModeSupported()
. -
צריכה להיות תמיכה במצב ביצועים רציף.
אם הטמעות של מכשירים מדווחות על תמיכה במצב ביצועים רציף, הן:
- [C-1-1] חובה לספק לאפליקציה המובילה בחזית רמת ביצועים עקבית למשך 30 דקות לפחות, כשהאפליקציה מבקשת זאת.
- [C-1-2] חובה לכבד את API
Window.setSustainedPerformanceMode()
וממשקי API קשורים אחרים.
אם הטמעות המכשירים כוללות שתי ליבות CPU או יותר, הן:
- מומלץ לספק לפחות ליבת בלעדית אחת שאפשר לשריין לאפליקציה המובילה שבקדמת המסך.
אם הטמעות במכשירים תומכות בהקצאת ליבה אחת בלעדית לאפליקציה העליונה בחזית, הן:
- [C-2-1] חובה לדווח באמצעות שיטת ה-API
Process.getExclusiveCores()
על מספרי הליבות הבלעדיות שאפשר לשריין עבור האפליקציה המובילה שפועלת בחזית. - [C-2-2] אסור לאפשר תהליכים במרחב המשתמשים, למעט מנהלי ההתקנים שבהם האפליקציה משתמשת כדי לפעול בליבות הבלעדיות, אבל מותר לאפשר לתהליכי ליבה מסוימים לפעול לפי הצורך.
אם הטמעות של מכשירים לא תומכות בליבה בלעדית, הן:
- [C-3-1] חייבת להחזיר רשימה ריקה דרך שיטת ה-API
Process.getExclusiveCores()
.
9. תאימות למודל אבטחה
הטמעות במכשיר:
-
[C-0-1] חובה להטמיע מודל אבטחה שתואם למודל האבטחה של פלטפורמת Android, כפי שמוגדר במסמך העזר בנושא אבטחה והרשאות בממשקי ה-API בתיעוד למפתחי Android.
-
[C-0-2] חובה לתמוך בהתקנה של אפליקציות בחתימה עצמית בלי לדרוש הרשאות או אישורים נוספים מצדדים שלישיים או מרשויות כלשהן. באופן ספציפי, מכשירים תואמים חייבים לתמוך במנגנוני האבטחה שמתוארים בקטעי המשנה הבאים.
9.1. הרשאות
הטמעות במכשיר:
-
[C-0-1] חובה לתמוך במודל ההרשאות של Android כפי שמוגדר במסמכי התיעוד למפתחים של Android. באופן ספציפי, הם חייבים לאכוף כל הרשאה שמוגדרת כפי שמתואר במסמכי ה-SDK. אסור להשמיט, לשנות או להתעלם מהרשאות.
-
יכול להוסיף הרשאות נוספות, בתנאי שמחרוזות מזהי ההרשאות החדשות לא נמצאות במרחב השמות
android.\*
. -
[C-0-2] הרשאות עם
protectionLevel
שלPROTECTION_FLAG_PRIVILEGED
חייבות להינתן רק לאפליקציות שהותקנו מראש בנתיבי ההרשאות המיוחדות של תמונת המערכת, ובקבוצת המשנה של ההרשאות שנוספו לרשימת ההיתרים באופן מפורש לכל אפליקציה. ההטמעה של AOSP עומדת בדרישה הזו על ידי קריאה של ההרשאות שנוספו לרשימת ההיתרים לכל אפליקציה מהקבצים בנתיבetc/permissions/
, ושימוש בנתיבsystem/priv-app
כנתיב ההרשאות המיוחדות.
הרשאות עם רמת הגנה מסוכנת הן הרשאות בזמן ריצה. אפליקציות עם targetSdkVersion
> 22 מבקשות אותן בזמן הריצה.
הטמעות במכשיר:
- [C-0-3] חובה להציג למשתמש ממשק ייעודי שבו הוא יכול להחליט אם להעניק את ההרשאות המבוקשות בזמן הריצה, וגם לספק למשתמש ממשק לניהול הרשאות בזמן הריצה.
- [C-0-4] חובה להטמיע ממשק משתמש אחד בלבד.
- [C-0-5] אסור להעניק הרשאות בתחילת ההפעלה לאפליקציות שהותקנו מראש, אלא אם:
- אפשר לקבל את הסכמת המשתמש לפני שהאפליקציה משתמשת בנתונים.
- ההרשאות שבתחילת ההפעלה משויכות לתבנית של intent שהאפליקציה שהותקנה מראש מוגדרת כ-handler ברירת המחדל שלה.
- [C-0-6] חובה להעניק את ההרשאה
android.permission.RECOVER_KEYSTORE
רק לאפליקציות מערכת שרושמות סוכן שחזור מאובטח כראוי. סוכן שחזור מאובטח מוגדר כסוכן תוכנה במכשיר שמסתנכרן עם אחסון מרוחק מחוץ למכשיר, שמצויד בחומרה מאובטחת עם הגנה ששווה או חזקה יותר מזו שמתוארת ב-Google Cloud Key Vault Service כדי למנוע מתקפות כוח ברוטלי על גורם הידע של מסך הנעילה.
הטמעות במכשיר:
-
[C-0-7] האפליקציה חייבת לפעול בהתאם למאפיינים של הרשאת המיקום ב-Android כשהיא מבקשת את נתוני המיקום או הפעילות הגופנית באמצעות Android API רגיל או מנגנון קנייני. הנתונים האלה כוללים, בין היתר:
- מיקום המכשיר (למשל, קו רוחב וקו אורך).
- מידע שאפשר להשתמש בו כדי לקבוע או להעריך את מיקום המכשיר (למשל, SSID, BSSID, מזהה תא, סריקות Bluetooth או מיקום הרשת שהמכשיר מחובר אליה).
- הפעילות הגופנית של המשתמש או סיווג הפעילות הגופנית.
באופן ספציפי יותר, הטמעות של מכשירים:
- [C-0-8] חובה לקבל את הסכמת המשתמשים כדי לאפשר לאפליקציה לגשת למיקום או לנתוני הפעילות הגופנית.
- [C-0-9] חובה להעניק הרשאה בזמן ריצה רק לאפליקציה שיש לה הרשאה מספקת כפי שמתואר ב-SDK. לדוגמה, TelephonyManager#getServiceState דורשת
android.permission.ACCESS_FINE_LOCATION
).
אפשר לסמן הרשאות כמוגבלות כדי לשנות את אופן הפעולה שלהן.
-
[C-0-10] אסור להעניק לאפליקציה הרשאות שמסומנות בדגל
hardRestricted
, אלא אם:- קובץ ה-APK של האפליקציה נמצא במחיצת המערכת.
- המשתמש מקצה לאפליקציה תפקיד שמשויכות אליו הרשאות
hardRestricted
. - תוכנת ההתקנה מעניקה את
hardRestricted
לאפליקציה. - לאפליקציה ניתנת ההרשאה
hardRestricted
בגרסה קודמת של Android.
-
[C-0-11] אפליקציות שמחזיקות בהרשאה
softRestricted
חייבות לקבל רק גישה מוגבלת, ואסור להן לקבל גישה מלאה עד שהן יתווספו לרשימת ההיתרים כפי שמתואר ב-SDK. הגישה המלאה והמוגבלת מוגדרות לכל הרשאהsoftRestricted
(לדוגמה,WRITE_EXTERNAL_STORAGE
ו-READ_EXTERNAL_STORAGE
).
אם הטמעות המכשירים כוללות אפליקציה שהותקנה מראש או אם רוצים לאפשר לאפליקציות צד שלישי לגשת לסטטיסטיקות השימוש, צריך:
- [SR] מומלץ מאוד לספק מנגנון שנגיש למשתמשים כדי להעניק או לבטל גישה לנתונים הסטטיסטיים של השימוש בתגובה לכוונת
android.settings.ACTION_USAGE_ACCESS_SETTINGS
עבור אפליקציות שמצהירות על ההרשאהandroid.permission.PACKAGE_USAGE_STATS
.
אם הטמעות במכשירים נועדו למנוע מאפליקציות כלשהן, כולל אפליקציות שהותקנו מראש, לגשת לנתוני השימוש, הן:
- [C-1-1] עדיין חייבת להיות פעילות שמטפלת בתבנית הכוונה
android.settings.ACTION_USAGE_ACCESS_SETTINGS
, אבל היא חייבת להיות מיושמת כפעולה שלא עושה כלום, כלומר שתהיה לה התנהגות שוות ערך לזו שמתרחשת כשהמשתמש מסרב להעניק גישה.
9.2. UID ובידוד תהליכים
הטמעות במכשיר:
- [C-0-1] המכשיר חייב לתמוך במודל ארגז החול של אפליקציות Android, שבו כל אפליקציה פועלת כמזהה משתמש (UID) ייחודי בסגנון Unix ובתהליך נפרד.
- [C-0-2] המערכת חייבת לתמוך בהרצת כמה אפליקציות עם אותו מזהה משתמש ב-Linux, בתנאי שהאפליקציות חתומות ומבונות בצורה נכונה, כפי שמוגדר בהפניה בנושא אבטחה והרשאות.
9.3. הרשאות במערכת הקבצים
הטמעות במכשיר:
- [C-0-1] חובה לתמוך במודל ההרשאות לגישה לקבצים ב-Android, כפי שמוגדר בהפניה בנושא אבטחה והרשאות.
9.4. סביבות הפעלה חלופיות
הטמעות של מכשירים חייבות לשמור על עקביות של מודל האבטחה וההרשאות של Android, גם אם הן כוללות סביבות זמן ריצה שמבצעות אפליקציות באמצעות תוכנה או טכנולוגיה אחרת, ולא באמצעות פורמט קובץ ההפעלה של Dalvik או קוד מקורי. במילים אחרות:
-
[C-0-1] סביבות זמן ריצה חלופיות חייבות להיות אפליקציות ל-Android, ולפעול בהתאם למודל האבטחה הסטנדרטי של Android, כפי שמתואר במקום אחר בסעיף 9.
-
[C-0-2] אין להעניק לסביבות הפעלה חלופיות גישה למשאבים שמוגנים על ידי הרשאות שלא נדרשו בקובץ
AndroidManifest.xml
של סביבת ההפעלה באמצעות המנגנון <uses-permission
>. -
[C-0-3] סביבות ריצה חלופיות לא יכולות לאפשר לאפליקציות להשתמש בתכונות שמוגנות על ידי הרשאות Android שמוגבלות לאפליקציות מערכת.
-
[C-0-4] סביבות זמן ריצה חלופיות חייבות לפעול בהתאם למודל ארגז החול של Android, ואפליקציות מותקנות שמשתמשות בסביבת זמן ריצה חלופית לא יכולות לעשות שימוש חוזר בארגז החול של אף אפליקציה אחרת שמותקנת במכשיר, אלא באמצעות המנגנונים הרגילים של Android של מזהה משתמש משותף ואישור חתימה.
-
[C-0-5] סביבות ריצה חלופיות לא יכולות לפתוח את ארגזי החול שמתאימים לאפליקציות אחרות ל-Android, לתת גישה אליהם או לקבל גישה אליהם.
-
[C-0-6] אסור להפעיל סביבות ריצה חלופיות עם הרשאות של סופר-משתמש (root) או של מזהה משתמש אחר, או להעניק הרשאות כאלה לאפליקציות אחרות.
-
[C-0-7] כשקבצי
.apk
של סביבות ריצה חלופיות נכללים בתמונת המערכת של יישומי מכשירים, הם צריכים להיות חתומים במפתח ששונה מהמפתח שמשמש לחתימה על אפליקציות אחרות שנכללות ביישומי המכשירים. -
[C-0-8] כשמתקינים אפליקציות, סביבות זמן ריצה חלופיות חייבות לקבל את הסכמת המשתמש להרשאות Android שבהן נעשה שימוש באפליקציה.
-
[C-0-9] כשנדרשת לאפליקציה גישה למשאב במכשיר שיש לו הרשאה מקבילה ב-Android (כמו מצלמה, GPS וכו'), סביבת הריצה החלופית חייבת להודיע למשתמש שהאפליקציה תוכל לגשת למשאב הזה.
-
[C-0-10] אם סביבת זמן הריצה לא מתעדת את יכולות האפליקציה באופן הזה, היא חייבת לרשום את כל ההרשאות שניתנו לה בזמן התקנת אפליקציה כלשהי באמצעות זמן הריצה הזה.
-
זמני ריצה חלופיים צריכים להתקין אפליקציות באמצעות
PackageManager
בארגזי חול נפרדים של Android (מזהי משתמש של Linux וכו'). -
יכול להיות שסביבות זמן ריצה חלופיות יספקו ארגז חול יחיד של Android שמשותף לכל האפליקציות שמשתמשות בסביבת זמן הריצה החלופית.
9.5. תמיכה בכמה משתמשים
Android כולל תמיכה בריבוי משתמשים ומספק תמיכה בבידוד מלא של משתמשים.
- הטמעות של מכשירים יכולות להפעיל את התכונה 'משתמשים מרובים' אם הן משתמשות במדיה ניידת לאחסון חיצוני ראשי, אבל לא מומלץ לעשות זאת.
אם יישומי המכשיר כוללים כמה משתמשים, הם:
- [C-1-1] חובה לעמוד בדרישות הבאות שקשורות לתמיכה בריבוי משתמשים.
- [C-1-2] חובה, עבור כל משתמש, להטמיע מודל אבטחה שתואם למודל האבטחה של פלטפורמת Android, כפי שמוגדר במסמך העזר בנושא אבטחה והרשאות בממשקי ה-API.
- [C-1-3] חובה להשתמש בספריות נפרדות ומבודדות של אחסון אפליקציות משותף (שנקראות גם
/sdcard
) לכל מופע משתמש. - [C-1-4] חובה לוודא שאפליקציות שנמצאות בבעלות של משתמש מסוים ופועלות בשמו לא יכולות להציג, לקרוא או לכתוב בקבצים שנמצאים בבעלות של משתמש אחר, גם אם הנתונים של שני המשתמשים מאוחסנים באותו אמצעי אחסון או באותה מערכת קבצים.
- [C-1-5] אם הטמעות המכשיר משתמשות במדיה נשלפת עבור ממשקי ה-API של האחסון החיצוני, המכשיר חייב להצפין את התוכן של כרטיס ה-SD כשהאפשרות 'משתמשים מרובים' מופעלת באמצעות מפתח שמאוחסן רק במדיה לא נשלפת שנגישה רק למערכת. הפעולה הזו תגרום לכך שלא יהיה אפשר לקרוא את המדיה במחשב המארח, ולכן הטמעות של מכשירים יצטרכו לעבור ל-MTP או למערכת דומה כדי לספק למחשבים מארחים גישה לנתונים של המשתמש הנוכחי.
9.6. אזהרה לגבי SMS פרימיום
Android כולל תמיכה באזהרת משתמשים מפני כל הודעת SMS בתשלום יוצאת. הודעות פרימיום SMS הן הודעות טקסט שנשלחות לשירות שרשום אצל ספק, ויכול להיות שהמשתמש יחויב עליהן.
אם הטמעות של מכשירים מצהירות על תמיכה ב-android.hardware.telephony
, הן:
- [C-1-1] חובה להזהיר משתמשים לפני שליחת הודעת SMS למספרים שזוהו על ידי ביטויים רגולריים שמוגדרים בקובץ
/data/misc/sms/codes.xml
במכשיר. פרויקט הקוד הפתוח של Android מספק הטמעה שעומדת בדרישה הזו.
9.7. תכונות אבטחה
הטמעות של מכשירים חייבות להבטיח תאימות לתכונות האבטחה גם בקרנל וגם בפלטפורמה, כפי שמתואר בהמשך.
ארגז החול של Android כולל תכונות שמשתמשות במערכת בקרת הגישה (MAC) של Security-Enhanced Linux (SELinux), בארגז חול של seccomp ובתכונות אבטחה אחרות בקרנל של Linux. הטמעות במכשיר:
- [C-0-1] חובה לשמור על תאימות לאפליקציות קיימות, גם כשמטמיעים את SELinux או תכונות אבטחה אחרות מתחת למסגרת Android.
- [C-0-2] אסור להציג ממשק משתמש גלוי כשמתגלה הפרת אבטחה שנחסמת בהצלחה על ידי תכונת האבטחה שהוטמעה מתחת למסגרת Android, אבל מותר להציג ממשק משתמש גלוי כשמתרחשת הפרת אבטחה שלא נחסמת ומובילה לניצול לרעה מוצלח.
- [C-0-3] אסור לאפשר למשתמש או למפתח האפליקציה להגדיר את SELinux או תכונות אבטחה אחרות שהוטמעו מתחת למסגרת Android.
- [C-0-4] אסור לאפשר לאפליקציה שיכולה להשפיע על אפליקציה אחרת באמצעות API (כמו Device Administration API) להגדיר מדיניות שפוגעת בתאימות.
- [C-0-5] חובה לפצל את מסגרת המדיה למספר תהליכים, כדי לאפשר הענקת גישה מצומצמת יותר לכל תהליך, כפי שמתואר באתר Android Open Source Project.
- [C-0-6] חובה להטמיע מנגנון ארגז חול לאפליקציות של ליבת מערכת ההפעלה, שמאפשר סינון של קריאות למערכת באמצעות מדיניות שניתנת להגדרה מתוכניות מרובות-הליכים. פרויקט הקוד הפתוח של Android (AOSP) עומד בדרישה הזו באמצעות הפעלת seccomp-BPF עם סנכרון של קבוצת השרשורים (TSYNC), כפי שמתואר בקטע בנושא הגדרת ליבת המערכת ב-source.android.com.
שלמות הליבה ותכונות ההגנה העצמית הן חלק בלתי נפרד מאבטחת Android. הטמעות במכשיר:
- [C-0-7] חובה להטמיע מנגנוני הגנה מפני גלישת חוצץ במחסנית של הליבה. דוגמאות למנגנונים כאלה הן
CC_STACKPROTECTOR_REGULAR
ו-CONFIG_CC_STACKPROTECTOR_STRONG
. - [C-0-8] חובה להטמיע הגנות קפדניות על זיכרון הליבה, שבהן קוד הפעלה הוא לקריאה בלבד, נתונים לקריאה בלבד הם לא ניתנים להפעלה ולא ניתנים לכתיבה, ונתונים שניתנים לכתיבה הם לא ניתנים להפעלה (לדוגמה,
CONFIG_DEBUG_RODATA
אוCONFIG_STRICT_KERNEL_RWX
). - [C-0-9] חובה להטמיע בדיקה של גבולות גודל אובייקט סטטיים ודינמיים של עותקים בין מרחב המשתמש ומרחב הליבה (למשל
CONFIG_HARDENED_USERCOPY
) במכשירים שנשלחים במקור עם API ברמה 28 ומעלה. - [C-0-10] אסור להפעיל זיכרון במרחב המשתמשים כשמבצעים פעולות במצב ליבה (למשל, PXN בחומרה או אמולציה באמצעות
CONFIG_CPU_SW_DOMAIN_PAN
אוCONFIG_ARM64_SW_TTBR0_PAN
) במכשירים שנשלחים במקור עם רמת API 28 ומעלה. - [C-0-11] אסור לקרוא או לכתוב בזיכרון של מרחב המשתמשים בקרנל מחוץ לממשקי API רגילים של גישת usercopy (למשל, PAN של חומרה או אמולציה באמצעות
CONFIG_CPU_SW_DOMAIN_PAN
אוCONFIG_ARM64_SW_TTBR0_PAN
) במכשירים שנשלחים במקור עם רמת API 28 ומעלה. - [C-0-12] חובה להטמיע בידוד של טבלת דפים בקרנל אם החומרה פגיעה ב-CVE-2017-5754 בכל המכשירים שנשלחים במקור עם API ברמה 28 ומעלה (לדוגמה,
CONFIG_PAGE_TABLE_ISOLATION
אוCONFIG_UNMAP_KERNEL_AT_EL0
). - [C-0-13] חובה להטמיע חיזוק של חיזוי הסתעפויות אם החומרה פגיעה ל-CVE-2017-5715 בכל המכשירים שנשלחו במקור עם API ברמה 28 ומעלה (לדוגמה,
CONFIG_HARDEN_BRANCH_PREDICTOR
). - [SR] מומלץ מאוד לשמור את נתוני הליבה שנכתבים רק במהלך האתחול, ולסמן אותם כקריאה בלבד אחרי האתחול (למשל
__ro_after_init
). -
[C-SR] מומלץ מאוד לבצע רנדומיזציה של פריסת קוד הליבה והזיכרון, ולהימנע מחשיפות שיפגעו ברנדומיזציה (למשל,
CONFIG_RANDOMIZE_BASE
עם אנטרופיה של טוען האתחול באמצעות/chosen/kaslr-seed Device Tree node
אוEFI_RNG_PROTOCOL
). -
[C-SR] מומלץ מאוד להפעיל את התכונה 'שלמות זרימת הבקרה' (CFI) בליבת המערכת כדי לספק הגנה נוספת מפני התקפות של שימוש חוזר בקוד (למשל,
CONFIG_CFI_CLANG
ו-CONFIG_SHADOW_CALL_STACK
). - [C-SR] מומלץ מאוד לא להשבית את התכונות Control-Flow Integrity (CFI), Shadow Call Stack (SCS) או Integer Overflow Sanitization (IntSan) ברכיבים שהן מופעלות בהם.
- [C-SR] מומלץ מאוד להפעיל CFI, SCS ו-IntSan לכל רכיבי מרחב המשתמשים הנוספים שרגישים לאבטחה, כפי שמוסבר במאמרים בנושא CFI ו-IntSan.
אם הטמעות של מכשירים משתמשות ב-Linux kernel, הן:
- [C-1-1] חובה להטמיע SELinux.
- [C-1-2] חובה להגדיר את SELinux למצב אכיפה גלובלי.
- [C-1-3] חובה להגדיר את כל הדומיינים במצב אכיפה. אסור להשתמש בדומיינים במצב הרשאה, כולל דומיינים שספציפיים למכשיר או לספק.
- [C-1-4] אסור לשנות, להשמיט או להחליף את כללי neverallow שקיימים בתיקייה system/sepolicy שסופקה בפרויקט קוד פתוח של Android (AOSP) במעלה הזרם, והמדיניות חייבת לעבור קומפילציה עם כל כללי neverallow שקיימים, גם עבור דומיינים של AOSP SELinux וגם עבור דומיינים ספציפיים למכשיר או לספק.
- [C-1-5] חובה להריץ אפליקציות של צד שלישי שמטרגטות רמת API 28 ומעלה בארגזי חול של SELinux לכל אפליקציה, עם הגבלות של SELinux לכל אפליקציה בספריית הנתונים הפרטיים של כל אפליקציה.
- מומלץ לשמור את מדיניות SELinux שמוגדרת כברירת מחדל בתיקייה system/sepolicy של פרויקט Android בקוד פתוח, ולהוסיף למדיניות הזו רק את ההגדרות הספציפיות למכשיר.
אם הטמעות המכשירים כבר הושקו בגרסה קודמת של Android ולא עומדות בדרישות [C-1-1] ו-[C-1-5] באמצעות עדכון תוכנת מערכת, הן עשויות להיות פטורות מהדרישות האלה.
אם הטמעות של מכשירים משתמשות בקרנל שאינו Linux, הן:
- [C-2-1] חובה להשתמש במערכת בקרת גישה מחייבת ששווה ל-SELinux.
Android כולל תכונות רבות של הגנה לעומק, שהן חלק בלתי נפרד מאבטחת המכשיר.
9.8. פרטיות
9.8.1. היסטוריית השימוש
מערכת Android שומרת את היסטוריית הבחירות של המשתמש ומנהלת את ההיסטוריה הזו באמצעות UsageStatsManager.
הטמעות במכשיר:
- [C-0-1] חובה לשמור על תקופת שמירה סבירה של היסטוריית המשתמשים.
- [SR] מומלץ מאוד לשמור על תקופת השמירה של 14 ימים כפי שהוגדרה כברירת מחדל בהטמעה של AOSP.
מערכת Android מאחסנת את אירועי המערכת באמצעות המזהים StatsLog
, ומנהלת את ההיסטוריה הזו באמצעות StatsManager
ו-System API IncidentManager
.
הטמעות במכשיר:
- [C-0-2] צריך לכלול רק את השדות שמסומנים ב-
DEST_AUTOMATIC
בדוח האירוע שנוצר על ידי מחלקת System APIIncidentManager
. - [C-0-3] אסור להשתמש במזהי אירועי המערכת כדי לרשום ביומן אירועים אחרים מלבד אלה שמתוארים במסמכי ה-SDK של
StatsLog
. אם מתבצע רישום של אירועי מערכת נוספים, יכול להיות שיוקצה להם מזהה אטום אחר בטווח שבין 100,000 ל-200,000.
9.8.2. ההקלטה התחילה
הטמעות במכשיר:
- [C-0-1] אסור לטעון מראש או להפיץ רכיבי תוכנה מוכנים לשימוש ששולחים את המידע הפרטי של המשתמש (למשל, הקשות על המקשים, טקסט שמוצג במסך, דוח באגים) מהמכשיר ללא הסכמת המשתמש או התראות ברורות ומתמשכות.
-
[C-0-2] חובה להציג הודעה ולבקש הסכמה מפורשת מהמשתמש, שכוללת את אותו נוסח כמו ב-AOSP, בכל פעם שמופעלת הקרנת מסך או הקלטת מסך באמצעות
MediaProjection
או ממשקי API קנייניים. אסור לספק למשתמשים אפשרות להשבית את ההצגה העתידית של בקשת ההסכמה. -
[C-0-3] חובה להציג למשתמש התראה מתמשכת בזמן שהפעלתם העברת מסך או הקלטת מסך. מערכת AOSP עומדת בדרישה הזו על ידי הצגת סמל של התראה פעילה בשורת הסטטוס.
אם הטמעות במכשיר כוללות פונקציונליות במערכת שמצלמת את התוכן שמוצג במסך ו/או מקליטה את זרם האודיו שמופעל במכשיר שלא באמצעות System API ContentCaptureService
, או באמצעים קנייניים אחרים שמתוארים בקטע 9.8.6 בנושא צילום תוכן, הן:
- [C-1-1] חובה להציג למשתמש התראה מתמשכת בכל פעם שהפונקציונליות הזו מופעלת ומבצעת צילום או הקלטה באופן פעיל.
אם הטמעות של מכשירים כוללות רכיב שמופעל מחוץ לקופסה, שיכול להקליט אודיו סביבתי או להקליט את האודיו שמופעל במכשיר כדי להסיק מידע שימושי על ההקשר של המשתמש, הן:
- [C-2-1] אסור לאחסן באחסון קבוע במכשיר או לשדר מהמכשיר את האודיו הגולמי המוקלט או כל פורמט שאפשר להמיר בחזרה לאודיו המקורי או לגרסה כמעט זהה, אלא אם יש הסכמה מפורשת של המשתמש.
9.8.3. קישוריות
אם בהטמעות של מכשירים יש יציאת USB עם תמיכה במצב ציוד היקפי של USB, המכשירים:
- [C-1-1] חובה להציג ממשק משתמש שמבקש את הסכמת המשתמש לפני שמאפשרים גישה לתוכן של האחסון המשותף דרך יציאת ה-USB.
9.8.4. תנועה ברשת
הטמעות במכשיר:
- [C-0-1] חובה להתקין מראש את אותם אישורי הבסיס למאגר רשות האישורים (CA) שמהימן על ידי המערכת כפי שסופק בפרויקט הקוד הפתוח של Android.
- [C-0-2] חובה לשלוח עם מאגר ריק של רשויות אישורים (CA) בסיסיות של משתמשים.
- [C-0-3] חובה להציג למשתמש אזהרה שמציינת שאולי מתבצע מעקב אחרי תעבורת הרשת, כשמוסיפים רשות אישורים בסיסית של משתמש.
אם התנועה במכשיר מנותבת דרך VPN, ההטמעות במכשיר:
- [C-1-1] חובה להציג למשתמש אזהרה שמציינת את אחת מהאפשרויות הבאות:
- יכול להיות שהתנועה ברשת הזו מנוטרת.
- התנועה ברשת מנותבת דרך אפליקציית ה-VPN הספציפית שמספקת את ה-VPN.
אם בהטמעות של מכשירים יש מנגנון שמופעל כברירת מחדל וניתן להשתמש בו מיד, שמנתב את תנועת הנתונים ברשת דרך שרת proxy או שער VPN (לדוגמה, טעינה מראש של שירות VPN עם הרשאה שניתנה ל-android.permission.CONTROL_VPN
), המנגנון הזה:
- [C-2-1] חובה לבקש את הסכמת המשתמש לפני הפעלת המנגנון, אלא אם ה-VPN מופעל על ידי בקר מדיניות המכשיר באמצעות
DevicePolicyManager.setAlwaysOnVpnPackage()
. במקרה כזה , המשתמש לא צריך לספק הסכמה נפרדת, אלא רק לקבל הודעה.
אם הטמעות במכשיר מטמיעות אמצעי נוח למשתמש להפעלה או להשבתה של הפונקציה 'חיבור קבוע ל-VPN' באפליקציית VPN של צד שלישי, הן:
- [C-3-1] חובה להשבית את האפשרות הזו למשתמשים באפליקציות שלא תומכות בשירות VPN בחיבור תמידי בקובץ
AndroidManifest.xml
באמצעות הגדרת המאפייןSERVICE_META_DATA_SUPPORTS_ALWAYS_ON
לערךfalse
.
9.8.5. מזהי המכשיר
הטמעות במכשיר:
- [C-0-1] חובה למנוע גישה למספר הסידורי של המכשיר, ולמספר ה-IMEI/MEID, למספר הסידורי של כרטיס ה-SIM ולמזהה המנוי הבינלאומי לנייד (IMSI) מתוך אפליקציה, אלא אם היא עומדת באחת מהדרישות הבאות:
- היא אפליקציה חתומה של ספק סלולר שאומתה על ידי יצרני מכשירים.
- קיבל את ההרשאה
READ_PRIVILEGED_PHONE_STATE
. - יש לו הרשאות ספק כפי שמוגדרות בUICC Carrier Privileges.
- הוא בעל מכשיר או בעל פרופיל שקיבל את ההרשאה
READ_PHONE_STATE
. - (למספר סידורי של כרטיס SIM או ICCID בלבד) יש דרישה בתקנות המקומיות שהאפליקציה תזהה שינויים בזהות המנוי.
9.8.6. תיעוד תוכן
Android, באמצעות System API ContentCaptureService
, או באמצעים קנייניים אחרים, תומך במנגנון להטמעות במכשירים כדי לתעד את האינטראקציות הבאות בין האפליקציות לבין המשתמש.
- טקסט וגרפיקה שמוצגים במסך, כולל, בין היתר, התראות ונתוני עזרה באמצעות
AssistStructure
API. - נתוני מדיה, כמו אודיו או וידאו, שהוקלטו או הופעלו על ידי המכשיר.
- אירועי קלט (למשל מקלדת, עכבר, תנועה, קול, וידאו ונגישות).
- כל אירוע אחר שאפליקציה מספקת למערכת דרך
Content Capture
API או API קנייני עם יכולות דומות.
אם הטמעות במכשירים מתעדות את הנתונים שלמעלה, הן:
- [C-1-1] חובה להצפין את כל הנתונים האלה כשהם מאוחסנים במכשיר. ההצפנה הזו יכולה להתבצע באמצעות הצפנה מבוססת-קובץ ב-Android, או באמצעות כל אחת מההצפנות שמופיעות כגרסה 26 ומעלה של API, כפי שמתואר ב-Cipher SDK.
- [C-1-2] אסור לגבות נתונים גולמיים או מוצפנים באמצעות שיטות גיבוי של Android או שיטות גיבוי אחרות.
- [C-1-3] חובה לשלוח את כל הנתונים האלה ואת יומן הרישום של המכשיר רק באמצעות מנגנון לשמירה על הפרטיות. המנגנון לשמירה על הפרטיות מוגדר כ"מנגנון שמאפשר ניתוח רק ברמת הצבירה ומונע התאמה בין אירועים שנרשמו ביומן או תוצאות נגזרות לבין משתמשים ספציפיים", כדי למנוע בדיקה של נתונים ברמת המשתמש (למשל, מנגנון שמיושם באמצעות טכנולוגיה של פרטיות דיפרנציאלית כמו
RAPPOR
). - [C-1-4] אסור לשייך נתונים כאלה לזהות של משתמש (למשל
Account
) במכשיר, אלא אם מתקבלת הסכמה מפורשת מהמשתמש בכל פעם שהנתונים משויכים. - [C-1-5] אסור לשתף נתונים כאלה עם אפליקציות אחרות, אלא אם מתקבלת הסכמה מפורשת מהמשתמש בכל פעם שהנתונים משותפים.
- [C-1-6] אם הנתונים מאוחסנים במכשיר בכל צורה שהיא, חובה לספק למשתמשים אפשרות למחוק את הנתונים האלה שנאספים על ידי
ContentCaptureService
או באמצעים קנייניים.
אם הטמעות המכשירים כוללות שירות שמטמיע את System API ContentCaptureService
, או כל שירות קנייני שתופס את הנתונים כפי שמתואר למעלה, הן:
- [C-2-1] אסור לאפשר למשתמשים להחליף את שירות איסוף התוכן באפליקציה או בשירות שניתנים להתקנה על ידי המשתמש, ומותר לאפשר רק לשירות שהותקן מראש לאסוף נתונים כאלה.
- [C-2-2] אסור לאפשר לאפליקציות כלשהן, מלבד מנגנון שירות ללכידת תוכן שהותקן מראש, ללכוד נתונים כאלה.
- [C-2-3] חובה לספק למשתמש אפשרות להשבית את שירות לכידת התוכן.
- [C-2-4] אסור להשמיט את האפשרות למשתמש לנהל את ההרשאות ב-Android שמוחזקות על ידי שירות לכידת התוכן, וצריך לפעול לפי מודל ההרשאות ב-Android כפי שמתואר בקטע 9.1. הרשאה.
-
[C-SR] מומלץ מאוד להפריד בין רכיבי שירות ללכידת תוכן, למשל לא לקשור את השירות או לשתף מזהי תהליכים, מרכיבי מערכת אחרים, למעט:
- טלפוניה, אנשי קשר, ממשק משתמש של המערכת ומדיה
9.8.7. גישה ללוח
הטמעות במכשיר:
- [C-0-1] אסור להחזיר נתונים חתוכים בלוח (למשל, דרך
ClipboardManager
API) אלא אם האפליקציה היא IME ברירת המחדל או האפליקציה שמוצגת כרגע.
9.8.8. מיקום
הטמעות במכשיר:
- [C-0-1] אסור להפעיל או להשבית את הגדרת המיקום של המכשיר ואת הגדרות הסריקה של Wi-Fi או Bluetooth ללא הסכמה מפורשת של המשתמש או ללא פעולה של המשתמש.
- [C-0-2] חובה לספק למשתמש אפשרות גישה למידע שקשור למיקום, כולל בקשות מיקום אחרונות, הרשאות ברמת האפליקציה ושימוש בסריקת Wi-Fi/Bluetooth לקביעת מיקום.
- [C-0-3] חובה לוודא שהאפליקציה שמשתמשת ב-Emergency Location Bypass API [LocationRequest.setLocationSettingsIgnored()] היא סשן חירום שהמשתמש יזם (למשל, חיוג ל-911 או שליחת הודעת טקסט ל-911).
- [C-0-4] חובה לשמור על היכולת של ה-API לעקיפת מיקום לחירום לעקוף את הגדרות המיקום של המכשיר בלי לשנות את ההגדרות.
- [C-0-5] חובה לתזמן התראה שמזכירה למשתמש שאפליקציה ברקע ניגשה למיקום שלו באמצעות ההרשאה [
ACCESS_BACKGROUND_LOCATION
].
9.9 הצפנה של אחסון נתונים
כל המכשירים חייבים לעמוד בדרישות של סעיף 9.9.1. מכשירים שהושקו ברמת API מוקדמת יותר מזו שמופיעה במסמך הזה פטורים מהדרישות של סעיפים 9.9.2 ו-9.9.3. במקום זאת, הם צריכים לעמוד בדרישות של סעיף 9.9 במסמך Android Compatibility Definition שמתאים לרמת ה-API שבה הושק המכשיר.
9.9.1. אתחול ישיר
הטמעות במכשיר:
-
[C-0-1] חובה להטמיע את ממשקי ה-API של מצב אתחול ישיר גם אם אין תמיכה בהצפנת אחסון.
-
[C-0-2] עדיין צריך לשדר את ה-Intents
ACTION_LOCKED_BOOT_COMPLETED
ו-ACTION_USER_UNLOCKED
כדי לסמן לאפליקציות שמודעות לאתחול ישיר שמיקומי האחסון Device Encrypted (DE) ו-Credential Encrypted (CE) זמינים למשתמש.
9.9.2. דרישות הצפנה
הטמעות במכשיר:
- [C-0-1] חובה להצפין את הנתונים הפרטיים של האפליקציה (מחיצת
/data
), וגם את מחיצת האחסון המשותף של האפליקציה (מחיצת/sdcard
) אם היא חלק קבוע שלא ניתן להסרה מהמכשיר. - [C-0-2] חובה להפעיל את הצפנת אחסון הנתונים כברירת מחדל ברגע שהמשתמש מסיים את תהליך ההגדרה של מכשיר חדש.
- [C-0-3] חובה לעמוד בדרישה להצפנת נתונים באחסון שצוינה למעלה באמצעות הטמעה של הצפנה מבוססת-קובץ (FBE).
9.9.3. הצפנה מבוססת קבצים
מכשירים מוצפנים:
- [C-1-1] המכשיר חייב לבצע אתחול בלי לבקש מהמשתמש פרטי כניסה, ולאפשר לאפליקציות שתומכות באתחול ישיר לגשת לאחסון המוצפן של המכשיר (DE) אחרי שידור ההודעה
ACTION_LOCKED_BOOT_COMPLETED
. - [C-1-2] חובה לאפשר גישה לאחסון של נתונים מוצפנים (CE) רק אחרי שהמשתמש ביטל את נעילת המכשיר על ידי הזנת פרטי הכניסה שלו (למשל, קוד גישה, קוד אימות, קו ביטול נעילה או טביעת אצבע) וההודעה
ACTION_USER_UNLOCKED
משודרת. - [C-1-3] אסור להציע שיטה כלשהי לביטול הנעילה של האחסון המוגן באמצעות הצפנה, ללא אישורים שהמשתמש סיפק או מפתח נאמנות רשום.
- [C-1-4] חובה להשתמש בהפעלה מאומתת ולוודא שמפתחות DE קשורים באופן קריפטוגרפי לשורש החומרה של המכשיר.
- [C-1-5] חובה להצפין את תוכן הקובץ באמצעות AES-256-XTS או Adiantum. AES-256-XTS מתייחס לתקן הצפנה מתקדם עם אורך מפתח הצפנה של 256 ביט, שפועל במצב XTS. האורך המלא של המפתח הוא 512 ביט. Adiantum מתייחס ל-Adiantum-XChaCha12-AES, כפי שמפורט בכתובת https://github.com/google/adiantum.
- [C-1-6] חובה להצפין שמות של קבצים באמצעות AES-256-CBC-CTS או Adiantum.
-
[C-1-12] חובה להשתמש ב-AES-256-XTS לתוכן הקובץ וב-AES-256-CBC-CTS לשמות הקבצים (במקום Adiantum) אם למכשיר יש הוראות של תקן ההצפנה המתקדם (AES). הוראות AES הן תוספי הצפנה של ARMv8 במכשירים מבוססי-ARM, או AES-NI במכשירים מבוססי-x86. אם למכשיר אין הוראות AES, יכול להיות שהוא ישתמש ב-Adiantum.
-
המפתחות שמגנים על אזורי האחסון של CE ו-DE:
-
[C-1-7] חובה להיות קשור באופן קריפטוגרפי למאגר מפתחות שמגובה בחומרה.
- [C-1-8] מפתחות CE חייבים להיות מקושרים לפרטי הכניסה של המשתמש למסך הנעילה.
- [C-1-9] מפתחות CE חייבים להיות מקושרים לקוד גישה שמוגדר כברירת מחדל, אם המשתמש לא הגדיר פרטי כניסה למסך הנעילה.
- [C-1-10] חייב להיות ייחודי ומובחן, כלומר, אף מפתח CE או DE של משתמש לא זהה למפתח CE או DE של משתמש אחר.
- [C-1-11] חובה להשתמש בצפנים, באורכי מפתחות ובמצבים הנתמכים.
-
[C-SR] מומלץ מאוד להצפין מטא-נתונים של מערכת קבצים, כמו גודל קבצים, בעלות, מצבים ומאפיינים מורחבים (xattrs), באמצעות מפתח שקשור באופן קריפטוגרפי לשורש האמון של חומרת המכשיר.
-
מומלץ להגדיר שאפליקציות חיוניות שמותקנות מראש (למשל, שעון מעורר, טלפון, Messenger) יפעלו באופן אוטומטי אחרי הפעלה ישירה.
פרויקט הקוד הפתוח של Android מספק הטמעה מועדפת של התכונה הזו על סמך תכונת ההצפנה 'fscrypt' של ליבת Linux.
9.10. תקינות המכשיר
הדרישות הבאות מבטיחות שקיפות לגבי סטטוס תקינות המכשיר. הטמעות במכשיר:
-
[C-0-1] חובה לדווח בצורה נכונה באמצעות השיטה
PersistentDataBlockManager.getFlashLockState()
של System API אם מצב טוען האתחול מאפשר צריבת תמונת המערכת. הסטטוסFLASH_LOCK_UNKNOWN
שמור להטמעות של מכשירים שמשדרגים מגרסה קודמת של Android שבה לא הייתה קיימת שיטת ה-API החדשה הזו של המערכת. -
[C-0-2] המכשיר חייב לתמוך בהפעלה מאומתת כדי לשמור על תקינות המכשיר.
אם יישומי המכשירים כבר הושקו בלי תמיכה בהפעלה מאומתת בגרסה קודמת של Android, ואי אפשר להוסיף תמיכה בתכונה הזו באמצעות עדכון תוכנת מערכת, יכול להיות שהם יהיו פטורים מהדרישה.
הפעלה מאומתת היא תכונה שמבטיחה את התקינות של תוכנת המכשיר. אם ההטמעות במכשיר תומכות בתכונה, הן:
- [C-1-1] חובה להצהיר על ה-feature flag של הפלטפורמה
android.software.verified_boot
. - [C-1-2] חובה לבצע אימות בכל רצף הפעלה.
- [C-1-3] חובה להתחיל את האימות ממפתח חומרה בלתי ניתן לשינוי שהוא שורש האמון, ולהמשיך עד למחיצת המערכת.
- [C-1-4] חובה להטמיע כל שלב באימות כדי לבדוק את השלמות והאותנטיות של כל הבייטים בשלב הבא לפני שמריצים את הקוד בשלב הבא.
- [C-1-5] חובה להשתמש באלגוריתמים חזקים לאימות, כמו ההמלצות הנוכחיות של NIST לגבי אלגוריתמים לגיבוב (SHA-256) וגדלים של מפתחות ציבוריים (RSA-2048).
- [C-1-6] אסור לאפשר אתחול מלא אם אימות המערכת נכשל, אלא אם המשתמש מסכים לנסות לאתחל בכל זאת. במקרה כזה, אסור להשתמש בנתונים מבלוקים של אחסון שלא אומתו.
- [C-1-7] אסור לאפשר שינוי של מחיצות מאומתות במכשיר, אלא אם המשתמש ביטל את הנעילה של טוען האתחול באופן מפורש.
- [C-SR] אם יש במכשיר כמה שבבים נפרדים (למשל רדיו, מעבד תמונה ייעודי), מומלץ מאוד שתהליך האתחול של כל אחד מהשבבים האלה יאמת כל שלב במהלך האתחול.
- [C-1-8] חובה להשתמש באחסון שקשה לזייף: לאחסון המידע אם טוען האתחול לא נעול. אחסון שמונע שינויים לא מורשים פירושו שטוען האתחול יכול לזהות אם בוצעו שינויים לא מורשים באחסון מתוך Android.
- [C-1-9] חובה להציג למשתמש הנחיה בזמן השימוש במכשיר, ולדרוש אישור פיזי לפני מעבר ממצב נעילת תוכנת האתחול למצב ביטול הנעילה של תוכנת האתחול.
- [C-1-10] חובה להטמיע הגנה מפני חזרה לגרסה קודמת למחיצות שמשמשות את Android (לדוגמה, מחיצות אתחול ומערכת) ולהשתמש באחסון שמוכיח שינוי לא מורשה כדי לאחסן את המטא-נתונים שמשמשים לקביעת גרסת מערכת ההפעלה המינימלית המותרת.
- [C-SR] מומלץ מאוד לאמת את כל קובצי ה-APK של אפליקציות עם הרשאות מיוחדות באמצעות שרשרת מהימנות שמושרשת במחיצות שמוגנות על ידי אתחול מאומת.
- [C-SR] מומלץ מאוד לאמת כל ארטיפקט הפעלה שנטען על ידי אפליקציה עם הרשאות מחוץ לקובץ ה-APK שלה (כמו קוד שנטען באופן דינמי או קוד שעבר קומפילציה) לפני שמבצעים אותו, או מומלץ מאוד לא לבצע אותו בכלל.
- מומלץ להטמיע הגנה מפני חזרה לגרסה קודמת לכל רכיב עם קושחה מתמשכת (למשל מודם, מצלמה) ומומלץ להשתמש באחסון עם סימני פתיחה כדי לאחסן את המטא-נתונים שמשמשים לקביעת הגרסה המינימלית המותרת.
אם הטמעות המכשירים כבר הושקו בלי תמיכה בדרישות C-1-8 עד C-1-10 בגרסה קודמת של Android, ואי אפשר להוסיף תמיכה בדרישות האלה באמצעות עדכון תוכנת מערכת, יכול להיות שיהיה פטור מהדרישות.
פרויקט הקוד הפתוח של Android מספק הטמעה מועדפת של התכונה הזו במאגר external/avb/
, שאפשר לשלב אותה בטוען האתחול שמשמש לטעינת Android.
הטמעות במכשיר:
- [C-R] מומלץ לתמוך ב-Android Protected Confirmation API.
אם הטמעות המכשיר תומכות ב-Android Protected Confirmation API, הן:
-
[C-3-1] חובה לדווח על
true
עבורConfirmationPrompt.isSupported()
API. -
[C-3-2] חובה לוודא שקוד שפועל במערכת ההפעלה Android, כולל הליבה שלה, זדוני או אחר, לא יכול ליצור תגובה חיובית ללא אינטראקציה עם המשתמש.
-
[C-3-3] חובה לוודא שהמשתמש יכול לעיין בהודעה המוצגת ולאשר אותה גם אם מערכת ההפעלה Android, כולל ליבת המערכת, נפגעה.
9.11. מפתחות ופרטי כניסה
מערכת Android Keystore מאפשרת למפתחי אפליקציות לאחסן מפתחות קריפטוגרפיים במאגר ולהשתמש בהם בפעולות קריפטוגרפיות באמצעות KeyChain API או Keystore API. הטמעות במכשיר:
- [C-0-1] חובה לאפשר ייבוא או יצירה של לפחות 8,192 מפתחות.
- [C-0-2] האימות במסך הנעילה חייב להגביל את מספר הניסיונות, וחייב לכלול אלגוריתם של נסיגה אקספוננציאלית. אם יש יותר מ-150 ניסיונות כושלים, העיכוב חייב להיות לפחות 24 שעות לכל ניסיון.
- לא צריכה להיות הגבלה על מספר המפתחות שאפשר ליצור
אם הטמעת המכשיר תומכת במסך נעילה מאובטח, היא:
- [C-1-1] חובה לגבות את ההטמעה של מאגר המפתחות באמצעות סביבת ביצוע מבודדת.
- [C-1-2] חובה להטמיע אלגוריתמים קריפטוגרפיים מסוג RSA, AES, ECDSA ו-HMAC ופונקציות גיבוב מסוג MD5, SHA1 ו-SHA-2 כדי לתמוך בצורה תקינה באלגוריתמים הנתמכים במערכת Android Keystore באזור שמבודד בצורה מאובטחת מהקוד שפועל בקרנל ומעליו. בידוד מאובטח חייב לחסום את כל המנגנונים הפוטנציאליים שבאמצעותם קוד במצב ליבה או במרחב משתמשים יכול לגשת למצב הפנימי של הסביבה המבודדת, כולל DMA. פרויקט הקוד הפתוח של Android (AOSP) עומד בדרישה הזו באמצעות ההטמעה של Trusty, אבל אפשרות חלופית היא פתרון אחר שמבוסס על ARM TrustZone או הטמעה מאובטחת שנבדקה על ידי צד שלישי של היפר-ויז'ר מתאים שמבוסס על בידוד.
- [C-1-3] חובה לבצע את האימות במסך הנעילה בסביבת ביצוע מבודדת, ורק אם האימות מצליח, לאפשר שימוש במפתחות שקשורים לאימות. פרטי הכניסה למסך הנעילה חייבים להישמר באופן שמאפשר רק לסביבת הביצוע המבודדת לבצע אימות של מסך הנעילה. פרויקט הקוד הפתוח של Android מספק את שכבת ההפשטה של חומרה (HAL) של Gatekeeper ואת Trusty, שאפשר להשתמש בהם כדי לעמוד בדרישה הזו.
- [C-1-4] חובה לתמוך באימות מפתחות, כאשר מפתח החתימה של האימות מוגן על ידי חומרה מאובטחת והחתימה מתבצעת בחומרה מאובטחת. חובה לשתף את מפתחות החתימה של האימות במספר גדול מספיק של מכשירים כדי למנוע שימוש במפתחות כמזהי מכשירים. אחת הדרכים לעמוד בדרישה הזו היא לשתף את אותו מפתח אישור, אלא אם מיוצרות לפחות 100,000 יחידות של מק"ט נתון. אם מיוצרות יותר מ-100,000 יחידות של מק"ט מסוים, אפשר להשתמש במפתח אחר לכל 100,000 יחידות.
הערה: אם הטמעת מכשיר כבר הושקה בגרסת Android קודמת, המכשיר הזה פטור מהדרישה להשתמש במאגר מפתחות שמגובה על ידי סביבת ביצוע מבודדת ולתמוך באימות מפתחות, אלא אם הוא מצהיר על התכונה android.hardware.fingerprint
, שדורשת מאגר מפתחות שמגובה על ידי סביבת ביצוע מבודדת.
- [C-1-5] המערכת חייבת לאפשר למשתמש לבחור את הזמן הקצוב לתפוגה של מצב שינה למעבר ממצב לא נעול למצב נעול, עם זמן קצוב לתפוגה מינימלי של עד 15 שניות.
9.11.1. נעילת מסך מאובטחת ואימות
ההטמעה של AOSP מבוססת על מודל אימות מדורג, שבו אימות ראשי שמבוסס על גורם ידע יכול להיות מגובה באימות ביומטרי משני חזק או בשיטות אימות שלישוניות חלשות יותר.
הטמעות במכשיר:
- [C-SR] מומלץ מאוד להגדיר רק אחת מהשיטות הבאות כשיטת האימות הראשית:
- קוד אימות מספרי
- סיסמה אלפאנומרית
- דפוס החלקה ברשת של 3x3 נקודות בדיוק
שימו לב: שיטות האימות שצוינו למעלה הן שיטות האימות העיקריות המומלצות במסמך הזה.
אם בהטמעות של מכשירים נוספות או משתנות שיטות האימות הראשיות המומלצות, ומשתמשים בשיטת אימות חדשה כדרך מאובטחת לנעילת המסך, שיטת האימות החדשה:
- [C-2-1] חייבת להיות שיטת אימות המשתמש כפי שמתואר בקטע דרישת אימות משתמש לשימוש במפתח.
- [C-2-2] חובה לבטל את הנעילה של כל המפתחות כדי שאפליקציית מפתחים של צד שלישי תוכל להשתמש בהם כשהמשתמש מבטל את הנעילה של מסך הנעילה המאובטח. לדוגמה, כל המפתחות חייבים להיות זמינים לאפליקציה של מפתח צד שלישי דרך ממשקי API רלוונטיים, כמו
createConfirmDeviceCredentialIntent
ו-setUserAuthenticationRequired
.
אם הטמעות של מכשירים מוסיפות או משנות את שיטות האימות לביטול הנעילה של מסך הנעילה, אם הן מבוססות על סוד ידוע ומשתמשות בשיטת אימות חדשה שתיחשב כדרך מאובטחת לנעילת המסך:
- [C-3-1] האנטרופיה של האורך הקצר ביותר המותר של קלט חייבת להיות גדולה מ-10 ביט.
- [C-3-2] האנטרופיה המקסימלית של כל הקלטים האפשריים חייבת להיות גדולה מ-18 ביט.
- [C-3-3] שיטת האימות החדשה לא יכולה להחליף אף אחת משיטות האימות העיקריות המומלצות (כלומר, קוד אימות, קו ביטול נעילה, סיסמה) שהוטמעו וסופקו ב-AOSP.
- [C-3-4] צריך להשבית את שיטת האימות החדשה אם אפליקציית בקר מדיניות המכשיר (DPC) הגדירה את מדיניות איכות הסיסמה באמצעות השיטה
DevicePolicyManager.setPasswordQuality()
עם קבוע איכות מגביל יותר מ-PASSWORD_QUALITY_SOMETHING
. - [C-3-5] שיטות אימות חדשות חייבות לחזור לשיטות האימות העיקריות המומלצות (כלומר, קוד אימות, תבנית, סיסמה) אחת ל-72 שעות או פחות, או לחלופין להבהיר למשתמש שחלק מהנתונים לא יגובו כדי לשמור על פרטיות הנתונים שלו.
אם הטמעות של מכשירים מוסיפות או משנות את שיטות האימות הראשיות המומלצות לביטול הנעילה של מסך הנעילה, ומשתמשות בשיטת אימות חדשה שמבוססת על נתונים ביומטריים כדי להיחשב כדרך מאובטחת לנעילת המסך, השיטה החדשה:
- [C-4-1] חובה לעמוד בכל הדרישות שמתוארות בסעיף 7.3.10 בנושא נוחות.
- [C-4-2] חובה להשתמש במנגנון חלופי כדי להשתמש באחת משיטות האימות הראשיות המומלצות שמבוססות על סוד ידוע.
- [C-4-3] חובה להשבית את האפשרות הזו ולאפשר רק את שיטת האימות העיקרית המומלצת לביטול הנעילה של המסך , אם אפליקציית Device Policy Controller (DPC) הגדירה את מדיניות התכונות של Keyguard באמצעות קריאה לשיטה
DevicePolicyManager.setKeyguardDisabledFeatures()
, עם אחד מהדגלים הביומטריים המשויכים (כלומרKEYGUARD_DISABLE_BIOMETRICS
, KEYGUARD_DISABLE_FINGERPRINT
, KEYGUARD_DISABLE_FACE
אוKEYGUARD_DISABLE_IRIS
).
אם שיטות האימות הביומטרי לא עומדות בדרישות לשיטות חזקות, כפי שמתואר בקטע 7.3.10:
- [C-5-1] צריך להשבית את השיטות אם אפליקציית Device Policy Controller (DPC) הגדירה את מדיניות איכות הסיסמה באמצעות השיטה
DevicePolicyManager.setPasswordQuality()
עם קבוע איכות מגביל יותר מ-PASSWORD_QUALITY_BIOMETRIC_WEAK
. - [C-5-2] המשתמש חייב להתבקש לבצע את האימות הראשי המומלץ (למשל: קוד אימות, קו ביטול נעילה, סיסמה) אחרי כל תקופה של 4 שעות ללא פעילות. תקופת ההמתנה עד שהמכשיר יתנתק מתאפסת אחרי כל אישור מוצלח של פרטי הכניסה למכשיר.
- [C-5-3] אסור להתייחס לשיטות האלה כמסך נעילה מאובטח, והן חייבות לעמוד בדרישות שמתחילות ב-C-8 בקטע הבא.
אם הטמעות של מכשירים מוסיפות או משנות את שיטות האימות לביטול הנעילה של מסך הנעילה, ושיטת אימות חדשה מבוססת על אסימון פיזי או על המיקום:
- [C-6-1] חובה להשתמש במנגנון חלופי כדי להשתמש באחת משיטות האימות הראשיות המומלצות שמבוססות על סוד ידוע, ולעמוד בדרישות כדי להיחשב כמסך נעילה מאובטח.
- [C-6-2] השיטה החדשה חייבת להיות מושבתת, וצריך לאפשר רק אחת משיטות האימות הראשיות המומלצות לביטול הנעילה של המסך, אם אפליקציית Device Policy Controller (DPC) הגדירה את המדיניות באמצעות השיטה
DevicePolicyManager.setKeyguardDisabledFeatures(KEYGUARD_DISABLE_TRUST_AGENTS)
או השיטהDevicePolicyManager.setPasswordQuality()
עם קבוע איכות מגביל יותר מ-PASSWORD_QUALITY_UNSPECIFIED
. - [C-6-3] המשתמש חייב להתבקש להשתמש באחת משיטות האימות העיקריות המומלצות (למשל, קוד אימות, קו ביטול נעילה, סיסמה) לפחות פעם ב-4 שעות או פחות.
- [C-6-4] אסור להתייחס לשיטה החדשה כאל מסך נעילה מאובטח, והיא צריכה לעמוד בדרישות שמפורטות בסעיף C-8 בהמשך.
אם יישומי המכשיר כוללים נעילת מסך מאובטחת וסביבת אמינות אחת או יותר שמיישמת את TrustAgentService
System API, הם:
- [C-7-1] חובה להציג אינדיקציה ברורה בתפריט ההגדרות ובמסך הנעילה כשנעילת המכשיר נדחית או כשסוכני מהימנות יכולים למנוע את הנעילה. לדוגמה, מערכת AOSP עומדת בדרישה הזו על ידי הצגת תיאור טקסט להגדרה 'נעילה אוטומטית' ו'נעילה מיידית של לחצן ההפעלה' בתפריט ההגדרות, וסמל שניתן להבחין בו במסך הנעילה.
- [C-7-2] חובה לכבד ולהטמיע באופן מלא את כל ממשקי ה-API של סוכני האמון במחלקה
DevicePolicyManager
, כמו הקבועKEYGUARD_DISABLE_TRUST_AGENTS
. - [C-7-3] אסור להטמיע באופן מלא את הפונקציה
TrustAgentService.addEscrowToken()
במכשיר שמשמש כמכשיר אישי ראשי (למשל, מכשיר נייד), אבל מותר להטמיע באופן מלא את הפונקציה בהטמעות של מכשירים שבדרך כלל משותפים (למשל, Android TV או מכשיר לרכב). - [C-7-4] חובה להצפין את כל הטוקנים המאוחסנים שנוספו על ידי
TrustAgentService.addEscrowToken()
. - [C-7-5] אסור לאחסן את מפתח ההצפנה או את אסימון הנאמנות באותו מכשיר שבו נעשה שימוש במפתח. לדוגמה, מותר שמפתח שמאוחסן בטלפון יבטל את הנעילה של חשבון משתמש בטלוויזיה.
- [C-7-6] חובה ליידע את המשתמש לגבי ההשלכות על האבטחה לפני הפעלת אסימון הנאמנות לצורך פענוח של אחסון הנתונים.
- [C-7-7] חובה להשתמש במנגנון חלופי כדי להשתמש באחת משיטות האימות הראשיות המומלצות.
- [C-7-8] המשתמש חייב להתבקש להשתמש באחת משיטות האימות העיקריות המומלצות (למשל: קוד אימות, קו ביטול נעילה, סיסמה) לפחות פעם ב-72 שעות או פחות, אלא אם יש חשש לגבי בטיחות המשתמש (למשל: הסחת דעת של הנהג).
- [C-7-9] המשתמש חייב להתבקש להשתמש באחת משיטות האימות העיקריות המומלצות (למשל: קוד אימות, תבנית, סיסמה) אחרי כל תקופת המתנה של 4 שעות, אלא אם יש חשש לגבי בטיחות המשתמש (למשל: הסחת דעת של הנהג). תקופת ההמתנה עד שהמכשיר יתנתק מתאפסת אחרי כל אישור מוצלח של פרטי הכניסה למכשיר.
- [C-7-10] אסור להתייחס לנעילת המסך כאל נעילה מאובטחת, והיא חייבת לעמוד בדרישות שמפורטות בסעיף C-8 בהמשך.
- [C-7-11] אסור לאפשר ל-TrustAgents במכשירים אישיים ראשיים (לדוגמה: מכשירים ניידים) לבטל את נעילת המכשיר, ואפשר להשתמש בהם רק כדי לשמור על מצב לא נעול של מכשיר שכבר לא נעול למשך עד 4 שעות. היישום שמוגדר כברירת מחדל של TrustManagerService ב-AOSP עומד בדרישה הזו.
- [C-7-12] חובה להשתמש בערוץ תקשורת מאובטח מבחינה קריפטוגרפית (למשל UKEY2) כדי להעביר את אסימון הנאמנות ממכשיר האחסון למכשיר היעד.
אם הטמעות של מכשירים מוסיפות או משנות את שיטות האימות לביטול הנעילה של מסך הנעילה שאינו מאובטח כפי שמתואר למעלה, ומשתמשות בשיטת אימות חדשה לביטול הנעילה של מגן המקשים:
- [C-8-1] השיטה החדשה חייבת להיות מושבתת אם אפליקציית Device Policy Controller (DPC) הגדירה את מדיניות איכות הסיסמה באמצעות השיטה
DevicePolicyManager.setPasswordQuality()
עם קבוע איכות מגביל יותר מ-PASSWORD_QUALITY_UNSPECIFIED
. - [C-8-2] אסור להם לאפס את טיימר התפוגה של הסיסמה שהוגדר על ידי
DevicePolicyManager.setPasswordExpirationTimeout()
. - [C-8-3] אסור לחשוף API לשימוש באפליקציות של צד שלישי כדי לשנות את מצב הנעילה.
9.11.2. StrongBox
מערכת Android Keystore מאפשרת למפתחי אפליקציות לאחסן מפתחות קריפטוגרפיים במעבד מאובטח ייעודי, וגם בסביבת הביצוע המבודדת שמתוארת למעלה. מעבד מאובטח ייעודי כזה נקרא StrongBox. בדרישות C-1-3 עד C-1-11 שבהמשך מוגדרות הדרישות שמכשיר צריך לעמוד בהן כדי להיחשב כ-StrongBox.
הטמעות של מכשירים עם מעבד מאובטח ייעודי:
- [C-SR] מומלץ מאוד לתמוך ב-StrongBox. סביר להניח ש-StrongBox יהפוך לדרישה בגרסה עתידית.
אם ההטמעות של המכשירים תומכות ב-StrongBox, הן:
-
[C-1-1] חובה להצהיר על FEATURE_STRONGBOX_KEYSTORE.
-
[C-1-2] המכשיר חייב לספק חומרה ייעודית ומאובטחת שמשמשת לגיבוי של מאגר המפתחות ולאימות מאובטח של המשתמש. יכול להיות שחלק מהחומרה המאובטחת הייעודית תשמש גם למטרות אחרות.
-
[C-1-3] חובה להשתמש במעבד נפרד שלא משתף מטמון, DRAM, מעבדי משנה או משאבי ליבה אחרים עם מעבד האפליקציה (AP).
-
[C-1-4] חובה לוודא שציוד היקפי שמשותף עם ה-AP לא יכול לשנות את העיבוד של StrongBox בשום צורה, או להשיג מידע מ-StrongBox. יכול להיות שה-AP יכבה או יחסום את הגישה ל-StrongBox.
-
[C-1-5] חובה להשתמש בשעון פנימי עם רמת דיוק סבירה (±10%) שלא ניתן למניפולציה על ידי ה-AP.
-
[C-1-6] חובה להשתמש בגנרטור של מספרים אקראיים אמיתיים שמפיק פלט בלתי צפוי עם התפלגות אחידה.
-
[C-1-7] חובה שתהיה עמידות בפני חבלה, כולל עמידות בפני חדירה פיזית ושיבושים.
-
[C-1-8] חובה שתהיה עמידות לערוץ צדדי, כולל עמידות מפני דליפת מידע דרך ערוצי צדדיים של חשמל, תזמון, קרינה אלקטרומגנטית וקרינה תרמית.
-
[C-1-9] חובה לאחסן את התוכן בצורה מאובטחת כדי להבטיח את הסודיות, השלמות, האותנטיות, העקביות והעדכניות שלו. אסור לאפשר קריאה או שינוי של האחסון, אלא בהתאם להרשאות שניתנות על ידי ממשקי ה-API של StrongBox.
-
כדי לאמת את התאימות לדרישות [C-1-3] עד [C-1-9], הטמעות במכשירים:
- [C-1-10] חובה לכלול את החומרה שאושרה בהתאם לפרופיל ההגנה של IC מאובטח BSI-CC-PP-0084-2014 או שנבדקה על ידי מעבדת בדיקה עם הסמכה לאומית שמשלבת הערכת פגיעות עם פוטנציאל גבוה להתקפה בהתאם ל-Common Criteria Application of Attack Potential to Smartcards.
- [C-1-11] חובה לכלול את הקושחה שנבדקה על ידי מעבדת בדיקה עם הסמכה לאומית, שמשלבת הערכת פגיעות עם פוטנציאל גבוה להתקפה בהתאם לקריטריונים משותפים להערכת פוטנציאל התקפה על כרטיסים חכמים.
- [C-SR] מומלץ מאוד לכלול את החומרה שנבדקת באמצעות יעד אבטחה, רמת הבטחת הערכה (EAL) 5, בתוספת AVA_VAN.5. סביר להניח שאישור EAL 5 יהפוך לדרישה בגרסה עתידית.
-
מומלץ מאוד להשתמש ב-[C-SR] כדי לספק עמידות בפני מתקפות פנימיות (IAR). המשמעות היא שגורם פנימי עם גישה למפתחות חתימה של קושחה לא יכול ליצור קושחה שגורמת ל-StrongBox לחשוף סודות, לעקוף דרישות אבטחה פונקציונליות או לאפשר גישה לנתונים רגישים של משתמשים. הדרך המומלצת להטמיע IAR היא לאפשר עדכוני קושחה רק כשמספקים את הסיסמה של המשתמש הראשי דרך IAuthSecret HAL.
9.12. מחיקת נתונים
כל ההטמעות במכשירים:
- [C-0-1] חובה לספק למשתמשים מנגנון לביצוע 'איפוס לנתוני היצרן'.
- [C-0-2] חובה למחוק את כל הנתונים במערכת הקבצים של נתוני המשתמשים.
- [C-0-3] חובה למחוק את הנתונים באופן שעומד בתקנים הרלוונטיים בתחום, כמו NIST SP800-88.
- [C-0-4] חובה להפעיל את התהליך 'איפוס להגדרות היצרן' שצוין למעלה כשמתבצעת קריאה ל-API של
DevicePolicyManager.wipeData()
על ידי אפליקציית בקר מדיניות המכשיר של המשתמש הראשי. - יכול להיות שתהיה אפשרות למחיקת נתונים מהירה שמבצעת רק מחיקה לוגית של הנתונים.
9.13. מצב הפעלה בטוח
Android מספקת מצב אתחול בטוח, שמאפשר למשתמשים לבצע אתחול למצב שבו רק אפליקציות מערכת שהותקנו מראש יכולות לפעול וכל אפליקציות הצד השלישי מושבתות. במצב הזה, שנקרא 'מצב אתחול בטוח', המשתמש יכול להסיר אפליקציות צד שלישי שעלולות להזיק.
הטמעות במכשיר הן:
- [SR] מומלץ מאוד להטמיע מצב אתחול בטוח.
אם במכשירים מוטמע מצב אתחול בטוח, הם:
-
[C-1-1] חובה לספק למשתמש אפשרות להיכנס למצב הפעלה בטוח באופן שלא ניתן להפרעה על ידי אפליקציות צד שלישי שהותקנו במכשיר, אלא אם אפליקציית הצד השלישי היא בקר מדיניות מכשיר והיא הגדירה את הדגל
UserManager.DISALLOW_SAFE_BOOT
כ-True. -
[C-1-2] המכשיר חייב לספק למשתמש אפשרות להסיר כל אפליקציה של צד שלישי במצב בטוח.
-
צריך לספק למשתמש אפשרות להיכנס למצב אתחול בטוח מתפריט האתחול באמצעות תהליך עבודה ששונה מזה של אתחול רגיל.
9.14. בידוד מערכות ברכב
מכשירים עם Android Automotive צפויים להחליף נתונים עם מערכות משנה קריטיות ברכב באמצעות vehicle HAL כדי לשלוח ולקבל הודעות ברשתות הרכב, כמו CAN bus.
אפשר לאבטח את חילופי הנתונים באמצעות הטמעה של תכונות אבטחה מתחת לשכבות של Android framework, כדי למנוע אינטראקציה זדונית או לא מכוונת עם מערכות המשנה האלה.
9.15. תוכניות מנויים
'תוכניות מנויים' מתייחסות לפרטי תוכנית החיוב שספק הסלולר מספק דרך SubscriptionManager.setSubscriptionPlans()
.
כל ההטמעות במכשירים:
- [C-0-1] חובה להחזיר תוכניות מינוי רק לאפליקציה של ספק הסלולר שסיפק אותן במקור.
- [C-0-2] אסור לגבות מרחוק או להעלות תוכניות מינוי.
- [C-0-3] חובה לאפשר ביטולים, כמו
SubscriptionManager.setSubscriptionOverrideCongested()
, רק דרך האפליקציה של ספק הרשת הסלולרית שמספק כרגע תוכניות מינוי תקפות.
10. בדיקת תאימות של תוכנה
הטמעות במכשירים חייבות לעבור את כל הבדיקות שמתוארות בקטע הזה. עם זאת, חשוב לזכור שאין חבילת בדיקות תוכנה מקיפה לחלוטין. לכן, מומלץ מאוד למפתחים של מכשירים לבצע את המספר המינימלי האפשרי של שינויים בהטמעה המועדפת של Android, שזמינה מ-Android Open Source Project. כך אפשר לצמצם את הסיכון להחדרת באגים שיוצרים חוסר תאימות, שדורש עבודה מחדש ועדכונים פוטנציאליים של המכשיר.
10.1. חבילה לבדיקות תאימות (CTS)
הטמעות במכשיר:
-
[C-0-1] המכשיר חייב לעבור את חבילת בדיקות התאימות (CTS) של Android שזמינה מ-Android Open Source Project, באמצעות תוכנת המשלוח הסופית במכשיר.
-
[C-0-2] חובה לוודא תאימות במקרים של עמימות ב-CTS ובכל הטמעה מחדש של חלקים מקוד המקור של ההפניה.
מערכת ה-CTS מיועדת להרצה במכשיר בפועל. בדומה לכל תוכנה, יכול להיות שגם ב-CTS יש באגים. ה-CTS יקבל גרסאות באופן עצמאי מהגדרת התאימות הזו, ויכול להיות שיפורסמו כמה עדכונים של ה-CTS ל-Android 10.
הטמעות במכשיר:
-
[C-0-3] המכשיר חייב לעבור את הגרסה האחרונה של CTS שזמינה בזמן השלמת תוכנת המכשיר.
-
מומלץ להשתמש בהטמעה לדוגמה בעץ קוד המקור הפתוח של Android ככל האפשר.
10.2. CTS Verifier
הכלי CTS Verifier כלול בחבילת בדיקות התאימות (CTS), והוא מיועד להפעלה על ידי מפעיל אנושי כדי לבדוק פונקציונליות שלא ניתן לבדוק באמצעות מערכת אוטומטית, כמו פעולה תקינה של מצלמה וחיישנים.
הטמעות במכשיר:
- [C-0-1] חובה להריץ נכון את כל המקרים הרלוונטיים בכלי לאימות CTS.
כלי ה-CTS Verifier כולל בדיקות לסוגים רבים של חומרה, כולל חומרה אופציונלית.
הטמעות במכשיר:
- [C-0-2] חובה לעבור את כל הבדיקות של החומרה שקיימת במכשיר. לדוגמה, אם במכשיר יש מד תאוצה, הוא חייב לבצע בצורה נכונה את תרחיש הבדיקה של מד התאוצה ב-CTS Verifier.
אפשר לדלג על תרחישי בדיקה של תכונות שמסומנות כאופציונליות במסמך הגדרת התאימות (CDD) או להשמיט אותם.
- [C-0-2] כל מכשיר וכל גרסת build חייבים להריץ את CTS Verifier בצורה נכונה, כפי שצוין למעלה. עם זאת, מכיוון שהרבה גרסאות דומות מאוד, לא מצפים ממפתחי מכשירים להריץ במפורש את CTS Verifier בגרסאות ששונות רק בפרטים שוליים. בפרט, הטמעות במכשירים ששונות מהטמעה שעברה את CTS Verifier רק בסט של הלוקאלים הכלולים, המיתוג וכו', יכולות להשמיט את הבדיקה של CTS Verifier.
11. תוכנות שניתנות לעדכון
-
[C-0-1] הטמעות של מכשירים חייבות לכלול מנגנון להחלפה של כל תוכנת המערכת. המנגנון לא צריך לבצע שדרוגים 'בזמן אמת' – כלומר, יכול להיות שתידרש הפעלה מחדש של המכשיר. אפשר להשתמש בכל שיטה, בתנאי שהיא יכולה להחליף את כל התוכנה שהותקנה מראש במכשיר. לדוגמה, כל אחת מהגישות הבאות תעמוד בדרישה הזו:
- הורדות 'Over-the-air (OTA)' עם עדכון אופליין באמצעות הפעלה מחדש.
- עדכונים 'קשורים' דרך USB ממחשב מארח.
- עדכונים במצב אופליין באמצעות הפעלה מחדש ועדכון מקובץ באחסון נייד.
-
[C-0-2] מנגנון העדכון שבו נעשה שימוש חייב לתמוך בעדכונים בלי מחיקה של נתוני המשתמש. כלומר, מנגנון העדכון חייב לשמור על הנתונים הפרטיים של האפליקציה ועל הנתונים המשותפים של האפליקציה. שימו לב: תוכנת Android במעלה הזרם כוללת מנגנון עדכון שעומד בדרישה הזו.
-
[C-0-3] כל העדכון חייב להיות חתום, ומנגנון העדכון במכשיר חייב לאמת את העדכון והחתימה מול מפתח ציבורי שמאוחסן במכשיר.
- [C-SR] מומלץ מאוד שמנגנון החתימה יגבב את העדכון באמצעות SHA-256 ויאמת את הגיבוב מול המפתח הציבורי באמצעות ECDSA NIST P-256.
אם הטמעות המכשיר כוללות תמיכה בחיבור נתונים ללא הגבלה, כמו פרופיל 802.11 או Bluetooth PAN (רשת אזור אישית), אז:
- [C-1-1] חובה לתמוך בהורדות OTA עם עדכון אופליין באמצעות הפעלה מחדש.
ביישומים של מכשירים שמופעלים עם Android 6.0 ואילך, מנגנון העדכון צריך לתמוך באימות שלפיו תמונת המערכת זהה בינארית לתוצאה הצפויה אחרי עדכון OTA. היישום של OTA מבוסס-בלוקים בפרויקט Android Open Source, שנוסף מאז Android 5.1, עומד בדרישה הזו.
בנוסף, הטמעות של מכשירים צריכות לתמוך בעדכוני מערכת A/B. ב-AOSP, התכונה הזו מיושמת באמצעות boot control HAL.
אם נמצאה שגיאה בהטמעה של מכשיר אחרי שהוא הושק, אבל במסגרת משך החיים הסביר של המוצר שנקבע בהתייעצות עם צוות התאימות של Android, והשגיאה משפיעה על התאימות של אפליקציות של צד שלישי, אז:
- [C-2-1] המפתח של המכשיר חייב לתקן את השגיאה באמצעות עדכון תוכנה שזמין להחלה בהתאם למנגנון שמתואר למעלה.
Android כולל תכונות שמאפשרות לאפליקציה Device Owner (אם היא קיימת) לשלוט בהתקנה של עדכוני מערכת. אם מערכת המשנה לעדכון המערכת במכשירים מדווחת על android.software.device_admin, אז:
- [C-3-1] חובה להטמיע את ההתנהגות שמתוארת במחלקה SystemUpdatePolicy.
12. יומן שינויים של מסמך
סיכום השינויים בהגדרת התאימות בגרסה הזו:
סיכום השינויים בקטעים שמתייחסים לאנשים פרטיים:
- מבוא
- סוגי מכשירים
- תוכנה
- אריזת אפליקציות
- מולטימדיה
- כלים ואפשרויות למפתחים
- תאימות חומרה
- ביצועים והספק
- מודל אבטחה
- בדיקת תאימות של תוכנה
- תוכנות שאפשר לעדכן
- יומן השינויים של המסמך
- יצירת קשר
12.1. טיפים לצפייה ביומן השינויים
השינויים מסומנים באופן הבא:
-
CDD
שינויים מהותיים בדרישות התאימות. -
Docs
שינויים שקשורים למראה או למבנה.
כדי להציג את השינויים בצורה הכי טובה, כדאי להוסיף את הפרמטרים של כתובת ה-URL pretty=full
ו-no-merges
לכתובות ה-URL של יומן השינויים.
13. יצירת קשר
אתם יכולים להצטרף לפורום התאימות של Android ולבקש הבהרות או להעלות בעיות שלדעתכם לא מכוסות במסמך.