זכויות יוצרים © 2010, Google Inc. כל הזכויות שמורות.
compatibility@android.com
1. הקדמה
מסמך זה מונה את הדרישות שיש לעמוד בהן כדי שטלפונים ניידים יהיו תואמים לאנדרואיד 2.1.
השימוש ב"חייב", "אסור", "נדרש", "יהיה", "לא", "צריך", "לא צריך", "מומלץ", "רשאי" ו"אופציונלי" הוא לפי תקן IETF מוגדר ב-RFC2119 [ משאבים, 1 ].
כפי שמשמש במסמך זה, "מיישם מכשירים" או "מיישם" הוא אדם או ארגון המפתחים פתרון חומרה/תוכנה המריץ את אנדרואיד 2.1. "יישום מכשיר" או "יישום" הוא פתרון החומרה/תוכנה שפותח כך.
כדי להיחשב תואם ל-Android 2.1, יישומי מכשירים:
- חייב לעמוד בדרישות המוצגות בהגדרת תאימות זו, לרבות כל מסמך המשולב באמצעות הפניה.
- חייבים לעבור את הגרסה העדכנית ביותר של חבילת בדיקת התאימות ל-Android (CTS) הזמינה בזמן השלמת יישום התוכנה של המכשיר. (ה-CTS זמין כחלק מפרויקט הקוד הפתוח של Android [ משאבים, 2 ].) ה-CTS בודק רבים, אך לא את כולם, מהרכיבים המתוארים במסמך זה.
כאשר ההגדרה הזו או ה-CTS שקטים, מעורפלים או לא שלמים, באחריות מיישם המכשיר להבטיח תאימות עם יישומים קיימים. מסיבה זו, פרויקט הקוד הפתוח של אנדרואיד [ משאבים, 3 ] הוא גם ההתייחסות וגם היישום המועדף של אנדרואיד. ממליצים מאוד על מיישמי מכשירים לבסס את ההטמעות שלהם על קוד המקור "במעלה הזרם" הזמין מפרויקט הקוד הפתוח של Android. בעוד שרכיבים מסוימים יכולים להיות מוחלפים באופן היפותטי ביישומים חלופיים, תרגול זה מומלץ מאוד, שכן מעבר מבחני CTS יהפוך לקשה יותר באופן משמעותי. באחריות המיישם להבטיח תאימות התנהגותית מלאה ליישום הסטנדרטי של אנדרואיד, כולל ומעבר לחבילת בדיקת התאימות. לבסוף, שים לב שהחלפות ושינויים מסוימים של רכיבים אסורים במפורש במסמך זה.
2. משאבים
- רמות הדרישה של IETF RFC2119: http://www.ietf.org/rfc/rfc2119.txt
- סקירה כללית של תוכנית התאימות ל-Android: http://source.android.com/compatibility/index.html
- פרויקט קוד פתוח של אנדרואיד: http://source.android.com/
- הגדרות API ותיעוד: http://developer.android.com/reference/packages.html
- הפניה להרשאות אנדרואיד: http://developer.android.com/reference/android/Manifest.permission.html
- הפניה ל-android.os.Build: http://developer.android.com/reference/android/os/Build.html
- מחרוזות גרסה מותרות של Android 2.1: http://source.android.com/compatibility/2.1/versions.html
- כיתת android.webkit.WebView: http://developer.android.com/reference/android/webkit/WebView.html
- HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/
- מפרט מכונה וירטואלית של Dalvik: זמין בקוד המקור של אנדרואיד, בכתובת dalvik/docs
- AppWidgets: http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
- התראות: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
- משאבי יישומים: http://code.google.com/android/reference/available-resources.html
- מדריך סגנון סמל שורת המצב: http://developer.android.com/guide/practices/ui_guideline /icon_design.html#statusbarstructure
- מנהל החיפוש: http://developer.android.com/reference/android/app/SearchManager.html
- טוסטים: http://developer.android.com/reference/android/widget/Toast.html
- רקעים חיים: https://android-developers.googleblog.com/2010/02/live-wallpapers.html
- אפליקציות לאנדרואיד: http://code.google.com/p/apps-for-android
- תיעוד כלי עזר (עבור adb, aapt, ddms): http://developer.android.com/guide/developing/tools/index.html
- תיאור קובץ ה-apk של Android: http://developer.android.com/guide/topics/fundamentals.html
- קובצי מניפסט: http://developer.android.com/guide/topics/manifest/manifest-intro.html
- כלי לבדיקת קופים: https://developer.android.com/studio/test/other-testing-tools/monkey
- תמיכה במספר מסכים: http://developer.android.com/guide/practices/screens_support.html
- android.content.res.Configuration: http://developer.android.com/reference/android/content/res/Configuration.html
- android.util.DisplayMetrics: http://developer.android.com/reference/android/util/DisplayMetrics.html
- android.hardware.Camera: http://developer.android.com/reference/android/hardware/Camera.html
- מרחב קואורדינטות חיישן: http://developer.android.com/reference/android/hardware/SensorEvent.html
- הפניה לאבטחה והרשאות אנדרואיד: http://developer.android.com/guide/topics/security/security.html
- ממשק API של Bluetooth: http://developer.android.com/reference/android/bluetooth/package-summary.html
רבים ממשאבים אלה נגזרים במישרין או בעקיפין מ-Android 2.1 SDK, ויהיו זהים מבחינה פונקציונלית למידע בתיעוד של SDK זה. בכל המקרים שבהם הגדרת התאימות הזו או חבילת בדיקת התאימות לא מסכימה עם תיעוד ה-SDK, תיעוד ה-SDK נחשב סמכותי. כל פרט טכני המסופק בהפניות הכלולות לעיל נחשב בהכללה כחלק מהגדרת תאימות זו.
3. תוכנה
פלטפורמת אנדרואיד כוללת סט של ממשקי API מנוהלים, סט של ממשקי API מקוריים וגוף של ממשקי API כביכול "רך" כגון מערכת Intent ו-API של אפליקציות אינטרנט. סעיף זה מפרט את ממשקי ה-API הקשיחים והרכים שהם חלק בלתי נפרד מהתאימות, כמו גם התנהגויות טכניות וממשק משתמש מסוימות רלוונטיות אחרות. יישומי מכשירים חייבים לעמוד בכל הדרישות בסעיף זה.
3.1. תאימות API מנוהלת
סביבת הביצוע המנוהלת (מבוססת דאלוויק) היא הכלי העיקרי עבור יישומי אנדרואיד. ממשק תכנות יישומי אנדרואיד (API) הוא קבוצת ממשקי פלטפורמת אנדרואיד החשופים ליישומים הפועלים בסביבת ה-VM המנוהלת. יישומי מכשירים חייבים לספק יישומים מלאים, כולל כל ההתנהגויות המתועדות, של כל API מתועד שנחשף על ידי Android 2.1 SDK [ משאבים, 4 ].
אין להטמיע במכשיר להשמיט כל ממשקי API מנוהלים, לשנות ממשקי API או חתימות, לסטות מההתנהגות המתועדת או לכלול פעולות ללא פעולות, למעט היכן שמותר במפורש בהגדרת תאימות זו.
3.2. תאימות API רכה
בנוסף לממשקי ה-API המנוהלים מ-Section 3.1, אנדרואיד כולל גם API "רך" משמעותי לזמן ריצה בלבד, בצורה של דברים כגון Intents, Permissions והיבטים דומים של אפליקציות אנדרואיד שלא ניתן לאכוף בזמן הידור של אפליקציות. סעיף זה מפרט את ממשקי ה-API ה"רך" והתנהגויות המערכת הנדרשות לתאימות עם אנדרואיד 2.1. יישומי מכשיר חייבים לעמוד בכל הדרישות המוצגות בסעיף זה.
3.2.1. הרשאות
מיישמי מכשירים חייבים לתמוך ולאכוף את כל קבועי ההרשאה כפי שמתועדים בדף ההפניה להרשאות [ משאבים, 5 ]. שים לב שסעיף 10 מפרט דרישות נוספות הקשורות למודל האבטחה של Android.
3.2.2. בניית פרמטרים
ממשקי ה-API של Android כוללים מספר קבועים במחלקה android.os.Build
[ משאבים, 6 ] שנועדו לתאר את המכשיר הנוכחי. כדי לספק ערכים עקביים ומשמעותיים על פני יישומי מכשירים, הטבלה שלהלן כוללת הגבלות נוספות על הפורמטים של ערכים אלה שאליהם יישומי מכשירים חייבים להתאים.
פָּרָמֶטֶר | הערות |
android.os.Build.VERSION.RELEASE | הגרסה של מערכת אנדרואיד הפועלת כעת, בפורמט קריא אנושי. שדה זה חייב לכלול אחד מערכי המחרוזת המוגדרים ב-[ משאבים, 7 ]. |
android.os.Build.VERSION.SDK | הגרסה של מערכת אנדרואיד הפועלת כעת, בפורמט נגיש לקוד אפליקציה של צד שלישי. עבור אנדרואיד 2.1, שדה זה חייב לכלול את הערך השלם 7. |
android.os.Build.VERSION.INCREMENTAL | ערך שנבחר על ידי מיישם המכשיר המייעד את המבנה הספציפי של מערכת אנדרואיד הפועלת כעת, בפורמט קריא אנושי. אין לעשות שימוש חוזר בערך זה עבור מבנים שונים הנשלחים למשתמשי קצה. שימוש טיפוסי בשדה זה הוא לציין באיזה מספר build או מזהה שינוי בקרת מקור נעשה שימוש ליצירת ה-build. אין דרישות לגבי הפורמט הספציפי של שדה זה, מלבד שאסור שהוא יהיה null או המחרוזת הריקה (""). |
android.os.Build.BOARD | ערך שנבחר על ידי מיישם המכשיר המזהה את החומרה הפנימית הספציפית המשמשת את המכשיר, בפורמט קריא אנושי. שימוש אפשרי בשדה זה הוא לציין את הגרסה הספציפית של הלוח המחזק את המכשיר. אין דרישות לגבי הפורמט הספציפי של שדה זה, מלבד שאסור שהוא יהיה null או המחרוזת הריקה (""). |
android.os.Build.BRAND | ערך שנבחר על ידי מיישם המכשיר המזהה את שם החברה, הארגון, הפרט וכו' שייצר את המכשיר, בפורמט קריא אנושי. שימוש אפשרי בשדה זה הוא לציין את ה-OEM ו/או הספק שמכר את המכשיר. אין דרישות לגבי הפורמט הספציפי של שדה זה, מלבד שאסור שהוא יהיה null או המחרוזת הריקה (""). |
android.os.Build.DEVICE | ערך שנבחר על ידי מיישם המכשיר המזהה את התצורה או הגרסה הספציפית של הגוף (המכונה לפעמים "עיצוב תעשייתי") של המכשיר. אין דרישות לגבי הפורמט הספציפי של שדה זה, מלבד שאסור שהוא יהיה null או המחרוזת הריקה (""). |
android.os.Build.FINGERPRINT | מחרוזת המזהה באופן ייחודי את המבנה הזה. זה אמור להיות קריא אנושי באופן סביר. זה חייב לעקוב אחר התבנית הזו:$(BRAND)/$(PRODUCT)/$(DEVICE)/$(BOARD):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS) לדוגמה: acme/mydevice/generic/generic:2.1-update1/ERC77/3359:userdebug/test-keys טביעת האצבע לא חייבת לכלול רווחים. אם בשדות אחרים הכלולים בתבנית לעיל יש רווחים, הם צריכים להיות מוחלפים בקו התחתון של ASCII ("_") בטביעת האצבע. |
android.os.Build.HOST | מחרוזת המזהה באופן ייחודי את המארח שעליו נבנה ה-build, בפורמט קריא אנושי. אין דרישות לגבי הפורמט הספציפי של שדה זה, מלבד שאסור שהוא יהיה null או המחרוזת הריקה (""). |
android.os.Build.ID | מזהה שנבחר על ידי מיישם המכשיר להתייחס למהדורה ספציפית, בפורמט קריא אנושי. שדה זה יכול להיות זהה ל-android.os.Build.VERSION.INCREMENTAL, אבל צריך להיות ערך בעל משמעות מספיקה למשתמשי קצה כדי להבחין בין תוכנות לבנות. אין דרישות לגבי הפורמט הספציפי של שדה זה, מלבד שאסור שהוא יהיה null או המחרוזת הריקה (""). |
android.os.Build.MODEL | ערך שנבחר על ידי מיישם המכשיר המכיל את שם המכשיר כפי שידוע למשתמש הקצה. זה צריך להיות אותו שם שבו המכשיר משווק ונמכר למשתמשי קצה. אין דרישות לגבי הפורמט הספציפי של שדה זה, מלבד שאסור שהוא יהיה null או המחרוזת הריקה (""). |
android.os.Build.PRODUCT | ערך שנבחר על ידי מיישם המכשיר המכיל את שם הפיתוח או שם הקוד של המכשיר. חייב להיות קריא על ידי אדם, אך אינו מיועד בהכרח לצפייה על ידי משתמשי קצה. אין דרישות לגבי הפורמט הספציפי של שדה זה, מלבד שאסור שהוא יהיה null או המחרוזת הריקה (""). |
android.os.Build.TAGS | רשימה מופרדת בפסיקים של תגים שנבחרו על ידי מיישם ההתקן שמייחדים עוד יותר את המבנה. לדוגמה, "לא חתום, ניפוי באגים". שדה זה לא חייב להיות null או המחרוזת הריקה (""), אבל תג בודד (כגון "שחרור") הוא בסדר. |
android.os.Build.TIME | ערך המייצג את חותמת הזמן של מועד הבנייה. |
android.os.Build.TYPE | ערך שנבחר על ידי מיישם ההתקן המציין את תצורת זמן הריצה של ה-build. שדה זה צריך לכלול אחד מהערכים התואמים לשלוש תצורות זמן הריצה האופייניות ל-Android: "user", "userdebug" או "eng". |
android.os.Build.USER | שם או מזהה משתמש של המשתמש (או המשתמש האוטומטי) שיצר את ה-build. אין דרישות לגבי הפורמט הספציפי של שדה זה, מלבד שאסור שהוא יהיה null או המחרוזת הריקה (""). |
3.2.3. תאימות כוונות
אנדרואיד משתמשת ב-Intents כדי להשיג אינטגרציה רופפת בין יישומים. סעיף זה מתאר דרישות הקשורות לדפוסי הכוונה שחייבים להיות מכובד על ידי יישומי מכשירים. ב"כבוד", הכוונה היא שמיישם המכשיר חייב לספק פעילות או שירות אנדרואיד המציינים מסנן Intent תואם ומתחבר ומיישם התנהגות נכונה עבור כל דפוס Intent שצוין.
3.2.3.1. כוונות יישום ליבה
פרויקט אנדרואיד במעלה הזרם מגדיר מספר יישומי ליבה, כגון חייגן טלפון, לוח שנה, ספר אנשי קשר, נגן מוזיקה וכן הלאה. מיישמי התקנים עשויים להחליף יישומים אלה בגרסאות חלופיות.
עם זאת, כל גרסה חלופית כזו חייבת לכבד את אותם דפוסי Intent שסופקו על ידי הפרויקט במעלה הזרם. לדוגמה, אם מכשיר מכיל נגן מוזיקה חלופי, הוא עדיין חייב לכבד את תבנית Intent שהונפקה על ידי יישומי צד שלישי כדי לבחור שיר.
היישומים הבאים נחשבים ליישומי ליבה של מערכת אנדרואיד:
- שעון שולחן
- דפדפן
- לוּחַ שָׁנָה
- מַחשְׁבוֹן
- מַצלֵמָה
- אנשי קשר
- אימייל
- גלריה
- GlobalSearch
- מַשׁגֵר
- LivePicker (כלומר, אפליקציית בורר הטפטים החיים; ניתן להשמיט אם המכשיר אינו תומך בטפטים חיים, לפי סעיף 3.8.5.)
- העברת הודעות (AKA "Mms")
- מוּסִיקָה
- טלפון
- הגדרות
- מקליט קול
יישומי הליבה של מערכת אנדרואיד כוללים רכיבי פעילות או שירות שונים הנחשבים "ציבוריים". כלומר, התכונה "android:exported" עשויה להיות נעדרת, או עשויה להיות בעלת הערך "true".
עבור כל פעילות או שירות המוגדרים באחת מיישומי הליבה של מערכת אנדרואיד, שאינם מסומנים כלא-ציבוריים באמצעות מאפיין android:exported עם הערך "false", הטמעות במכשיר חייבות לכלול רכיב מאותו סוג המטמיע את אותו מסנן Intent דפוסים כאפליקציית הליבה של מערכת אנדרואיד.
במילים אחרות, יישום מכשיר עשוי להחליף אפליקציות ליבה של מערכת אנדרואיד; עם זאת, אם כן, יישום המכשיר חייב לתמוך בכל דפוסי Intent שהוגדרו על ידי כל אפליקציית ליבה של מערכת אנדרואיד שמוחלפת.
3.2.3.2. עקיפות כוונות
מכיוון ש-Android היא פלטפורמה הניתנת להרחבה, מיישמי מכשירים חייבים לאפשר לעקוף כל תבנית Intent המוגדרת ביישומי מערכת הליבה על ידי יישומי צד שלישי. פרויקט הקוד הפתוח של אנדרואיד במעלה הזרם מאפשר זאת כברירת מחדל; אין ליישומי מכשירים לצרף הרשאות מיוחדות לשימוש של יישומי מערכת בדפוסי Intent אלה, או למנוע מיישומי צד שלישי להיקשר לתבניות אלה ולקבל שליטה עליהן. איסור זה כולל באופן ספציפי אך אינו מוגבל לנטרול ממשק המשתמש "בוחר" המאפשר למשתמש לבחור בין מספר יישומים שכולם מטפלים באותה דפוס Intent.
3.2.3.3. מרחבי שמות של כוונות
מיישמי מכשיר אינם חייבים לכלול כל רכיב אנדרואיד שמכבד כל דפוסי Intent או Broadcast Intent חדשים באמצעות ACTION, CATEGORY או מחרוזת מפתח אחרת במרחב השמות של Android.*. מיישמי מכשירים אינם חייבים לכלול רכיבי אנדרואיד המכבדים כל דפוסי Intent או Broadcast Intent באמצעות ACTION, CATEGORY או מחרוזת מפתח אחרת בחלל חבילה השייך לארגון אחר. מיישמי מכשירים אינם רשאים לשנות או להרחיב אף אחת מדפוסי הכוונות המשמשים את יישומי הליבה המפורטים בסעיף 3.2.3.1.
איסור זה מקביל לזה שצוין עבור שיעורי שפת Java בסעיף 3.6.
3.2.3.4. כוונות שידור
יישומי צד שלישי מסתמכים על הפלטפורמה כדי לשדר כוונות מסוימות כדי להודיע להם על שינויים בסביבת החומרה או התוכנה. מכשירים תואמי אנדרואיד חייבים לשדר את כוונות השידור הציבוריות בתגובה לאירועי מערכת מתאימים. כוונות השידור מתוארות בתיעוד ה-SDK.
3.3. תאימות API מקורית
קוד מנוהל הפועל ב-Dalvik יכול להתקשר לקוד מקורי המסופק בקובץ .apk של האפליקציה כקובץ ELF .so הידור עבור ארכיטקטורת החומרה המתאימה של המכשיר. יישומי מכשיר חייבים לכלול תמיכה בקוד הפועל בסביבה המנוהלת כדי להתקשר לקוד מקורי, תוך שימוש בסמנטיקה הסטנדרטית של Java Native Interface (JNI). ממשקי ה-API הבאים חייבים להיות זמינים לקוד מקורי:
- libc (ספריית C)
- libm (ספריית מתמטיקה)
- ממשק JNI
- libz (דחיסה של Zlib)
- liblog (רישום אנדרואיד)
- תמיכה מינימלית עבור C++
- תמיכה ב-OpenGL, כמתואר להלן
יישומי מכשיר חייבים לתמוך ב-OpenGL ES 1.0. מכשירים חסרי האצת חומרה חייבים ליישם את OpenGL ES 1.0 באמצעות מעבד תוכנה. יישומי מכשירים צריכים ליישם את OpenGL ES 1.1 באותה מידה שחומרת ההתקן תומכת. יישומי מכשירים צריכים לספק מימוש עבור OpenGL ES 2.0, אם החומרה מסוגלת לביצועים סבירים בממשקי API אלה.
ספריות אלו חייבות להיות תואמות מקור (כלומר תואמות כותרת) ותואמות בינאריות (עבור ארכיטקטורת מעבד נתונה) עם הגרסאות שסופקו ב-Bionic על ידי פרויקט הקוד הפתוח של Android. מכיוון שהמימושים של Bionic אינם תואמים באופן מלא ליישומים אחרים כגון ספריית GNU C, מיישמי מכשירים צריכים להשתמש ביישום אנדרואיד. אם מיישמי מכשירים משתמשים ביישום אחר של ספריות אלה, עליהם להבטיח תאימות כותרת, בינארית ותאימות התנהגותית.
יישומי מכשיר חייבים לדווח במדויק על ממשק היישומים הבינארי המקורי (ABI) הנתמך על ידי המכשיר, דרך ה-API של android.os.Build.CPU_ABI
. ה-ABI חייב להיות אחד מהערכים המתועדים בגרסה העדכנית ביותר של Android NDK, בקובץ docs/CPU-ARCH-ABIS.txt
. שים לב שגרסאות נוספות של Android NDK עשויות להציג תמיכה עבור ABIs נוספים.
תאימות קוד מקורי היא מאתגרת. מסיבה זו, יש לחזור על כך שמיישמים מכשירים מעודדים מאוד להשתמש בהטמעות במעלה הזרם של הספריות המפורטות לעיל, כדי להבטיח תאימות.
3.4. תאימות אינטרנט API
מפתחים ויישומים רבים מסתמכים על ההתנהגות של מחלקת android.webkit.WebView
[ משאבים, 8 ] עבור ממשקי המשתמש שלהם, כך שהיישום של WebView חייב להיות תואם בכל יישומי Android. יישום הקוד הפתוח של Android משתמש במנוע העיבוד של WebKit כדי ליישם את ה-WebView.
מכיוון שלא ניתן לפתח חבילת בדיקה מקיפה עבור דפדפן אינטרנט, מיישמים של מכשירים חייבים להשתמש במבנה הספציפי במעלה הזרם של WebKit בהטמעת WebView. במיוחד:
- WebView חייב להשתמש ב-530.17 WebKit build מעץ הקוד הפתוח של אנדרואיד במעלה הזרם עבור אנדרואיד 2.1. מבנה זה כולל סט ספציפי של פונקציונליות ותיקוני אבטחה עבור ה-WebView.
- מחרוזת סוכן המשתמש שדווחה על ידי WebView חייבת להיות בפורמט הזה:
Mozilla/5.0 (Linux; U; Android $(VERSION); $(LOCALE); $(MODEL) Build/$(BUILD)) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17
- הערך של המחרוזת $(VERSION) חייב להיות זהה לערך עבור
android.os.Build.VERSION.RELEASE
- הערך של המחרוזת $(LOCALE) צריך לעקוב אחר מוסכמות ISO עבור קוד מדינה ושפה, וצריך להתייחס למקום המוגדר הנוכחי של המכשיר
- הערך של המחרוזת $(MODEL) חייב להיות זהה לערך עבור
android.os.Build.MODEL
- הערך של המחרוזת $(BUILD) חייב להיות זהה לערך עבור
android.os.Build.ID
- הערך של המחרוזת $(VERSION) חייב להיות זהה לערך עבור
יישום עשוי לשלוח מחרוזת סוכן משתמש מותאמת אישית ביישום הדפדפן העצמאי. יתרה מכך, הדפדפן העצמאי עשוי להיות מבוסס על טכנולוגיית דפדפן חלופית (כגון Firefox, Opera וכו'). אולם, גם אם נשלחת יישום דפדפן חלופי, רכיב ה-WebView המסופק ליישומי צד שלישי חייב להיות מבוסס על WebKit, כאמור לעיל.
תצורת WebView חייבת לכלול תמיכה במסד הנתונים HTML5, מטמון יישומים וממשקי API של מיקום גיאוגרפי [ משאבים, 9 ]. ה-WebView חייב לכלול תמיכה בתג HTML5 <video>
בצורה כלשהי. אפליקציית הדפדפן העצמאית (בין אם מבוססת על אפליקציית WebKit Browser במעלה הזרם או תחליף של צד שלישי) חייבת לכלול תמיכה באותן תכונות HTML5 הרשומות רק עבור WebView.
3.5. תאימות התנהגותית של API
ההתנהגויות של כל אחד מסוגי ה-API (מנוהלים, רכים, מקוריים ואינטרנט) חייבות להיות עקביות עם היישום המועדף של פרויקט הקוד הפתוח של אנדרואיד במעלה הזרם [ משאבים, 3 ]. כמה תחומים ספציפיים של תאימות הם:
- אסור למכשירים לשנות את ההתנהגות או המשמעות של כוונה סטנדרטית
- אסור למכשירים לשנות את מחזור החיים או סמנטיקה של מחזור החיים של סוג מסוים של רכיבי מערכת (כגון שירות, פעילות, ספק תוכן וכו')
- אסור למכשירים לשנות את הסמנטיקה של הרשאה מסוימת
הרשימה לעיל אינה מקיפה, והאחריות מוטלת על מיישמי מכשירים כדי להבטיח תאימות התנהגותית. מסיבה זו, מיישמי מכשירים צריכים להשתמש בקוד המקור הזמין דרך פרויקט הקוד הפתוח של Android במידת האפשר, במקום להטמיע מחדש חלקים משמעותיים מהמערכת.
Suite Test Compatibility (CTS) בודק חלקים משמעותיים מהפלטפורמה להתאמה התנהגותית, אך לא את כולם. באחריות המיישם להבטיח תאימות התנהגותית לפרויקט הקוד הפתוח של אנדרואיד.
3.6. מרחבי שמות של API
אנדרואיד פועלת בהתאם למוסכמות מרחב השמות של החבילה והכיתה שהוגדרה על ידי שפת התכנות Java. כדי להבטיח תאימות עם יישומי צד שלישי, מיישמי מכשירים אינם חייבים לבצע שינויים אסורים (ראה להלן) במרחבי השמות של החבילות האלה:
- אין להטמיע מכשיר לשנות את ממשקי ה-API החשופים לציבור בפלטפורמת אנדרואיד על ידי שינוי כל שיטה או חתימות מחלקות, או על ידי הסרת מחלקות או שדות מחלקות.
- מיישמי מכשירים עשויים לשנות את היישום הבסיסי של ממשקי ה-API, אך אסור ששינויים כאלה ישפיעו על ההתנהגות המוצהרת ועל חתימת שפת ה-Java של ממשקי API שנחשפו לציבור.
- למיישמים של מכשירים אסור להוסיף אלמנטים שנחשפו לציבור (כגון מחלקות או ממשקים, או שדות או שיטות למחלקות או ממשקים קיימים) לממשקי ה-API שלמעלה.
"אלמנט חשוף לציבור" הוא כל מבנה שאינו מעוטר בסמן "@hide" בקוד המקור של Android במעלה הזרם. במילים אחרות, מיישמי מכשירים אינם חייבים לחשוף ממשקי API חדשים או לשנות ממשקי API קיימים במרחבי השמות שצוינו לעיל. מיישמי מכשירים עשויים לבצע שינויים פנימיים בלבד, אך אסור לפרסם שינויים אלה או להיחשף בדרך אחרת למפתחים.
מיישמי מכשירים עשויים להוסיף ממשקי API מותאמים אישית, אך אסור שכל ממשקי API כאלה יהיו במרחב שמות בבעלות ארגון אחר או מתייחס אליו. לדוגמה, מיישמי מכשירים אינם חייבים להוסיף ממשקי API למרחב השמות com.google.* או דומה; רק Google רשאית לעשות זאת. באופן דומה, אסור לגוגל להוסיף ממשקי API למרחבי השמות של חברות אחרות.
אם מיישם מכשיר מציע לשפר את אחד ממרחבי השמות של החבילות לעיל (כגון על ידי הוספת פונקציונליות חדשה ושימושית לממשק API קיים, או הוספת ממשק API חדש), המיישם צריך לבקר בsource.android.com ולהתחיל בתהליך לתרומה של שינויים ו קוד, לפי המידע באתר זה.
שימו לב שההגבלות לעיל תואמות למוסכמות הסטנדרטיות למתן שמות לממשקי API בשפת התכנות Java; סעיף זה פשוט נועד לחזק את המוסכמות הללו ולהפוך אותן למחייבות באמצעות הכללה בהגדרת תאימות זו.
3.7. תאימות למכונות וירטואליות
יישומי מכשיר חייבים לתמוך במפרט קוד הבתים המלא של Dalvik Executable (DEX) ובסמנטיקה של Dalvik Virtual Machine [ Resources, 10 ].
יישומי מכשירים חייבים להגדיר את Dalvik להקצות לפחות 16MB של זיכרון לכל אפליקציה במכשירים עם מסכים מסווגים בצפיפות בינונית או נמוכה. יישומי מכשירים חייבים להגדיר את Dalvik להקצות לפחות 24MB של זיכרון לכל אפליקציה במכשירים עם מסכים המסווגים כצפיפות גבוהה. שים לב שיישומי מכשירים עשויים להקצות יותר זיכרון מהנתונים הללו, אך אינם נדרשים לכך.
3.8. תאימות ממשק משתמש
פלטפורמת אנדרואיד כוללת כמה ממשקי API למפתחים המאפשרים למפתחים להתחבר לממשק המשתמש של המערכת. יישומי מכשירים חייבים לשלב ממשקי משתמש UI סטנדרטיים אלה בממשקי משתמש מותאמים אישית שהם מפתחים, כפי שמוסבר להלן.
3.8.1. ווידג'טים
אנדרואיד מגדירה סוג רכיב ו-API ומחזור חיים תואמים המאפשרים ליישומים לחשוף "AppWidget" למשתמש הקצה [ Resources, 11 ]. מהדורת ההפניה של Android Open Source כוללת יישום Launcher הכולל רכיבי ממשק משתמש המאפשרים למשתמש להוסיף, להציג ולהסיר AppWidgets ממסך הבית.
מיישמי התקנים עשויים להחליף חלופה ל-Reference Launcher (כלומר מסך הבית). משגרים אלטרנטיביים צריכים לכלול תמיכה מובנית ב-AppWidgets, ולחשוף רכיבי ממשק משתמש כדי להוסיף, להגדיר, להציג ולהסיר AppWidgets ישירות בתוך ה-Launcher. משגרים אלטרנטיביים עשויים להשמיט את רכיבי ממשק המשתמש הללו; עם זאת, אם הם מושמטים, מיישם המכשיר חייב לספק אפליקציה נפרדת הנגישה מה-Launcher המאפשרת למשתמשים להוסיף, להגדיר, להציג ולהסיר AppWidgets.
3.8.2. התראות
אנדרואיד כולל ממשקי API המאפשרים למפתחים להודיע למשתמשים על אירועים בולטים [ משאבים, 12 ]. מיישמי התקנים חייבים לספק תמיכה עבור כל סוג הודעה שהוגדר כך; במיוחד: צלילים, רטט, אור ושורת מצב.
בנוסף, ההטמעה חייבת להציג כהלכה את כל המשאבים (סמלים, קבצי קול וכו') הניתנים בממשקי ה-API [ משאבים, 13 ], או במדריך הסגנון של סמל שורת המצב [ משאבים, 14 ]. מיישמי מכשירים עשויים לספק חווית משתמש חלופית להודעות מזו שמסופקת על ידי יישום הקוד הפתוח של Android; עם זאת, מערכות הודעות חלופיות כאלה חייבות לתמוך במשאבי הודעות קיימים, כאמור לעיל.
3.8.3. לחפש
אנדרואיד כולל ממשקי API [ משאבים, 15 ] המאפשרים למפתחים לשלב חיפוש באפליקציות שלהם, ולחשוף את נתוני האפליקציה שלהם בחיפוש המערכת הגלובלי. באופן כללי, פונקציונליות זו מורכבת מממשק משתמש יחיד, כלל-מערכתי, המאפשר למשתמשים להזין שאילתות, מציג הצעות תוך כדי הקלדת המשתמשים ומציג תוצאות. ממשקי ה-API של אנדרואיד מאפשרים למפתחים לעשות שימוש חוזר בממשק זה כדי לספק חיפוש בתוך האפליקציות שלהם, ומאפשרים למפתחים לספק תוצאות לממשק המשתמש של החיפוש הגלובלי הנפוץ.
יישומי מכשיר חייבים לכלול ממשק משתמש חיפוש יחיד, משותף, מערכת רחב המסוגל להציע הצעות בזמן אמת בתגובה לקלט המשתמש. יישומי מכשירים חייבים ליישם את ממשקי ה-API המאפשרים למפתחים לעשות שימוש חוזר בממשק משתמש זה כדי לספק חיפוש בתוך האפליקציות שלהם. יישומי מכשירים חייבים ליישם את ממשקי ה-API המאפשרים ליישומי צד שלישי להוסיף הצעות לתיבת החיפוש כאשר היא מופעלת במצב חיפוש גלובלי. אם לא מותקנים יישומי צד שלישי שעושים שימוש בפונקציונליות זו, התנהגות ברירת המחדל צריכה להיות הצגת תוצאות והצעות של מנוע החיפוש באינטרנט.
יישומי מכשירים עשויים לשלוח ממשקי משתמש חלופיים לחיפוש, אך הם צריכים לכלול כפתור חיפוש ייעודי קשיח או רך, שניתן להשתמש בו בכל עת בכל אפליקציה כדי להפעיל את מסגרת החיפוש, עם ההתנהגות המפורטת בתיעוד ה-API.
3.8.4. טוסטים
יישומים יכולים להשתמש בממשק ה-API של "Toast" (מוגדר ב[ משאבים, 16 ]) כדי להציג מחרוזות קצרות שאינן מודאליות למשתמש הקצה, שנעלמות לאחר פרק זמן קצר. יישומי מכשיר חייבים להציג טוסט מיישומים למשתמשי קצה בצורה כלשהי עם נראות גבוהה.
3.8.5. רקעים חיים
אנדרואיד מגדירה סוג רכיב ו-API ומחזור חיים תואמים המאפשרים ליישומים לחשוף אחד או יותר "טפטים חיים" למשתמש הקצה [ משאבים, 17 ]. טפטים חיים הם אנימציות, דפוסים או תמונות דומות עם יכולות קלט מוגבלות המוצגות כטפט, מאחורי יישומים אחרים.
החומרה נחשבת למסוגלת להריץ בצורה מהימנה טפטים חיים אם היא יכולה להריץ את כל הטפטים החיים, ללא הגבלות על פונקציונליות, בקצב מסגרת סביר ללא השפעה שלילית על יישומים אחרים. אם מגבלות בחומרה גורמות לקריסה של טפטים ו/או יישומים, תקלות, צריכת כוח מעבד או סוללה מוגזמת, או הפעלה בקצבי פריימים נמוכים באופן בלתי מקובל, החומרה נחשבת לא מסוגלת להפעיל טפטים חיים. כדוגמה, טפטים חיים מסוימים עשויים להשתמש בהקשר Open GL 1.0 או 2.0 כדי להציג את התוכן שלהם. טפטים חיים לא יפעלו בצורה מהימנה על חומרה שאינה תומכת במספר הקשרים של OpenGL מכיוון שהשימוש בטפט חי בהקשר של OpenGL עלול להתנגש עם יישומים אחרים המשתמשים גם הם בהקשר של OpenGL.
יישומי מכשיר המסוגלים להפעיל טפטים חיים בצורה מהימנה כמתואר לעיל צריכות ליישם טפטים חיים. מימושי מכשיר שנקבעו לא להפעיל טפטים חיים בצורה מהימנה כמתואר לעיל, אסור ליישם טפטים חיים.
4. התייחסות לתאימות תוכנה
מיישמי מכשירים חייבים לבדוק תאימות ליישום באמצעות יישומי הקוד הפתוח הבאים:
- מחשבון (כלול ב-SDK)
- Lunar Lander (כלול ב-SDK)
- יישומי "אפליקציות לאנדרואיד" [ משאבים, 18 ].
כל אפליקציה למעלה חייבת להפעיל ולהתנהג בצורה נכונה ביישום, כדי שהיישום ייחשב תואם.
בנוסף, יישומי מכשירים חייבים לבדוק כל פריט תפריט (כולל כל תפריטי המשנה) של כל אחד מהיישומים הבאים לבדיקת עשן:
כל מקרה בדיקה ביישומים לעיל חייב לפעול כהלכה ביישום המכשיר.
5. תאימות אריזות יישומים
יישומי מכשירים חייבים להתקין ולהפעיל קבצי ".apk" של אנדרואיד כפי שנוצרו על ידי הכלי "aapt" הכלול ב-SDK הרשמי של Android [ משאבים, 19 ].
אין להרחיב את הפורמטים של .apk [ Resources, 20 ], Android Manifest [ Resources, 21 ] או Dalvik bytecode [ Resources, 10 ] להטמעות של מכשירים בצורה כזו שתמנע מקבצים אלה להתקין ולהפעיל כהלכה במכשירים תואמים אחרים . מיישמי התקנים צריכים להשתמש בהטמעת ההפניה במעלה הזרם של Dalvik, ובמערכת ניהול החבילות של הטמעת הייחוס.
6. תאימות מולטימדיה
יישומי מכשיר חייבים לתמוך ב-Codec המולטימדיה הבאים. כל הקודקים הללו מסופקים כהטמעות תוכנה ביישום האנדרואיד המועדף מפרויקט הקוד הפתוח של Android.
לידיעתך, לא גוגל ולא ה-Open Handset Alliance לא מציגים שום מצג ש-codec אלה אינם מרותקים לפטנטים של צד שלישי. מי שמתכוון להשתמש בקוד מקור זה במוצרי חומרה או תוכנה, מומלץ שהטמעות של קוד זה, כולל בתוכנות קוד פתוח או תוכנות שיתוף, עשויות לדרוש רישיונות פטנט מבעלי הפטנטים הרלוונטיים.
Note that the table above does not list specific bitrate requirements for most video codecs. The reason for this is that in practice, current device hardware does not necessarily support bitrates that map exactly to the required bitrates specified by the relevant standards. Instead, device implementations SHOULD support the highest bitrate practical on the hardware, up to the limits defined by the specifications.
7. Developer Tool Compatibility
Device implementations MUST support the Android Developer Tools provided in the Android SDK. Specifically, Android-compatible devices MUST be compatible with:
- Android Debug Bridge (known as adb) [ Resources, 19 ]
Device implementations MUST support alladb
functions as documented in the Android SDK. The device-sideadb
daemon SHOULD be inactive by default, but there MUST be a user-accessible mechanism to turn on the Android Debug Bridge. - Dalvik Debug Monitor Service (known as ddms) [ Resources, 19 ]
Device implementations MUST support allddms
features as documented in the Android SDK. Asddms
usesadb
, support forddms
SHOULD be inactive by default, but MUST be supported whenever the user has activated the Android Debug Bridge, as above. - Monkey [ Resources, 22 ]
Device implementations MUST include the Monkey framework, and make it available for applications to use.
8. Hardware Compatibility
Android is intended to support device implementers creating innovative form factors and configurations. At the same time Android developers expect certain hardware, sensors and APIs across all Android device. This section lists the hardware features that all Android 2.1 compatible devices must support.
If a device includes a particular hardware component that has a corresponding API for third-party developers, the device implementation MUST implement that API as defined in the Android SDK documentation. If an API in the SDK interacts with a hardware component that is stated to be optional and the device implementation does not possess that component:
- class definitions for the component's APIs MUST be present
- the API's behaviors MUST be implemented as no-ops in some reasonable fashion
- API methods MUST return null values where permitted by the SDK documentation
- API methods MUST return no-op implementations of classes where null values are not permitted by the SDK documentation
A typical example of a scenario where these requirements apply is the telephony API: even on non-phone devices, these APIs must be implemented as reasonable no-ops.
Device implementations MUST accurate report accurate hardware configuration information via the getSystemAvailableFeatures()
and hasSystemFeature(String)
methods on the android.content.pm.PackageManager
class.
8.1. Display
Android 2.1 includes facilities that perform certain automatic scaling and transformation operations under some circumstances, to ensure that third-party applications run reasonably well on a variety of hardware configurations [ Resources, 23 ]. Devices MUST properly implement these behaviors, as detailed in this section.
For Android 2.1, this are the most common display configurations:
Device implementations corresponding to one of the standard configurations above MUST be configured to report the indicated screen size to applications via the android.content.res.Configuration
[ Resources, 24 ] class.
Some .apk packages have manifests that do not identify them as supporting a specific density range. When running such applications, the following constraints apply:
- Device implementations MUST interpret resources in a .apk that lack a density qualifier as defaulting to "medium" (known as "mdpi" in the SDK documentation.)
- When operating on a "low" density screen, device implementations MUST scale down medium/mdpi assets by a factor of 0.75.
- When operating on a "high" density screen, device implementations MUST scale up medium/mdpi assets by a factor of 1.5.
- Device implementations MUST NOT scale assets within a density range, and MUST scale assets by exactly these factors between density ranges.
8.1.2. Non-Standard Display Configurations
Display configurations that do not match one of the standard configurations listed in Section 8.1.1 require additional consideration and work to be compatible. Device implementers MUST contact Android Compatibility Team as provided for in Section 12 to obtain classifications for screen-size bucket, density, and scaling factor. When provided with this information, device implementations MUST implement them as specified.
Note that some display configurations (such as very large or very small screens, and some aspect ratios) are fundamentally incompatible with Android 2.1; therefore device implementers are encouraged to contact Android Compatibility Team as early as possible in the development process.
8.1.3. Display Metrics
Device implementations MUST report correct valuesfor all display metrics defined in android.util.DisplayMetrics
[ Resources, 25 ].
8.2. Keyboard
- MUST include support for the Input Management Framework (which allows third party developers to create Input Management Engines -- ie soft keyboard) as detailed at developer.android.com
- MUST provide at least one soft keyboard implementation (regardless of whether a hard keyboard is present)
- MAY include additional soft keyboard implementations
- MAY include a hardware keyboard
- MUST NOT include a hardware keyboard that does not match one of the formats specified in
android.content.res.Configuration.keyboard
[ Resources, 24 ] (that is, QWERTY, or 12-key)
8.3. Non-touch Navigation
- MAY omit a non-touch navigation options (that is, may omit a trackball, d-pad, or wheel)
- MUST report the correct value for
android.content.res.Configuration.navigation
[ Resources, 24 ]
8.4. Screen Orientation
Compatible devices MUST support dynamic orientation by applications to either portrait or landscape screen orientation. That is, the device must respect the application's request for a specific screen orientation. Device implementations MAY select either portrait or landscape orientation as the default.
Devices MUST report the correct value for the device's current orientation, whenever queried via the android.content.res.Configuration.orientation, android.view.Display.getOrientation(), or other APIs.
8.5. Touchscreen input
- MUST have a touchscreen
- MAY have either capacative or resistive touchscreen
- MUST report the value of
android.content.res.Configuration
[ Resources, 24 ] reflecting corresponding to the type of the specific touchscreen on the device
8.6. USB
- MUST implement a USB client, connectable to a USB host with a standard USB-A port
- MUST implement the Android Debug Bridge over USB (as described in Section 7)
- MUST implement the USB mass storage specification, to allow a host connected to the device to access the contents of the /sdcard volume
- SHOULD use the micro USB form factor on the device side
- MAY include a non-standard port on the device side, but if so MUST ship with a cable capable of connecting the custom pinout to standard USB-A port
8.7. Navigation keys
The Home, Menu and Back functions are essential to the Android navigation paradigm. Device implementations MUST make these functions available to the user at all times, regardless of application state. These functions SHOULD be implemented via dedicated buttons. They MAY be implemented using software, gestures, touch panel, etc., but if so they MUST be always accessible and not obscure or interfere with the available application display area.
Device implementers SHOULD also provide a dedicated search key. Device implementers MAY also provide send and end keys for phone calls.
8.8. Wireless Data Networking
Device implementations MUST include support for wireless high-speed data networking. Specifically, device implementations MUST include support for at least one wireless data standard capable of 200Kbit/sec or greater. Examples of technologies that satisfy this requirement include EDGE, HSPA, EV-DO, 802.11g, etc.
If a device implementation includes a particular modality for which the Android SDK includes an API (that is, WiFi, GSM, or CDMA), the implementation MUST support the API.
Devices MAY implement more than one form of wireless data connectivity. Devices MAY implement wired data connectivity (such as Ethernet), but MUST nonetheless include at least one form of wireless connectivity, as above.
8.9. Camera
Device implementations MUST include a camera. The included camera:
- MUST have a resolution of at least 2 megapixels
- SHOULD have either hardware auto-focus, or software auto-focus implemented in the camera driver (transparent to application software)
- MAY have fixed-focus or EDOF (extended depth of field) hardware
- MAY include a flash. If the Camera includes a flash, the flash lamp MUST NOT be lit while an android.hardware.Camera.PreviewCallback instance has been registered on a Camera preview surface, unless the application has explicitly enabled the flash by enabling the
FLASH_MODE_AUTO
orFLASH_MODE_ON
attributes of aCamera.Parameters
object. Note that this constraint does not apply to the device's built-in system camera application, but only to third-party applications usingCamera.PreviewCallback
.
Device implementations MUST implement the following behaviors for the camera-related APIs:
- If an application has never called android.hardware.Camera.Parameters.setPreviewFormat(int), then the device MUST use android.hardware.PixelFormat.YCbCr_420_SP for preview data provided to application callbacks.
- If an application registers an android.hardware.Camera.PreviewCallback instance and the system calls the onPreviewFrame() method when the preview format is YCbCr_420_SP, the data in the byte[] passed into onPreviewFrame() must further be in the NV21 encoding format. (This is the format used natively by the 7k hardware family.) That is, NV21 MUST be the default.
Device implementations MUST implement the full Camera API included in the Android 2.1 SDK documentation [ Resources, 26 ]), regardless of whether the device includes hardware autofocus or other capabilities. For instance, cameras that lack autofocus MUST still call any registered android.hardware.Camera.AutoFocusCallback
instances (even though this has no relevance to a non-autofocus camera.)
Device implementations MUST recognize and honor each parameter name defined as a constant on the android.hardware.Camera.Parameters
class, if the underlying hardware supports the feature. If the device hardware does not support a feature, the API must behave as documented. Conversely, Device implementations MUST NOT honor or recognize string constants passed to the android.hardware.Camera.setParameters()
method other than those documented as constants on the android.hardware.Camera.Parameters
, unless the constants are prefixed with a string indicating the name of the device implementer. That is, device implementations MUST support all standard Camera parameters if the hardware allows, and MUST NOT support custom Camera parameter types unless the parameter names are clearly indicated via a string prefix to be non-standard.
8.10. Accelerometer
Device implementations MUST include a 3-axis accelerometer and MUST be able to deliver events at 50 Hz or greater. The coordinate system used by the accelerometer MUST comply with the Android sensor coordinate system as detailed in the Android APIs (see [ Resources, 27 ]).
8.11. Compass
Device implementations MUST include a 3-axis compass and MUST be able to deliver events 10 Hz or greater. The coordinate system used by the compass MUST comply with the Android sensor coordinate system as defined in the Android API (see [ Resources, 27 ]).
8.12. GPS
Device implementations MUST include a GPS, and SHOULD include some form of "assisted GPS" technique to minimize GPS lock-on time.
8.13. Telephony
Android 2.1 MAY be used on devices that do not include telephony hardware. That is, Android 2.1 is compatible with devices that are not phones. However, if a device implementation does include GSM or CDMA telephony, it MUST implement the full support for the API for that technology. Device implementations that do not include telephony hardware MUST implement the full APIs as no-ops.
See also Section 8.8, Wireless Data Networking.
8.14. Memory and Storage
Device implementations MUST have at least 92MB of memory available to the kernel and userspace. The 92MB MUST be in addition to any memory dedicated to hardware components such as radio, memory, and so on that is not under the kernel's control.
Device implementations MUST have at least 150MB of non-volatile storage available for user data. That is, the /data
partition must be at least 150MB.
8.15. Application Shared Storage
Device implementations MUST offer shared storage for applications. The shared storage provided MUST be at least 2GB in size.
Device implementations MUST be configured with shared storage mounted by default, "out of the box". If the shared storage is not mounted on the Linux path /sdcard
, then the device MUST include a Linux symbolic link from /sdcard
to the actual mount point.
Device implementations MUST enforce as documented the android.permission.WRITE_EXTERNAL_STORAGE
permission on this shared storage. Shared storage MUST otherwise be writable by any application that obtains that permission.
Device implementations MAY have hardware for user-accessible removable storage, such as a Secure Digital card. Alternatively, device implementations MAY allocate internal (non-removable) storage as shared storage for apps.
Regardless of the form of shared storage used, the shared storage MUST implement USB mass storage, as described in Section 8.6. As shipped out of the box, the shared storage MUST be mounted with the FAT filesystem.
It is illustrative to consider two common examples. If a device implementation includes an SD card slot to satisfy the shared storage requirement, a FAT-formatted SD card 2GB in size or larger MUST be included with the device as sold to users, and MUST be mounted by default. Alternatively, if a device implementation uses internal fixed storage to satisfy this requirement, that storage MUST be 2GB in size or larger and mounted on /sdcard
(or /sdcard
MUST be a symbolic link to the physical location if it is mounted elsewhere.)
8.16. Bluetooth
Device implementations MUST include a Bluetooth transceiver. Device implementations MUST enable the RFCOMM-based Bluetooth API as described in the SDK documentation [ Resources, 29 ]. Device implementations SHOULD implement relevant Bluetooth profiles, such as A2DP, AVRCP, OBEX, etc. as appropriate for the device.
9. Performance Compatibility
One of the goals of the Android Compatibility Program is to enable consistent application experience to consumers. Compatible implementations must ensure not only that applications simply run correctly on the device, but that they do so with reasonable performance and overall good user experience. Device implementations MUST meet the key performance metrics of an Android 2.1 compatible device defined in the table below:
10. Security Model Compatibility
Device implementations MUST implement a security model consistent with the Android platform security model as defined in Security and Permissions reference document in the APIs [ Resources, 28 ] in the Android developer documentation. Device implementations MUST support installation of self-signed applications without requiring any additional permissions/certificates from any third parties/authorities. Specifically, compatible devices MUST support the security mechanisms described in the follow sub-sections.
10.1. Permissions
Device implementations MUST support the Android permissions model as defined in the Android developer documentation [ Resources, 28 ]. Specifically, implementations MUST enforce each permission defined as described in the SDK documentation; no permissions may be omitted, altered, or ignored. Implementations MAY add additional permissions, provided the new permission ID strings are not in the android.* namespace.
10.2. UID and Process Isolation
Device implementations MUST support the Android application sandbox model, in which each application runs as a unique Unix-style UID and in a separate process. Device implementations MUST support running multiple applications as the same Linux user ID, provided that the applications are properly signed and constructed, as defined in the Security and Permissions reference [ Resources, 28 ].
10.3. Filesystem Permissions
Device implementations MUST support the Android file access permissions model as defined in as defined in the Security and Permissions reference [ Resources, 28 ].
11. Compatibility Test Suite
Device implementations MUST pass the Android Compatibility Test Suite (CTS) [ Resources, 2 ] available from the Android Open Source Project, using the final shipping software on the device. Additionally, device implementers SHOULD use the reference implementation in the Android Open Source tree as much as possible, and MUST ensure compatibility in cases of ambiguity in CTS and for any reimplementations of parts of the reference source code.
The CTS is designed to be run on an actual device. Like any software, the CTS may itself contain bugs. The CTS will be versioned independently of this Compatibility Definition, and multiple revisions of the CTS may be released for Android 2.1. Device implementations MUST pass the latest CTS version available at the time the device software is completed.
12. Updatable Software
Device implementations MUST include a mechanism to replace the entirety of the system software. The mechanism need not perform "live" upgrades -- that is, a device restart MAY be required.
Any method can be used, provided that it can replace the entirety of the software preinstalled on the device. For instance, any of the following approaches will satisfy this requirement:
- Over-the-air (OTA) downloads with offline update via reboot
- "Tethered" updates over USB from a host PC
- "Offline" updates via a reboot and update from a file on removable storage
The update mechanism used MUST support updates without wiping user data. Note that the upstream Android software includes an update mechanism that satisfies this requirement.
If an error is found in a device implementation after it has been released but within its reasonable product lifetime that is determined in consultation with the Android Compatibility Team to affect the compatibility of thid-party applications, the device implementer MUST correct the error via a software update available that can be applied per the mechanism just described.
13. Contact Us
You can contact the document authors at compatibility@android.com for clarifications and to bring up any issues that you think the document does not cover.