คำจำกัดความความเข้ากันได้ของ Android 4.4

ฉบับที่ 1
อัปเดตล่าสุด: 27 พฤศจิกายน 2013

Copyright © 2013, Google Inc. สงวนลิขสิทธิ์
compatibility@android.com

สารบัญ

1. บทนำ
2. แหล่งข้อมูล
3. ซอฟต์แวร์
3.1. ความเข้ากันได้ของ Managed API
3.2. ความเข้ากันได้แบบ Soft API
3.3. ความเข้ากันได้ของ Native API
3.4. ความเข้ากันได้ของเว็บ
3.5. ความเข้ากันได้ของลักษณะการทํางานของ API
3.6. เนมสเปซของ API
3.7. ความเข้ากันได้ของเครื่องเสมือน
3.8. ความเข้ากันได้ของอินเทอร์เฟซผู้ใช้
3.9 การดูแลระบบอุปกรณ์
3.10 การช่วยเหลือพิเศษ
3.11 การอ่านออกเสียงข้อความ
4. ความเข้ากันได้ของแพ็กเกจแอปพลิเคชัน
5. ความเข้ากันได้ของมัลติมีเดีย
6. ความเข้ากันได้ของเครื่องมือและตัวเลือกสำหรับนักพัฒนาแอป
7. ความเข้ากันได้ของฮาร์ดแวร์
7.1. การแสดงผลและกราฟิก
7.2. อุปกรณ์อินพุต
7.3. เซ็นเซอร์
7.4. การเชื่อมต่อข้อมูล
7.5. กล้อง
7.6. หน่วยความจำและพื้นที่เก็บข้อมูล
7.7. USB
8. ความเข้ากันได้ด้านประสิทธิภาพ
9. ความเข้ากันได้ของรูปแบบการรักษาความปลอดภัย
10. การทดสอบความเข้ากันได้ของซอฟต์แวร์
11. ซอฟต์แวร์ที่อัปเดตได้
12. บันทึกการเปลี่ยนแปลงของเอกสาร
13. ติดต่อเรา

1. ข้อมูลเบื้องต้น

เอกสารนี้จะระบุข้อกำหนดที่อุปกรณ์ต้องปฏิบัติตามเพื่อให้ใช้งานร่วมกับ Android 4.4 ได้

การใช้คําว่า "ต้อง" "ต้องไม่" "ต้อง" "ต้องไม่" "ควร" "ไม่ควร" "แนะนํา" "อาจ" และ "ไม่บังคับ" เป็นไปตามมาตรฐาน IETF ที่ระบุไว้ใน RFC2119 [แหล่งข้อมูล, 1]

"ผู้ติดตั้งใช้งานอุปกรณ์" หรือ "ผู้ติดตั้งใช้งาน" หมายถึงบุคคลหรือองค์กรที่พัฒนาโซลูชันฮาร์ดแวร์/ซอฟต์แวร์ที่ใช้ Android 4.4 ตามที่ใช้ในเอกสารนี้ "การติดตั้งใช้งานอุปกรณ์" หรือ "การติดตั้งใช้งาน" คือโซลูชันฮาร์ดแวร์/ซอฟต์แวร์ที่พัฒนาขึ้น

การติดตั้งใช้งานอุปกรณ์ต้องเป็นไปตามข้อกำหนดที่ระบุไว้ในคำจำกัดความความเข้ากันได้นี้ รวมถึงเอกสารที่รวมไว้ผ่านการอ้างอิง จึงจะถือว่าเข้ากันได้กับ Android 4.4

ในกรณีที่คำจำกัดความนี้หรือการทดสอบซอฟต์แวร์ที่อธิบายไว้ในส่วนที่ 10 ไม่ได้กล่าวถึง ไม่ชัดเจน หรือไม่สมบูรณ์ การติดตั้งใช้งานอุปกรณ์จะต้องรับผิดชอบในการตรวจสอบความเข้ากันได้กับการติดตั้งใช้งานที่มีอยู่

ด้วยเหตุนี้ โครงการโอเพนซอร์ส Android [แหล่งข้อมูล 3] จึงถือเป็นทั้งข้อมูลอ้างอิงและการใช้งาน Android ที่แนะนำ เราขอแนะนำให้ผู้ติดตั้งใช้งานอุปกรณ์อิงตามซอร์สโค้ด "ต้นทาง" ที่พร้อมใช้งานจากโครงการโอเพนซอร์ส Android มากที่สุด แม้ว่าในทางทฤษฎีแล้ว คอมโพเนนต์บางรายการอาจแทนที่ด้วยการติดตั้งใช้งานทางเลือกได้ แต่เราไม่แนะนําอย่างยิ่งให้ทําเช่นนั้น เนื่องจากจะทำให้การทดสอบซอฟต์แวร์ผ่านเกณฑ์ได้ยากขึ้นอย่างมาก ผู้ติดตั้งใช้งานมีหน้าที่รับผิดชอบในการตรวจสอบความเข้ากันได้ของลักษณะการทำงานอย่างเต็มรูปแบบกับการติดตั้งใช้งาน Android มาตรฐาน ซึ่งรวมถึงและนอกเหนือจากชุดเครื่องมือทดสอบความเข้ากันได้ สุดท้าย โปรดทราบว่าเอกสารนี้ห้ามไม่ให้ใช้ชิ้นส่วนทดแทนและการแก้ไขบางอย่างอย่างชัดเจน

2. แหล่งข้อมูล

  1. ระดับข้อกําหนด IETF RFC2119: http://www.ietf.org/rfc/rfc2119.txt
  2. ภาพรวมโปรแกรมความเข้ากันได้กับ Android: http://source.android.com/docs/compatibility/index.html
  3. โครงการโอเพนซอร์ส Android: http://source.android.com/
  4. คําจํากัดความและเอกสารประกอบของ API: http://developer.android.com/reference/packages.html
  5. ข้อมูลอ้างอิงเกี่ยวกับสิทธิ์ของ Android: http://developer.android.com/reference/android/Manifest.permission.html
  6. ข้อมูลอ้างอิงสำหรับ android.os.Build: http://developer.android.com/reference/android/os/Build.html
  7. สตริงเวอร์ชันที่อนุญาตของ Android 4.4: http://source.android.com/docs/compatibility/4.4/versions.html
  8. Renderscript: http://developer.android.com/guide/topics/graphics/renderscript.html
  9. การเร่งด้วยฮาร์ดแวร์: http://developer.android.com/guide/topics/graphics/hardware-accel.html
  10. คลาส android.webkit.WebView: http://developer.android.com/reference/android/webkit/WebView.html
  11. HTML5: http://www.whatwg.org/specs/web-apps/current-work/multipage/
  12. ความสามารถออฟไลน์ของ HTML5: http://dev.w3.org/html5/spec/Overview.html#offline
  13. แท็กวิดีโอ HTML5: http://dev.w3.org/html5/spec/Overview.html#video
  14. API ตําแหน่งทางภูมิศาสตร์ HTML5/W3C: http://www.w3.org/TR/geolocation-API/
  15. HTML5/W3C webstorage API: http://www.w3.org/TR/webstorage/
  16. HTML5/W3C IndexedDB API: http://www.w3.org/TR/IndexedDB/
  17. ข้อกำหนดของเครื่องเสมือน Dalvik: มีอยู่ในซอร์สโค้ด Android ที่ dalvik/docs
  18. AppWidget: http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
  19. การแจ้งเตือน: http://developer.android.com/guide/topics/ui/notifiers/notifications.html
  20. แหล่งข้อมูลแอปพลิเคชัน: http://code.google.com/android/reference/available-resources.html
  21. หลักเกณฑ์ด้านสไตล์ของไอคอนในแถบสถานะ: http://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar.html
  22. Search Manager: http://developer.android.com/reference/android/app/SearchManager.html
  23. ข้อความแจ้ง: http://developer.android.com/reference/android/widget/Toast.html
  24. ธีม: http://developer.android.com/guide/topics/ui/themes.html
  25. คลาส R.style: http://developer.android.com/reference/android/R.style.html
  26. วอลเปเปอร์ภาพเคลื่อนไหว: https://android-developers.googleblog.com/2010/02/live-wallpapers.html
  27. การดูแลจัดการอุปกรณ์ Android: http://developer.android.com/guide/topics/admin/device-admin.html
  28. ข้อมูลอ้างอิงเกี่ยวกับ DevicePolicyManager: http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html
  29. API บริการการช่วยเหลือพิเศษของ Android: http://developer.android.com/reference/android/accessibilityservice/package-summary.html
  30. Android Accessibility API: http://developer.android.com/reference/android/view/accessibility/package-summary.html
  31. โปรเจ็กต์ Eyes Free: http://code.google.com/p/eyes-free
  32. Text-To-Speech API: http://developer.android.com/reference/android/speech/tts/package-summary.html
  33. เอกสารประกอบของเครื่องมืออ้างอิง (สําหรับ adb, aapt, ddms, systrace): http://developer.android.com/guide/developing/tools/index.html
  34. คําอธิบายไฟล์ APK ของ Android: http://developer.android.com/guide/topics/fundamentals.html
  35. ไฟล์ Manifest: http://developer.android.com/guide/topics/manifest/manifest-intro.html
  36. เครื่องมือทดสอบ Monkey: https://developer.android.com/studio/test/other-testing-tools/monkey
  37. คลาส android.content.pm.PackageManager ของ Android และรายการฟีเจอร์ของฮาร์ดแวร์: http://developer.android.com/reference/android/content/pm/PackageManager.html
  38. การรองรับหน้าจอหลายหน้าจอ: http://developer.android.com/guide/practices/screens_support.html
  39. android.util.DisplayMetrics: http://developer.android.com/reference/android/util/DisplayMetrics.html
  40. android.content.res.Configuration: http://developer.android.com/reference/android/content/res/Configuration.html
  41. android.hardware.SensorEvent: http://developer.android.com/reference/android/hardware/SensorEvent.html
  42. Bluetooth API: http://developer.android.com/reference/android/bluetooth/package-summary.html
  43. โปรโตคอล Push ของ NDEF: http://source.android.com/docs/compatibility/ndef-push-protocol.pdf
  44. MIFARE MF1S503X: http://www.nxp.com/documents/data_sheet/MF1S503x.pdf
  45. MIFARE MF1S703X: http://www.nxp.com/documents/data_sheet/MF1S703x.pdf
  46. MIFARE MF0ICU1: http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf
  47. MIFARE MF0ICU2: http://www.nxp.com/documents/short_data_sheet/MF0ICU2_SDS.pdf
  48. MIFARE AN130511: http://www.nxp.com/documents/application_note/AN130511.pdf
  49. MIFARE AN130411: http://www.nxp.com/documents/application_note/AN130411.pdf
  50. Camera orientation API: http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)
  51. กล้อง: http://developer.android.com/reference/android/hardware/Camera.html
  52. อุปกรณ์เสริมแบบเปิดของ Android: http://developer.android.com/guide/topics/usb/accessory.html
  53. USB Host API: http://developer.android.com/guide/topics/usb/host.html
  54. ข้อมูลอ้างอิงเกี่ยวกับความปลอดภัยและสิทธิ์ของ Android: http://developer.android.com/guide/topics/security/permissions.html
  55. แอปสําหรับ Android: http://code.google.com/p/apps-for-android
  56. DownloadManager ของ Android: http://developer.android.com/reference/android/app/DownloadManager.html
  57. Android File Transfer: http://www.android.com/filetransfer
  58. รูปแบบสื่อของ Android: http://developer.android.com/guide/appendix/media-formats.html
  59. โปรโตคอลฉบับร่างของ HTTP Live Streaming: http://tools.ietf.org/html/draft-pantos-http-live-streaming-03
  60. NFC Connection Handover: http://www.nfc-forum.org/specs/spec_list/#conn_handover
  61. การจับคู่บลูทูธที่ปลอดภัยแบบง่ายโดยใช้ NFC: http://www.nfc-forum.org/resources/AppDocs/NFCForum_AD_BTSSP_1_0.pdf
  62. Wi-Fi Multicast API: http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html
  63. การช่วยเหลือด้านการดําเนินการ: http://developer.android.com/reference/android/content/Intent.html#ACTION_ASSIST
  64. ข้อกำหนดการชาร์จผ่าน USB: http://www.usb.org/developers/devclass_docs/USB_Battery_Charging_1.2.pdf
  65. Android Beam: http://developer.android.com/guide/topics/nfc/nfc.html
  66. เสียง USB ของ Android: http://developer.android.com/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_AUDIO
  67. การตั้งค่าการแชร์ NFC ของ Android: http://developer.android.com/reference/android/provider/Settings.html#ACTION_NFCSHARING_SETTINGS
  68. Wi-Fi Direct (Wi-Fi P2P): http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html
  69. วิดเจ็ตหน้าจอล็อกและหน้าจอหลัก: http://developer.android.com/reference/android/appwidget/AppWidgetProviderInfo.html
  70. ข้อมูลอ้างอิงเกี่ยวกับ UserManager: http://developer.android.com/reference/android/os/UserManager.html
  71. ข้อมูลอ้างอิงเกี่ยวกับพื้นที่เก็บข้อมูลภายนอก: /docs/core/storage
  72. External Storage API: http://developer.android.com/reference/android/os/Environment.html
  73. รหัสสั้น SMS: http://en.wikipedia.org/wiki/Short_code
  74. โปรแกรมควบคุมสื่อระยะไกล: http://developer.android.com/reference/android/media/RemoteControlClient.html
  75. Display Manager: http://developer.android.com/reference/android/hardware/display/DisplayManager.html
  76. ความฝัน: http://developer.android.com/reference/android/service/dreams/DreamService.html
  77. การตั้งค่าที่เกี่ยวข้องกับการพัฒนาแอปพลิเคชัน Android: http://developer.android.com/reference/android/provider/Settings.html#ACTION_APPLICATION_DEVELOPMENT_SETTINGS
  78. กล้อง: http://developer.android.com/reference/android/hardware/Camera.Parameters.html
  79. ส่วนขยาย EGL-EGL_ANDROID_RECORDABLE: http://www.khronos.org/registry/egl/extensions/ANDROID/EGL_ANDROID_recordable.txt
  80. Motion Event API: http://developer.android.com/reference/android/view/MotionEvent.html
  81. การกําหนดค่าอินพุตการสัมผัส: http://source.android.com/docs/core/interaction/input/touch-devices.html
  82. Unicode 6.1.0: http://www.unicode.org/versions/Unicode6.1.0/
  83. ความเข้ากันได้ของ WebView: http://www.chromium.org/
  84. แอปเจ้าของอุปกรณ์ Android: http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#isDeviceOwnerApp(java.lang.String)
  85. WifiManager API: http://developer.android.com/reference/android/net/wifi/WifiManager.html
  86. ข้อกำหนดการเขียนโค้ดฮาร์ดแวร์ RTC: http://www.webmproject.org/hardware/rtc-coding-requirements/
  87. Settings.Secure LOCATION_MODE: http://developer.android.com/reference/android/provider/Settings.Secure.html#LOCATION_MODE
  88. เครื่องมือจัดการเนื้อหา: http://developer.android.com/reference/android/content/ContentResolver.html
  89. SettingInjectorService: http://developer.android.com/reference/android/location/SettingInjectorService.html
  90. โปรแกรมจำลองการ์ดแบบโฮสต์: http://developer.android.com/guide/topics/connectivity/nfc/hce.html
  91. ผู้ให้บริการโทรศัพท์: http://developer.android.com/reference/android/provider/Telephony.html

แหล่งข้อมูลเหล่านี้จำนวนมากมาจาก Android SDK โดยตรงหรือโดยอ้อม และจะมีฟังก์ชันการทำงานเหมือนกับข้อมูลในเอกสารประกอบของ SDK นั้น ในกรณีที่นิยามความเข้ากันได้นี้หรือชุดเครื่องมือทดสอบความเข้ากันได้ขัดแย้งกับเอกสารประกอบ SDK ระบบจะถือว่าเอกสารประกอบ SDK ถูกต้อง รายละเอียดทางเทคนิคที่ระบุไว้ในข้อมูลอ้างอิงข้างต้นจะถือว่าเป็นส่วนหนึ่งของคำจำกัดความความเข้ากันได้นี้

3. ซอฟต์แวร์

3.1 ความเข้ากันได้ของ Managed API

สภาพแวดล้อมการเรียกใช้ที่มีการจัดการ (Dalvik) เป็นแพลตฟอร์มหลักสําหรับแอปพลิเคชัน Android Application Programming Interface (API) ของ Android คือชุดอินเทอร์เฟซแพลตฟอร์ม Android ที่แสดงต่อแอปพลิเคชันที่ทำงานในสภาพแวดล้อม VM ที่มีการจัดการ การใช้งานอุปกรณ์ต้องระบุการใช้งานที่สมบูรณ์ รวมถึงลักษณะการทำงานที่ระบุไว้ในเอกสารทั้งหมดของ API ที่ระบุไว้ในเอกสารซึ่ง Android SDK แสดง [แหล่งข้อมูล 4]

การติดตั้งใช้งานอุปกรณ์ต้องไม่ละเว้น API ที่มีการจัดการ เปลี่ยนแปลงอินเทอร์เฟซหรือลายเซ็น API เบี่ยงเบนจากลักษณะการทำงานที่ระบุไว้ หรือรวมการดำเนินการที่ไม่มีผล เว้นแต่จะได้รับอนุญาตโดยเจาะจงจากคำจำกัดความความเข้ากันได้นี้

คําจํากัดความความเข้ากันได้นี้อนุญาตให้ฮาร์ดแวร์บางประเภทที่ Android มี API อยู่สามารถละเว้นการใช้งานอุปกรณ์ได้ ในกรณีเช่นนี้ API จะต้องยังคงอยู่และทํางานอย่างสมเหตุสมผล โปรดดูข้อกำหนดเฉพาะสำหรับสถานการณ์นี้ในส่วนที่ 7

3.2 ความเข้ากันได้แบบ Soft API

นอกจาก API ที่มีการจัดการจากส่วนที่ 3.1 แล้ว Android ยังมี API "แบบไม่บังคับ" ที่สำคัญซึ่งทำงานเฉพาะรันไทม์ในรูปแบบของ Intent, สิทธิ์ และลักษณะอื่นๆ ที่คล้ายกันของแอปพลิเคชัน Android ซึ่งไม่สามารถบังคับใช้ขณะคอมไพล์แอปพลิเคชันได้

3.2.1. สิทธิ์

ผู้ติดตั้งใช้งานอุปกรณ์ต้องรองรับและบังคับใช้ค่าคงที่ของสิทธิ์ทั้งหมดตามที่ระบุไว้ในหน้าข้อมูลอ้างอิงเกี่ยวกับสิทธิ์ [แหล่งข้อมูล 5] โปรดทราบว่าส่วนที่ 9 แสดงข้อกำหนดเพิ่มเติมที่เกี่ยวข้องกับรูปแบบการรักษาความปลอดภัยของ Android

3.2.2. พารามิเตอร์การสร้าง

API ของ Android มีค่าคงที่จํานวนหนึ่งในandroid.os.Build คลาส [Resources, 6] ที่มีไว้เพื่ออธิบายอุปกรณ์ปัจจุบัน ตารางด้านล่างมีข้อจำกัดเพิ่มเติมเกี่ยวกับรูปแบบของค่าเหล่านี้ ซึ่งการติดตั้งใช้งานอุปกรณ์ต้องเป็นไปตามข้อจำกัดดังกล่าวเพื่อให้ค่ามีความสอดคล้องกันและสื่อความหมาย

พารามิเตอร์ ความคิดเห็น
VERSION.RELEASE เวอร์ชันของระบบ Android ที่ใช้งานอยู่ในปัจจุบันในรูปแบบที่มนุษย์อ่านได้ ช่องนี้ต้องมีค่าสตริงอย่างใดอย่างหนึ่งที่ระบุไว้ใน [ทรัพยากร, 7]
VERSION.SDK เวอร์ชันของระบบ Android ที่ใช้งานอยู่ในปัจจุบันในรูปแบบที่โค้ดแอปพลิเคชันของบุคคลที่สามเข้าถึงได้ สำหรับ Android 4.4 ช่องนี้ต้องมีค่าจำนวนเต็มเป็น 19
VERSION.SDK_INT เวอร์ชันของระบบ Android ที่ใช้งานอยู่ในปัจจุบันในรูปแบบที่โค้ดแอปพลิเคชันของบุคคลที่สามเข้าถึงได้ สำหรับ Android 4.4 ช่องนี้ต้องมีค่าจำนวนเต็มเป็น 19
VERSION.INCREMENTAL ค่าที่นักติดตั้งใช้งานอุปกรณ์เลือกเพื่อระบุบิลด์ที่เฉพาะเจาะจงของระบบ Android ที่ใช้งานอยู่ในปัจจุบันในรูปแบบที่มนุษย์อ่านได้ ค่านี้ต้องไม่นําไปใช้ซ้ำกับบิลด์อื่นที่พร้อมให้บริการแก่ผู้ใช้ปลายทาง การใช้งานทั่วไปของช่องนี้คือเพื่อระบุหมายเลขบิลด์หรือตัวระบุการเปลี่ยนแปลงในระบบควบคุมแหล่งที่มาที่ใช้สร้างบิลด์ ไม่มีข้อกำหนดเกี่ยวกับรูปแบบที่เจาะจงของช่องนี้ ยกเว้นว่าต้องไม่มีค่าเป็น Null หรือสตริงว่าง ("")
กระดาน ค่าที่นักติดตั้งใช้งานอุปกรณ์เลือกเพื่อระบุฮาร์ดแวร์ภายในที่เฉพาะเจาะจงซึ่งอุปกรณ์ใช้ในรูปแบบที่มนุษย์อ่านได้ การใช้ช่องนี้ที่เป็นไปได้คือการระบุการแก้ไขที่เฉพาะเจาะจงของแผงวงจรที่จ่ายไฟให้อุปกรณ์ ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตได้และตรงกับนิพจน์ทั่วไป "^[a-zA-Z0-9.,_-]+$"
แบรนด์ ค่าที่แสดงถึงชื่อแบรนด์ที่เชื่อมโยงกับอุปกรณ์ตามที่ผู้ใช้ปลายทางทราบ ต้องเป็นรูปแบบที่มนุษย์อ่านได้ และควรแสดงถึงผู้ผลิตอุปกรณ์หรือแบรนด์ของบริษัทที่ทําการตลาดอุปกรณ์ ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตได้และตรงกับนิพจน์ทั่วไป "^[a-zA-Z0-9.,_-]+$"
CPU_ABI ชื่อชุดคำสั่ง (ประเภท CPU + รูปแบบ ABI) ของโค้ดเนทีฟ โปรดดูส่วนที่ 3.3: ความเข้ากันได้ของ Native API
CPU_ABI2 ชื่อชุดคำสั่งที่ 2 (ประเภท CPU + รูปแบบ ABI) ของโค้ดเนทีฟ โปรดดูส่วนที่ 3.3: ความเข้ากันได้ของ Native API
อุปกรณ์ ค่าที่ผู้ติดตั้งใช้งานอุปกรณ์เลือกซึ่งมีชื่อการพัฒนาหรือชื่อรหัสที่ระบุการกำหนดค่าของฟีเจอร์ฮาร์ดแวร์และการออกแบบอุตสาหกรรมของอุปกรณ์ ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตได้ และตรงกับนิพจน์ทั่วไป "^[a-zA-Z0-9.,_-]+$"
FINGERPRINT สตริงที่ระบุบิลด์นี้โดยไม่ซ้ำกัน ควรเป็นชื่อที่มนุษย์อ่านได้ โดยต้องเป็นไปตามเทมเพลตนี้
$(BRAND)/$(PRODUCT)/$(DEVICE):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)
ตัวอย่างเช่น
acme/myproduct/mydevice:4.4/KRT16/3359:userdebug/test-keys
ฟิงเกอร์ปรินต์ต้องไม่มีอักขระที่เป็นช่องว่าง หากฟิลด์อื่นๆ ที่รวมอยู่ในเทมเพลตด้านบนมีอักขระที่เป็นช่องว่าง คุณต้องแทนที่อักขระเหล่านั้นในลายนิ้วมือของบิลด์ด้วยอักขระอื่น เช่น อักขระขีดล่าง ("_") ค่าของช่องนี้ต้องเข้ารหัสเป็น 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 หรือสตริงว่าง ("")
ผลิตภัณฑ์ ค่าที่ผู้ติดตั้งใช้งานอุปกรณ์เลือกซึ่งมีชื่อการพัฒนาหรือชื่อรหัสของผลิตภัณฑ์ที่เฉพาะเจาะจง (SKU) ซึ่งควรไม่ซ้ำกันภายในแบรนด์เดียวกัน ต้องเป็นชื่อที่มนุษย์อ่านได้ แต่ไม่จำเป็นต้องมีไว้เพื่อให้ผู้ใช้ปลายทางดู ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตได้และตรงกับนิพจน์ทั่วไป "^[a-zA-Z0-9.,_-]+$"
SERIAL หมายเลขซีเรียลของฮาร์ดแวร์ ซึ่งต้องระบุ ค่าของช่องนี้ต้องเข้ารหัสได้ในรูปแบบ ASCII 7 บิตและตรงกับนิพจน์ทั่วไป "^([a-zA-Z0-9]{6,20})$"
แท็ก รายการแท็กที่คั่นด้วยคอมมาซึ่งผู้ติดตั้งใช้งานอุปกรณ์เลือกไว้เพื่อแยกความแตกต่างของบิลด์เพิ่มเติม เช่น "unsigned,debug" ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตและตรงกับนิพจน์ทั่วไป "^[a-zA-Z0-9.,_-]+$"
เวลา ค่าที่แสดงการประทับเวลาที่บิลด์เกิดขึ้น
ประเภท ค่าที่ผู้ติดตั้งใช้งานอุปกรณ์เลือกซึ่งระบุการกำหนดค่ารันไทม์ของบิลด์ ช่องนี้ควรมีค่าอย่างใดอย่างหนึ่งที่สอดคล้องกับการกำหนดค่ารันไทม์ Android ทั่วไป 3 รายการ ได้แก่ "user", "userdebug" หรือ "eng" ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตได้และตรงกับนิพจน์ทั่วไป "^[a-zA-Z0-9.,_-]+$"
ผู้ใช้ ชื่อหรือรหัสผู้ใช้ของผู้ใช้ (หรือผู้ใช้อัตโนมัติ) ที่สร้างบิลด์ ไม่มีข้อกำหนดเกี่ยวกับรูปแบบที่เจาะจงของช่องนี้ ยกเว้นว่าต้องไม่มีค่า Null หรือสตริงว่าง ("")

3.2.3. ความเข้ากันได้ของ Intent

การติดตั้งใช้งานอุปกรณ์ต้องเป็นไปตามระบบ Intent แบบหลวมๆ ของ Android ตามที่อธิบายไว้ในส่วนด้านล่าง "ปฏิบัติตาม" หมายความว่าผู้ติดตั้งใช้งานอุปกรณ์ต้องระบุกิจกรรมหรือบริการ Android ที่ระบุตัวกรอง Intent ที่ตรงกันและเชื่อมโยงกับและใช้ลักษณะการทำงานที่ถูกต้องสำหรับรูปแบบ Intent ที่ระบุแต่ละรายการ

3.2.3.1. Intent ของแอปพลิเคชันหลัก

โปรเจ็กต์อัปสตรีมของ Android จะกำหนดแอปพลิเคชันหลักๆ หลายรายการ เช่น รายชื่อติดต่อ ปฏิทิน แกลเลอรีรูปภาพ เครื่องเล่นเพลง และอื่นๆ ผู้ติดตั้งใช้งานอุปกรณ์อาจแทนที่แอปพลิเคชันเหล่านี้ด้วยเวอร์ชันอื่น

อย่างไรก็ตาม เวอร์ชันทางเลือกดังกล่าวต้องเป็นไปตามรูปแบบ Intent เดียวกันที่โปรเจ็กต์ต้นทางระบุ ตัวอย่างเช่น หากอุปกรณ์มีโปรแกรมเล่นเพลงอื่น อุปกรณ์ดังกล่าวยังคงต้องปฏิบัติตามรูปแบบ Intent ที่ออกโดยแอปพลิเคชันของบุคคลที่สามเพื่อเลือกเพลง

แอปพลิเคชันต่อไปนี้ถือเป็นแอปพลิเคชันหลักของระบบ Android

  • นาฬิกาตั้งโต๊ะ
  • เบราว์เซอร์
  • ปฏิทิน
  • รายชื่อติดต่อ
  • แกลเลอรี
  • GlobalSearch
  • ปืนยิงลูกระเบิด
  • เพลง
  • การตั้งค่า

แอปพลิเคชันระบบหลักของ Android ประกอบด้วยคอมโพเนนต์ต่างๆ ของกิจกรรมหรือบริการที่ถือว่า "สาธารณะ" กล่าวคือ แอตทริบิวต์ "android:exported" อาจไม่มีอยู่ หรืออาจมีค่าเป็น "true"

สําหรับกิจกรรมหรือบริการทุกรายการที่กําหนดไว้ในแอประบบหลักของ Android รายการใดรายการหนึ่งที่ไม่ได้ทําเครื่องหมายว่าไม่ใช่แบบสาธารณะผ่านแอตทริบิวต์ android:exported ที่มีค่าเป็น "เท็จ" การใช้งานอุปกรณ์ต้องประกอบด้วยคอมโพเนนต์ประเภทเดียวกันที่ใช้รูปแบบตัวกรอง Intent เดียวกันกับแอประบบหลักของ Android

กล่าวคือ การติดตั้งใช้งานอุปกรณ์อาจแทนที่แอประบบหลักของ Android แต่หากเป็นเช่นนั้น การติดตั้งใช้งานอุปกรณ์ต้องรองรับรูปแบบ Intent ทั้งหมดที่กําหนดโดยแอประบบหลักของ Android แต่ละแอปที่จะแทนที่

3.2.3.2. การลบล้าง Intent

เนื่องจาก Android เป็นแพลตฟอร์มที่ขยายได้ การติดตั้งใช้งานอุปกรณ์ต้องอนุญาตให้แอปพลิเคชันของบุคคลที่สามลบล้างรูปแบบ Intent แต่ละรูปแบบที่อ้างอิงในส่วนที่ 3.2.3.1 ได้ การใช้งานโอเพนซอร์สจากฝั่งอัปสตรีมของ Android อนุญาตการดำเนินการนี้โดยค่าเริ่มต้น ผู้ติดตั้งใช้งานอุปกรณ์ต้องไม่แนบสิทธิ์พิเศษไว้กับการใช้รูปแบบ Intent เหล่านี้ของแอปพลิเคชันระบบ หรือป้องกันไม่ให้แอปพลิเคชันของบุคคลที่สามเชื่อมโยงและควบคุมรูปแบบเหล่านี้ ข้อห้ามนี้รวมถึงแต่ไม่จำกัดเพียงการปิดใช้อินเทอร์เฟซผู้ใช้ "เครื่องมือเลือก" ที่อนุญาตให้ผู้ใช้เลือกระหว่างแอปพลิเคชันหลายรายการที่จัดการรูปแบบ Intent เดียวกันทั้งหมด

อย่างไรก็ตาม การติดตั้งใช้งานอุปกรณ์อาจระบุกิจกรรมเริ่มต้นสำหรับรูปแบบ URI ที่เฉพาะเจาะจง (เช่น http://play.google.com) หากกิจกรรมเริ่มต้นมีตัวกรองที่เฉพาะเจาะจงมากขึ้นสำหรับ URI ของข้อมูล ตัวอย่างเช่น ตัวกรอง Intent ที่ระบุ URI ของข้อมูล "http://www.android.com" จะเจาะจงกว่าตัวกรองเบราว์เซอร์สําหรับ "http://" การติดตั้งใช้งานอุปกรณ์ต้องมีอินเทอร์เฟซผู้ใช้เพื่อให้ผู้ใช้แก้ไขกิจกรรมเริ่มต้นสำหรับ Intent ได้

3.2.3.3. เนมสเปซของ Intent

การติดตั้งใช้งานอุปกรณ์ต้องไม่มีคอมโพเนนต์ Android ใดๆ ที่รองรับรูปแบบ Intent ใหม่หรือรูปแบบ Intent แบบออกอากาศโดยใช้สตริงคีย์ ACTION, CATEGORY หรืออื่นๆ ในเนมสเปซ android.* หรือ com.android.* ผู้ติดตั้งใช้งานอุปกรณ์ต้องไม่รวมคอมโพเนนต์ Android ใดๆ ที่เป็นไปตามรูปแบบ Intent หรือ Broadcast Intent ใหม่โดยใช้สตริงคีย์ ACTION, CATEGORY หรืออื่นๆ ในสเปซแพ็กเกจที่เป็นขององค์กรอื่น ผู้ติดตั้งใช้งานอุปกรณ์ต้องไม่เปลี่ยนแปลงหรือขยายรูปแบบ Intent ที่แอปหลักที่ระบุไว้ในส่วนที่ 3.2.3.1 ใช้ การใช้งานอุปกรณ์อาจรวมถึงรูปแบบ Intent ที่ใช้เนมสเปซที่เชื่อมโยงกับองค์กรของตนเองอย่างชัดเจน

ข้อห้ามนี้คล้ายกับข้อห้ามที่ระบุไว้สำหรับคลาสภาษา Java ในส่วน 3.6

3.2.3.4. เจตนาการออกอากาศ

แอปพลิเคชันของบุคคลที่สามอาศัยแพลตฟอร์มนี้เพื่อออกอากาศ Intent บางรายการเพื่อแจ้งให้ทราบถึงการเปลี่ยนแปลงในสภาพแวดล้อมของฮาร์ดแวร์หรือซอฟต์แวร์ อุปกรณ์ที่ใช้ร่วมกับ Android ได้ต้องออกอากาศ Intent การออกอากาศแบบสาธารณะเพื่อตอบสนองต่อเหตุการณ์ของระบบที่เหมาะสม คุณสามารถดูคำอธิบาย Intent แบบออกอากาศได้ในเอกสารประกอบ SDK

3.2.3.5. การตั้งค่าแอปเริ่มต้น

Android 4.4 เพิ่มการตั้งค่าที่อนุญาตให้ผู้ใช้เลือกแอปพลิเคชันหน้าแรกและ SMS เริ่มต้น การติดตั้งใช้งานอุปกรณ์ต้องระบุเมนูการตั้งค่าผู้ใช้ที่คล้ายกันสำหรับแต่ละรายการ ซึ่งเข้ากันได้กับรูปแบบตัวกรอง Intent และเมธอด API ที่อธิบายไว้ในเอกสารประกอบ SDK [แหล่งข้อมูล, 91]

3.3 ความเข้ากันได้ของ API เดิม

3.3.1 อินเทอร์เฟซแบบไบนารีของแอปพลิเคชัน

โค้ดที่มีการจัดการซึ่งทำงานใน Dalvik สามารถเรียกใช้โค้ดแบบเนทีฟที่ระบุไว้ในไฟล์ .apk ของแอปพลิเคชันเป็นไฟล์ .so ของ ELF ที่คอมไพล์มาสำหรับสถาปัตยกรรมฮาร์ดแวร์ของอุปกรณ์ที่เหมาะสม เนื่องจากโค้ดแบบเนทีฟมีความเกี่ยวข้องกับเทคโนโลยีโปรเซสเซอร์พื้นฐานเป็นอย่างมาก Android จึงกำหนดอินเทอร์เฟซแบบไบนารีของแอปพลิเคชัน (ABI) จำนวนมากใน Android NDK ในไฟล์ docs/CPU-ARCH-ABIS.html หากการติดตั้งใช้งานอุปกรณ์เข้ากันได้กับ ABI ที่กําหนดไว้อย่างน้อย 1 รายการ ก็ควรใช้ร่วมกับ Android NDK ได้ ดังที่ระบุไว้ด้านล่าง

หากการติดตั้งใช้งานอุปกรณ์รองรับ ABI ของ Android การดำเนินการต่อไปนี้จะเกิดขึ้น

  • ต้องรองรับโค้ดที่ทำงานในสภาพแวดล้อมที่มีการจัดการเพื่อเรียกใช้โค้ดเนทีฟโดยใช้นิพจน์ทางความหมายของ Java Native Interface (JNI) มาตรฐาน
  • ต้องเข้ากันได้กับซอร์สโค้ด (กล่าวคือ เข้ากันได้กับส่วนหัว) และเข้ากันได้กับไบนารี (สำหรับ ABI) กับไลบรารีที่จำเป็นแต่ละรายการในรายการด้านล่าง
  • ต้องรายงาน Application Binary Interface (ABI) เนทีฟที่อุปกรณ์รองรับอย่างถูกต้องผ่านพารามิเตอร์ android.os.Build.CPU_ABI API และ android.os.Build.CPU_ABI2
  • ต้องรายงานผ่าน android.os.Build.CPU_ABI2 เฉพาะ ABI เหล่านั้นที่มีการบันทึกไว้ใน Android NDK เวอร์ชันล่าสุดในไฟล์ docs/CPU-ARCH-ABIS.html
  • ต้องรายงานผ่าน android.os.Build.CPU_ABI เพียง 1 รายการจาก ABI ที่ระบุไว้ด้านล่าง
    • armeabi-v7a
    • x86
    • mips
  • ควรสร้างโดยใช้ซอร์สโค้ดและไฟล์ส่วนหัวที่มีอยู่ในโครงการโอเพนซอร์ส Android ต้นทาง

API โค้ดเนทีฟต่อไปนี้ต้องพร้อมใช้งานสำหรับแอปที่มีโค้ดเนทีฟ

  • libc (คลัง C)
  • libm (คลังคณิตศาสตร์)
  • รองรับ C++ เพียงเล็กน้อย
  • อินเทอร์เฟซ JNI
  • liblog (การบันทึกของ Android)
  • libz (การบีบอัด Zlib)
  • libdl (ตัวลิงก์แบบไดนามิก)
  • libGLESv1_CM.so (OpenGL ES 1.0)
  • libGLESv2.so (OpenGL ES 2.0)
  • libGLESv3.so (OpenGL ES 3.0)
  • libEGL.so (การจัดการพื้นผิว OpenGL ดั้งเดิม)
  • libjnigraphics.so
  • libOpenSLES.so (การรองรับเสียง OpenSL ES 1.0.1)
  • libOpenMAXAL.so (รองรับ OpenMAX AL 1.0.1)
  • libandroid.so (การรองรับกิจกรรม Android ดั้งเดิม)
  • การรองรับ OpenGL ตามที่อธิบายไว้ด้านล่าง

โปรดทราบว่า Android NDK รุ่นต่อๆ ไปอาจรองรับ ABI เพิ่มเติม หากการติดตั้งใช้งานอุปกรณ์ใช้งานร่วมกับ ABI ที่กําหนดไว้ล่วงหน้าไม่ได้ อุปกรณ์ต้องไม่รายงานการรองรับ ABI ใดๆ ทั้งสิ้น

โปรดทราบว่าการใช้งานอุปกรณ์ต้องรวม libGLESv3.so และต้องมีการลิงก์แบบสัญลักษณ์ (Symbolic) กับ libGLESv2.so ในการใช้งานอุปกรณ์ที่ประกาศรองรับ OpenGL ES 3.0 นั้น libGLESv2.so ต้องส่งออกสัญลักษณ์ฟังก์ชัน OpenGL ES 3.0 นอกเหนือจากสัญลักษณ์ฟังก์ชัน OpenGL ES 2.0

ความเข้ากันได้ของโค้ดที่มาพร้อมเครื่องเป็นเรื่องยาก ด้วยเหตุนี้ เราจึงขอย้ำอีกครั้งว่าผู้ติดตั้งใช้งานอุปกรณ์ควรใช้การติดตั้งใช้งานจากต้นทางของไลบรารีที่ระบุไว้ข้างต้นเพื่อช่วยให้มั่นใจว่าอุปกรณ์จะใช้งานร่วมกันได้

3.4. ความเข้ากันได้ของเว็บ

3.4.1. ความเข้ากันได้ของ WebView

การใช้งานโอเพนซอร์ส Android ใช้โค้ดจากโปรเจ็กต์ Chromium เพื่อใช้งาน android.webkit.WebView [Resources, 10] เนื่องจากการพัฒนาชุดทดสอบที่ครอบคลุมสำหรับระบบการแสดงผลเว็บนั้นไม่สามารถทำได้ ผู้ติดตั้งใช้งานอุปกรณ์จึงต้องใช้ Chromium รุ่นที่อัปเดตจาก upstream ที่เฉพาะเจาะจงในการใช้งาน WebView ดังนี้

  • การติดตั้งใช้งาน android.webkit.WebView ของอุปกรณ์ต้องอิงตามบิลด์ Chromium จากโปรเจ็กต์โอเพนซอร์ส Android ต้นทางสำหรับ Android 4.4 บิลด์นี้มีการแก้ไขฟังก์ชันการทำงานและความปลอดภัยที่เฉพาะเจาะจงสำหรับ WebView [Resources, 83]
  • สตริง User Agent ที่ WebView รายงานต้องเป็นรูปแบบนี้
    Mozilla/5.0 (Linux; Android $(VERSION); $(LOCALE); $(MODEL) Build/$(BUILD)) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safari/537.36
    • ค่าของสตริง $(VERSION) ต้องเหมือนกับค่าของ android.os.Build.VERSION.RELEASE
    • ค่าของสตริง $(LOCALE) ไม่บังคับ ควรจะเป็นไปตามรูปแบบ ISO สำหรับรหัสประเทศและภาษา และควรอ้างอิงถึงภาษาที่กําหนดค่าไว้ในปัจจุบันของอุปกรณ์ หากไม่ระบุ คุณต้องนําเครื่องหมายเซมิโคลอนต่อท้ายออกด้วย
    • ค่าของสตริง $(MODEL) ต้องเหมือนกับค่าของ android.os.Build.MODEL
    • ค่าของสตริง $(BUILD) ต้องเหมือนกับค่าของ android.os.Build.ID
    • ค่าของสตริง $(CHROMIUM_VER) ต้องเป็นเวอร์ชัน Chromium ในโปรเจ็กต์โอเพนซอร์ส Android ต้นทาง
    • การติดตั้งใช้งานอุปกรณ์อาจละเว้น Mobile ในสตริง User Agent

คอมโพเนนต์ WebView ควรรองรับ HTML5 [แหล่งข้อมูล, 11] มากที่สุด

3.4.2. ความเข้ากันได้กับเบราว์เซอร์

การติดตั้งใช้งานอุปกรณ์ต้องมีแอปพลิเคชันเบราว์เซอร์แบบสแตนด์อโลนสำหรับการท่องเว็บของผู้ใช้ทั่วไป เบราว์เซอร์แบบสแตนด์อโลนอาจอิงตามเทคโนโลยีเบราว์เซอร์อื่นที่ไม่ใช่ WebKit อย่างไรก็ตาม แม้ว่าจะใช้แอปพลิเคชันเบราว์เซอร์อื่น แต่คอมโพเนนต์ android.webkit.WebView ที่ระบุให้กับแอปพลิเคชันของบุคคลที่สามต้องอิงตาม WebKit ตามที่อธิบายไว้ในส่วนที่ 3.4.1

การติดตั้งใช้งานอาจส่งสตริง User Agent ที่กําหนดเองในแอปพลิเคชันเบราว์เซอร์แบบสแตนด์อโลน

แอปพลิเคชันเบราว์เซอร์แบบสแตนด์อโลน (ไม่ว่าจะอิงตามแอปพลิเคชันเบราว์เซอร์ WebKit เวอร์ชันอัปสตรีมหรือแอปพลิเคชันทดแทนของบุคคลที่สาม) ควรรองรับ HTML5 [แหล่งข้อมูล 11] ให้ได้มากที่สุด การติดตั้งใช้งานอุปกรณ์ต้องรองรับ API แต่ละรายการต่อไปนี้ซึ่งเชื่อมโยงกับ HTML5 เป็นอย่างน้อย

นอกจากนี้ การติดตั้งใช้งานอุปกรณ์ต้องรองรับ Webstorage API ของ HTML5/W3C [แหล่งข้อมูล, 15] และต้องรองรับ IndexedDB API ของ HTML5/W3C [แหล่งข้อมูล, 16] โปรดทราบว่าเนื่องจากองค์กรมาตรฐานการพัฒนาเว็บกําลังเปลี่ยนไปใช้ IndexedDB แทน Web Storage จึงคาดว่า IndexedDB จะกลายเป็นคอมโพเนนต์ที่จําเป็นใน Android เวอร์ชันในอนาคต

3.5 ความเข้ากันได้ของลักษณะการทํางานของ API

ลักษณะการทํางานของ API แต่ละประเภท (ที่มีการจัดการ ซอฟต์ เนทีฟ และเว็บ) ต้องสอดคล้องกับการใช้งานที่ต้องการของโปรเจ็กต์โอเพนซอร์ส Android ต้นทาง [แหล่งข้อมูล 3] ตัวอย่างด้านความเข้ากันได้ที่เฉพาะเจาะจง ได้แก่

  • อุปกรณ์ต้องไม่เปลี่ยนแปลงลักษณะการทํางานหรือความหมายของ Intent มาตรฐาน
  • อุปกรณ์ต้องไม่เปลี่ยนแปลงวงจรหรือความหมายของวงจรของคอมโพเนนต์ระบบบางประเภท (เช่น บริการ กิจกรรม ContentProvider ฯลฯ)
  • อุปกรณ์ต้องไม่เปลี่ยนความหมายของสิทธิ์มาตรฐาน

โปรดทราบว่ายังมีกรณีอื่นๆ นอกเหนือจากรายการด้านบน ชุดเครื่องมือทดสอบความเข้ากันได้ (CTS) จะทดสอบแพลตฟอร์มส่วนใหญ่เพื่อดูความเข้ากันได้ของลักษณะการทำงาน แต่ไม่ได้ทดสอบทั้งหมด ผู้ติดตั้งใช้งานมีหน้าที่รับผิดชอบในการตรวจสอบความเข้ากันได้ของลักษณะการทำงานกับโปรเจ็กต์โอเพนซอร์สของ Android ด้วยเหตุนี้ ผู้ติดตั้งใช้งานอุปกรณ์จึงควรใช้ซอร์สโค้ดที่มีให้ผ่านโปรเจ็กต์โอเพนซอร์สของ Android หากเป็นไปได้ แทนที่จะติดตั้งใช้งานส่วนสำคัญของระบบอีกครั้ง

3.6 เนมสเปซของ API

Android เป็นไปตามรูปแบบเนมสเปซของแพ็กเกจและคลาสที่ภาษาโปรแกรม Java กำหนด ผู้ติดตั้งใช้งานอุปกรณ์ต้องไม่ทำการแก้ไขที่ไม่ได้รับอนุญาต (ดูด้านล่าง) กับเนมสเปซของแพ็กเกจต่อไปนี้เพื่อให้มั่นใจว่าแอปพลิเคชันของบุคคลที่สามจะใช้งานร่วมกันได้

  • java.*
  • javax.*
  • sun.*
  • android.*
  • com.android.*

การแก้ไขที่ไม่ได้รับอนุญาต ได้แก่

  • การติดตั้งใช้งานอุปกรณ์ต้องไม่แก้ไข API ที่เผยแพร่ต่อสาธารณะบนแพลตฟอร์ม Android โดยการเปลี่ยนลายเซ็นเมธอดหรือคลาส หรือนําคลาสหรือช่องคลาสออก
  • ผู้ติดตั้งใช้งานอุปกรณ์อาจแก้ไขการใช้งาน API พื้นฐานได้ แต่การแก้ไขดังกล่าวต้องไม่ส่งผลต่อลักษณะการทำงานที่ระบุและลายเซ็นภาษา Java ของ API ที่เปิดเผยต่อสาธารณะ
  • ผู้ติดตั้งใช้งานอุปกรณ์ต้องไม่เพิ่มองค์ประกอบที่เปิดเผยต่อสาธารณะ (เช่น คลาสหรืออินเทอร์เฟซ หรือฟิลด์หรือเมธอดในคลาสหรืออินเทอร์เฟซที่มีอยู่) ลงใน API ข้างต้น

"องค์ประกอบที่เปิดเผยต่อสาธารณะ" คือองค์ประกอบที่ไม่ได้ตกแต่งด้วยเครื่องหมาย "@hide" ตามที่ใช้ในซอร์สโค้ด Android ต้นทาง กล่าวคือ ผู้ติดตั้งใช้งานอุปกรณ์ต้องไม่แสดง API ใหม่หรือแก้ไข API ที่มีอยู่ในพื้นที่ชื่อที่ระบุไว้ข้างต้น ผู้ติดตั้งใช้งานอุปกรณ์อาจทำการแก้ไขภายในเท่านั้น แต่ต้องไม่โฆษณาหรือเปิดเผยการแก้ไขเหล่านั้นต่อนักพัฒนาแอป

ผู้ติดตั้งใช้งานอุปกรณ์อาจเพิ่ม API ที่กําหนดเองได้ แต่ API ดังกล่าวต้องไม่อยู่ในเนมสเปซที่เป็นของหรืออ้างอิงถึงองค์กรอื่น ตัวอย่างเช่น ผู้ติดตั้งใช้งานอุปกรณ์ต้องไม่เพิ่ม API ลงในเนมสเปซ com.google.* หรือเนมสเปซที่คล้ายกัน มีเพียง Google เท่านั้นที่เพิ่ม API ได้ ในทำนองเดียวกัน Google ต้องไม่เพิ่ม API ลงในเนมสเปซของบริษัทอื่นๆ นอกจากนี้ หากการติดตั้งใช้งานอุปกรณ์มี API ที่กำหนดเองซึ่งอยู่นอกเนมสเปซ Android มาตรฐาน API เหล่านั้นต้องได้รับการจัดแพ็กเกจในไลบรารีที่แชร์ของ Android เพื่อให้มีเพียงแอปที่ใช้ API เหล่านั้นอย่างชัดเจน (ผ่านกลไก <uses-library>) เท่านั้นที่ได้รับผลกระทบจากการใช้งานหน่วยความจำที่เพิ่มขึ้นของ API ดังกล่าว

หากผู้ติดตั้งใช้งานอุปกรณ์เสนอที่จะปรับปรุงเนมสเปซแพ็กเกจอย่างใดอย่างหนึ่งข้างต้น (เช่น การเพิ่มฟังก์ชันการทำงานใหม่ที่มีประโยชน์ลงใน API ที่มีอยู่ หรือการเพิ่ม API ใหม่) ผู้ติดตั้งใช้งานควรไปที่ source.android.com และเริ่มกระบวนการมีส่วนร่วมในการเปลี่ยนแปลงและโค้ดตามข้อมูลในเว็บไซต์ดังกล่าว

โปรดทราบว่าข้อจำกัดข้างต้นสอดคล้องกับรูปแบบมาตรฐานในการตั้งชื่อ API ในภาษาโปรแกรม Java ส่วนนี้มีไว้เพื่อเสริมรูปแบบเหล่านั้นและทำให้รูปแบบเหล่านั้นมีผลบังคับใช้ผ่านการรวมไว้ในคำจำกัดความความเข้ากันได้นี้

3.7. ความเข้ากันได้ของเครื่องเสมือน

การติดตั้งใช้งานอุปกรณ์ต้องรองรับข้อกำหนดไบต์โค้ด Dalvik Executable (DEX) ทั้งหมดและความหมายของเครื่องเสมือน Dalvik [แหล่งข้อมูล, 17]

การติดตั้งใช้งานอุปกรณ์ต้องกำหนดค่า Dalvik เพื่อจัดสรรหน่วยความจำตามแพลตฟอร์ม Android ต้นทาง และตามที่ระบุไว้ในตารางต่อไปนี้ (ดูคำจำกัดความของขนาดหน้าจอและความหนาแน่นของหน้าจอได้ที่ส่วนที่ 7.1.1)

โปรดทราบว่าค่าหน่วยความจําที่ระบุไว้ด้านล่างถือเป็นค่าขั้นต่ำ และการใช้งานอุปกรณ์อาจจัดสรรหน่วยความจําเพิ่มเติมต่อแอปพลิเคชัน

ขนาดหน้าจอ ความหนาแน่นของหน้าจอ หน่วยความจําของแอปพลิเคชัน
เล็ก / ปกติ / ใหญ่ ldpi / mdpi 16MB
เล็ก / ปกติ / ใหญ่ tvdpi / hdpi 32MB
เล็ก / ปกติ / ใหญ่ xhdpi 64MB
เล็ก / ปกติ / ใหญ่ 400dpi 96MB
เล็ก / ปกติ / ใหญ่ xxhdpi 128MB
เล็ก / ปกติ / ใหญ่ xxxhdpi 256MB
xlarge mdpi 32MB
xlarge tvdpi / hdpi 64MB
xlarge xhdpi 128MB
xlarge 400dpi 192MB
xlarge xxhdpi 256MB
xlarge xxxhdpi 512MB

3.8. ความเข้ากันได้ของอินเทอร์เฟซผู้ใช้

3.8.1. Launcher (หน้าจอหลัก)

Android มีแอปพลิเคชัน Launcher (หน้าจอหลัก) และรองรับแอปพลิเคชันของบุคคลที่สามเพื่อแทนที่ Launcher (หน้าจอหลัก) ของอุปกรณ์ การติดตั้งใช้งานอุปกรณ์ที่อนุญาตให้แอปพลิเคชันของบุคคลที่สามแทนที่หน้าจอหลักของอุปกรณ์ ต้องประกาศฟีเจอร์แพลตฟอร์ม android.software.home_screen

3.8.2. วิดเจ็ต

Android กําหนดประเภทคอมโพเนนต์และ API ที่เกี่ยวข้อง รวมถึงวงจรชีวิตของแอปพลิเคชัน ซึ่งช่วยให้แอปพลิเคชันแสดง "AppWidget" ต่อผู้ใช้ปลายทางได้ [แหล่งข้อมูล, 18] การใช้งานอุปกรณ์ที่รองรับการฝังวิดเจ็ตในหน้าจอหลักต้องเป็นไปตามข้อกำหนดต่อไปนี้และประกาศรองรับฟีเจอร์แพลตฟอร์ม android.software.app_widgets

  • ตัวเปิดแอปของอุปกรณ์ต้องรองรับ App Widgets ในตัว และแสดงความสามารถในการใช้งานอินเทอร์เฟซผู้ใช้เพื่อเพิ่ม กำหนดค่า ดู และนำ App Widgets ออกภายในตัวเปิดแอปโดยตรง
  • การติดตั้งใช้งานอุปกรณ์ต้องแสดงผลวิดเจ็ตขนาด 4 x 4 ในตารางกริดมาตรฐานได้ (ดูรายละเอียดได้ในหลักเกณฑ์การออกแบบวิดเจ็ตแอปในเอกสารประกอบ Android SDK [แหล่งข้อมูล, 18])
  • การติดตั้งใช้งานอุปกรณ์ที่รองรับหน้าจอล็อกต้องรองรับวิดเจ็ตแอปพลิเคชันในหน้าจอล็อก

3.8.3. การแจ้งเตือน

Android มี API ที่ช่วยให้นักพัฒนาแอปแจ้งผู้ใช้เกี่ยวกับเหตุการณ์สำคัญ [แหล่งข้อมูล 19] โดยใช้ฟีเจอร์ฮาร์ดแวร์และซอฟต์แวร์ของอุปกรณ์

API บางรายการอนุญาตให้แอปพลิเคชันทำการแจ้งเตือนหรือดึงดูดความสนใจโดยใช้ฮาร์ดแวร์ โดยเฉพาะเสียง การสั่น และแสง การติดตั้งใช้งานอุปกรณ์ต้องรองรับการแจ้งเตือนที่ใช้ฟีเจอร์ฮาร์ดแวร์ตามที่อธิบายไว้ในเอกสารประกอบ SDK และรองรับฮาร์ดแวร์ในการติดตั้งใช้งานอุปกรณ์มากที่สุด ตัวอย่างเช่น หากการติดตั้งใช้งานอุปกรณ์มีเครื่องสั่น อุปกรณ์นั้นต้องใช้ API การสั่นอย่างถูกต้อง หากการติดตั้งใช้งานอุปกรณ์ไม่มีฮาร์ดแวร์ จะต้องติดตั้งใช้งาน API ที่เกี่ยวข้องแบบไม่ดำเนินการ โปรดทราบว่าลักษณะการทํางานนี้มีรายละเอียดเพิ่มเติมในส่วนที่ 7

นอกจากนี้ การติดตั้งใช้งานต้องแสดงผลทรัพยากรทั้งหมด (ไอคอน ไฟล์เสียง ฯลฯ) ที่ระบุไว้ใน API [แหล่งข้อมูล 20] หรือในคู่มือสไตล์ไอคอนแถบสถานะ/แถบระบบ [แหล่งข้อมูล 21] อย่างถูกต้อง ผู้ติดตั้งใช้งานอุปกรณ์อาจมอบประสบการณ์การใช้งานการแจ้งเตือนที่แตกต่างจากที่ได้จากการใช้งาน Android Open Source อ้างอิง แต่ระบบการแจ้งเตือนระบบอื่นดังกล่าวต้องรองรับแหล่งข้อมูลการแจ้งเตือนที่มีอยู่ดังที่ระบุไว้ข้างต้น

Android รองรับการแจ้งเตือนแบบริชมีเดีย เช่น มุมมองแบบอินเทอร์แอกทีฟสําหรับการแจ้งเตือนต่อเนื่อง การติดตั้งใช้งานในอุปกรณ์ต้องแสดงและดำเนินการการแจ้งเตือนแบบริชมีเดียอย่างถูกต้องตามที่ระบุไว้ใน Android API

3.8.4. ค้นหา

Android มี API [แหล่งข้อมูล, 22] ที่ช่วยให้นักพัฒนาแอปรวมการค้นหาไว้ในแอปพลิเคชันของตน และแสดงข้อมูลแอปพลิเคชันในการค้นหาระบบทั่วโลก โดยทั่วไป ฟังก์ชันนี้จะประกอบด้วยอินเทอร์เฟซผู้ใช้แบบรวมทั่วทั้งระบบที่ช่วยให้ผู้ใช้ได้ป้อนข้อความค้นหา แสดงคำแนะนำขณะที่ผู้ใช้พิมพ์ และแสดงผลลัพธ์ Android API ช่วยให้นักพัฒนาแอปนําอินเทอร์เฟซนี้ไปใช้ซ้ำเพื่อให้บริการค้นหาภายในแอปของตนเองได้ และช่วยให้นักพัฒนาแอประบุผลการค้นหาไปยังอินเทอร์เฟซผู้ใช้การค้นหาทั่วโลกได้

การติดตั้งใช้งานอุปกรณ์ต้องมีอินเทอร์เฟซผู้ใช้การค้นหาที่แชร์ร่วมกันทั่วทั้งระบบแบบเดียวที่แสดงคำแนะนำแบบเรียลไทม์เพื่อตอบสนองต่ออินพุตของผู้ใช้ การติดตั้งใช้งานอุปกรณ์ต้องใช้ API ที่อนุญาตให้นักพัฒนาแอปนําอินเทอร์เฟซผู้ใช้นี้ไปใช้ซ้ำเพื่อให้บริการค้นหาภายในแอปพลิเคชันของตนเอง การติดตั้งใช้งานในอุปกรณ์ต้องใช้ API ที่อนุญาตให้แอปพลิเคชันของบุคคลที่สามเพิ่มคำแนะนำลงในช่องค้นหาเมื่อทำงานในโหมดการค้นหาทั่วโลก หากไม่ได้ติดตั้งแอปพลิเคชันของบุคคลที่สามที่ใช้ฟังก์ชันการทำงานนี้ ลักษณะการทำงานเริ่มต้นควรแสดงผลการค้นหาและคำแนะนำของเครื่องมือค้นหาบนเว็บ

3.8.5. ข้อความโทสต์

แอปพลิเคชันสามารถใช้ "Toast" API (ตามที่ระบุไว้ใน [ทรัพยากร, 23]) เพื่อแสดงสตริงแบบไม่โมดัลสั้นๆ ต่อผู้ใช้ปลายทาง ซึ่งจะหายไปหลังจากผ่านไประยะเวลาสั้นๆ การติดตั้งใช้งานอุปกรณ์ต้องแสดงข้อความแจ้งเตือนจากแอปพลิเคชันต่อผู้ใช้ปลายทางในลักษณะที่มองเห็นได้ชัดเจน

3.8.6. ธีม

Android มี "ธีม" เป็นกลไกสำหรับแอปพลิเคชันที่จะใช้รูปแบบในทั้งกิจกรรมหรือแอปพลิเคชัน

Android มีชุดธีม "Holo" เป็นชุดสไตล์ที่กําหนดไว้สําหรับนักพัฒนาแอปพลิเคชันเพื่อใช้หากต้องการจับคู่รูปลักษณ์และความรู้สึกของธีม Holo ตามที่ Android SDK กําหนด [แหล่งข้อมูล, 24] การติดตั้งใช้งานอุปกรณ์ต้องไม่เปลี่ยนแปลงแอตทริบิวต์ธีม Holo ที่แสดงต่อแอปพลิเคชัน [แหล่งข้อมูล, 25]

นอกจากนี้ Android ยังมีตระกูลธีม "ค่าเริ่มต้นของอุปกรณ์" เป็นชุดสไตล์ที่กําหนดไว้สําหรับนักพัฒนาแอปพลิเคชันเพื่อใช้หากต้องการจับคู่รูปลักษณ์ของธีมอุปกรณ์ตามที่ผู้ติดตั้งใช้งานอุปกรณ์กําหนด การติดตั้งใช้งานอุปกรณ์อาจแก้ไขแอตทริบิวต์ธีม DeviceDefault ที่แสดงต่อแอปพลิเคชัน [แหล่งข้อมูล, 25]

ตั้งแต่เวอร์ชัน 4.4 เป็นต้นไป Android รองรับธีมรูปแบบใหม่ที่มีแถบระบบแบบโปร่งแสง ซึ่งช่วยให้นักพัฒนาแอปพลิเคชันสามารถกรอกข้อมูลแอปในพื้นที่ด้านหลังแถบสถานะและแถบนําทางได้ สิ่งสำคัญคือต้องคงสไตล์ไอคอนแถบสถานะไว้ในการนำอุปกรณ์ต่างๆ มาใช้ เพื่อให้นักพัฒนาแอปได้รับประสบการณ์การใช้งานที่สอดคล้องกันในการกำหนดค่านี้ ดังนั้น การติดตั้งใช้งานอุปกรณ์ Android ต้องใช้สีขาวสำหรับไอคอนสถานะของระบบ (เช่น ระดับสัญญาณและระดับแบตเตอรี่) และการแจ้งเตือนที่ระบบออกให้ เว้นแต่ว่าไอคอนจะบ่งบอกถึงสถานะที่เป็นปัญหา [แหล่งข้อมูล, 25]

3.8.7. วอลเปเปอร์เคลื่อนไหว

Android กําหนดประเภทคอมโพเนนต์และ API รวมถึงวงจรที่เกี่ยวข้องซึ่งอนุญาตให้แอปพลิเคชันแสดง "วอลเปเปอร์เคลื่อนไหว" อย่างน้อย 1 รายการต่อผู้ใช้ปลายทาง [แหล่งข้อมูล, 26] วอลเปเปอร์เคลื่อนไหวคือภาพเคลื่อนไหว รูปแบบ หรือรูปภาพที่คล้ายกันซึ่งมีการป้อนข้อมูลแบบจำกัดซึ่งแสดงเป็นวอลเปเปอร์อยู่หลังแอปพลิเคชันอื่นๆ

ระบบจะถือว่าฮาร์ดแวร์สามารถใช้งานวอลเปเปอร์แบบเคลื่อนไหวได้อย่างเสถียรหากสามารถใช้งานวอลเปเปอร์แบบเคลื่อนไหวทั้งหมดได้โดยไม่มีข้อจำกัดด้านฟังก์ชันการทำงาน โดยมีอัตราเฟรมที่เหมาะสมและไม่ส่งผลเสียต่อแอปพลิเคชันอื่นๆ หากข้อจำกัดของฮาร์ดแวร์ทําให้วอลเปเปอร์และ/หรือแอปพลิเคชันพัง ทำงานผิดปกติ ใช้พลังงาน CPU หรือแบตเตอรี่มากเกินไป หรือทํางานด้วยอัตราเฟรมที่ต่ำจนยอมรับไม่ได้ ระบบจะถือว่าฮาร์ดแวร์ไม่สามารถแสดงวอลเปเปอร์แบบสดได้ ตัวอย่างเช่น ภาพพื้นหลังแบบเคลื่อนไหวบางรายการอาจใช้บริบท Open GL 1.0 หรือ 2.0 เพื่อแสดงผลเนื้อหา ภาพพื้นหลังแบบเคลื่อนไหวจะไม่ทำงานอย่างเสถียรในฮาร์ดแวร์ที่ไม่รองรับบริบท OpenGL หลายรายการ เนื่องจากการใช้บริบท OpenGL ของภาพพื้นหลังแบบเคลื่อนไหวอาจขัดแย้งกับแอปพลิเคชันอื่นๆ ที่ใช้บริบท OpenGL ด้วย

การติดตั้งใช้งานอุปกรณ์ที่เรียกใช้วอลเปเปอร์ภาพเคลื่อนไหวได้อย่างเสถียรตามที่อธิบายไว้ข้างต้นควรใช้วอลเปเปอร์ภาพเคลื่อนไหว การติดตั้งใช้งานอุปกรณ์ที่พิจารณาแล้วว่าไม่สามารถใช้งานวอลเปเปอร์เคลื่อนไหวได้อย่างเสถียรตามที่อธิบายไว้ข้างต้นต้องไม่ใช้งานวอลเปเปอร์เคลื่อนไหว

3.8.8. การแสดงแอปพลิเคชันล่าสุด

แหล่งที่มาของ Android ที่เป็นเวอร์ชันอัปสตรีมมีอินเทอร์เฟซผู้ใช้สำหรับแสดงแอปพลิเคชันล่าสุดโดยใช้ภาพขนาดย่อของสถานะกราฟิกของแอปพลิเคชัน ณ เวลาที่ผู้ใช้ออกจากแอปพลิเคชันครั้งล่าสุด การติดตั้งใช้งานในอุปกรณ์อาจเปลี่ยนแปลงหรือนำอินเทอร์เฟซผู้ใช้นี้ออก แต่ Android เวอร์ชันในอนาคตมีแผนที่จะใช้ฟังก์ชันนี้อย่างกว้างขวางมากขึ้น เราขอแนะนำให้ใช้อินเทอร์เฟซผู้ใช้ Android เวอร์ชันล่าสุด (หรืออินเทอร์เฟซที่คล้ายกันซึ่งใช้ภาพขนาดย่อ) สำหรับแอปพลิเคชันล่าสุด ไม่เช่นนั้นแอปพลิเคชันอาจใช้งานร่วมกับ Android เวอร์ชันในอนาคตไม่ได้

3.8.9. การจัดการอินพุต

Android รองรับการจัดการอินพุตและรองรับเครื่องมือแก้ไขวิธีการป้อนข้อมูลของบุคคลที่สาม การติดตั้งใช้งานอุปกรณ์ที่อนุญาตให้ผู้ใช้ใช้วิธีการป้อนข้อมูลของบุคคลที่สามในอุปกรณ์ต้องประกาศฟีเจอร์แพลตฟอร์ม android.software.input_methodsและรองรับ IME API ตามที่ระบุไว้ในเอกสารประกอบของ Android SDK

การติดตั้งใช้งานอุปกรณ์ที่ประกาศฟีเจอร์ android.software.input_methods ต้องมีกลไกที่ผู้ใช้เข้าถึงได้เพื่อเพิ่มและกําหนดค่าวิธีการป้อนข้อมูลของบุคคลที่สาม การติดตั้งใช้งานอุปกรณ์ต้องแสดงอินเทอร์เฟซการตั้งค่าเพื่อตอบสนองต่อ Intent ของ android.settings.INPUT_METHOD_SETTINGS

3.8.10. รีโมตคอนโทรลสื่อบนหน้าจอล็อก

Android รองรับ Remote Control API ซึ่งช่วยให้แอปพลิเคชันสื่อผสานรวมกับการควบคุมการเล่นที่แสดงในมุมมองระยะไกล เช่น หน้าจอล็อกของอุปกรณ์ [แหล่งข้อมูล, 74] การติดตั้งใช้งานอุปกรณ์ที่รองรับหน้าจอล็อกในอุปกรณ์และอนุญาตให้ผู้ใช้เพิ่มวิดเจ็ตในหน้าจอหลักต้องรองรับการฝังรีโมตคอนโทรลในหน้าจอล็อกของอุปกรณ์ [แหล่งข้อมูล, 69]

3.8.11. ความฝัน

Android รองรับโปรแกรมรักษาหน้าจอแบบอินเทอร์แอกทีฟที่เรียกว่า Dreams [แหล่งข้อมูล, 76] Dreams ช่วยให้ผู้ใช้โต้ตอบกับแอปพลิเคชันได้เมื่ออุปกรณ์ชาร์จไม่มีการใช้งานหรือวางอยู่ในแท่นชาร์จบนโต๊ะ การติดตั้งใช้งานอุปกรณ์ต้องรองรับ Dreams และมีตัวเลือกการตั้งค่าให้ผู้ใช้กำหนดค่า Dreams

3.8.12. ตำแหน่ง

โหมดตำแหน่งต้องแสดงในเมนูตำแหน่งภายในการตั้งค่า [แหล่งข้อมูล, 87] บริการตำแหน่งที่ให้บริการผ่าน SettingInjectorService ที่เปิดตัวใน Android 4.4 ต้องแสดงในเมนูตำแหน่งเดียวกัน [แหล่งข้อมูล, 89]

3.8.13. Unicode

Android 4.4 รองรับอักขระอีโมจิสี การใช้งานในอุปกรณ์ Android ต้องมีวิธีการป้อนข้อมูลสำหรับผู้ใช้สำหรับอักขระอีโมจิที่ระบุไว้ใน Unicode 6.1 [ทรัพยากร 82] และจะต้องแสดงผลอักขระอีโมจิเหล่านี้เป็นสัญลักษณ์สีได้

3.9. การดูแลระบบของอุปกรณ์

Android มีฟีเจอร์ที่ช่วยให้แอปพลิเคชันที่คำนึงถึงความปลอดภัยสามารถดำเนินการด้านการดูแลระบบอุปกรณ์ที่ระดับระบบ เช่น การบังคับใช้นโยบายรหัสผ่านหรือการดำเนินการล้างข้อมูลจากระยะไกล ผ่าน Android Device Administration API [แหล่งข้อมูล, 27] การติดตั้งใช้งานอุปกรณ์ต้องระบุการใช้งานDevicePolicyManagerคลาส [แหล่งข้อมูล, 28] การติดตั้งใช้งานอุปกรณ์ที่รองรับหน้าจอล็อกต้องรองรับนโยบายการดูแลระบบอุปกรณ์ทั้งหมดที่ระบุไว้ในเอกสารประกอบ Android SDK [แหล่งข้อมูล, 27]

การติดตั้งใช้งานอุปกรณ์อาจมีแอปพลิเคชันที่ติดตั้งมาล่วงหน้าซึ่งทําหน้าที่จัดการอุปกรณ์ แต่ต้องไม่ตั้งค่าแอปพลิเคชันนี้เป็นแอปเจ้าของอุปกรณ์เริ่มต้น [แหล่งข้อมูล, 84]

3.10. การช่วยเหลือพิเศษ

Android มีเลเยอร์การช่วยเหลือพิเศษที่ช่วยให้ผู้ใช้ที่มีความบกพร่องไปยังส่วนต่างๆ ของอุปกรณ์ได้ง่ายขึ้น นอกจากนี้ Android ยังมี API แพลตฟอร์มที่ช่วยให้การติดตั้งใช้งานบริการการช่วยเหลือพิเศษสามารถรับการเรียกกลับสําหรับเหตุการณ์ของผู้ใช้และระบบ รวมถึงสร้างกลไกการตอบกลับทางเลือก เช่น การอ่านออกเสียงข้อความ การสัมผัสและการนําทางด้วยแทร็กบอล/ปุ่มบังคับทิศทาง [แหล่งข้อมูล, 29] การใช้งานอุปกรณ์ต้องระบุการใช้งานเฟรมเวิร์กการช่วยเหลือพิเศษของ Android ที่สอดคล้องกันกับการใช้งาน Android เริ่มต้น กล่าวโดยละเอียดคือ การติดตั้งใช้งานอุปกรณ์ต้องเป็นไปตามข้อกำหนดต่อไปนี้

  • การติดตั้งใช้งานอุปกรณ์ต้องรองรับการติดตั้งใช้งานบริการการช่วยเหลือพิเศษของบุคคลที่สามผ่าน android.accessibilityservice API [แหล่งข้อมูล, 30]
  • การติดตั้งใช้งานอุปกรณ์ต้องสร้าง AccessibilityEvents และส่งเหตุการณ์เหล่านี้ไปยังการติดตั้งใช้งาน AccessibilityService ที่ลงทะเบียนทั้งหมดในลักษณะที่สอดคล้องกับการติดตั้งใช้งาน Android เริ่มต้น
  • การติดตั้งใช้งานอุปกรณ์ต้องจัดให้มีกลไกที่ผู้ใช้เข้าถึงได้เพื่อเปิดและปิดใช้บริการการช่วยเหลือพิเศษ และต้องแสดงอินเทอร์เฟซนี้เพื่อตอบสนองต่อandroid.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS Intent

นอกจากนี้ การใช้งานอุปกรณ์ควรมีการใช้งานบริการการช่วยเหลือพิเศษในอุปกรณ์ และควรมีกลไกให้ผู้ใช้เปิดใช้บริการการช่วยเหลือพิเศษในระหว่างการตั้งค่าอุปกรณ์ การติดตั้งใช้งานบริการการช่วยเหลือพิเศษแบบโอเพนซอร์สมีอยู่ในโปรเจ็กต์ EyesFree [แหล่งข้อมูล, 31]

3.11. การอ่านออกเสียงข้อความ

Android มี API ที่อนุญาตให้แอปพลิเคชันใช้บริการอ่านออกเสียงข้อความ (TTS) และอนุญาตให้ผู้ให้บริการให้บริการ TTS [แหล่งข้อมูล 32] การติดตั้งใช้งานอุปกรณ์ต้องเป็นไปตามข้อกำหนดต่อไปนี้ที่เกี่ยวข้องกับเฟรมเวิร์ก TTS ของ Android

  • การติดตั้งใช้งานอุปกรณ์ต้องรองรับ API เฟรมเวิร์ก TTS ของ Android และควรมีเครื่องมือ TTS ที่รองรับภาษาที่มีในอุปกรณ์ โปรดทราบว่าซอฟต์แวร์โอเพนซอร์สต้นทางของ Android มีการใช้งานเครื่องมือ TTS แบบเต็มรูปแบบ
  • การติดตั้งใช้งานอุปกรณ์ต้องรองรับการติดตั้งเครื่องมือ TTS ของบุคคลที่สาม
  • การติดตั้งใช้งานอุปกรณ์ต้องมีอินเทอร์เฟซที่ผู้ใช้เข้าถึงได้ ซึ่งช่วยให้ผู้ใช้เลือกเครื่องมือ TTS เพื่อใช้งานที่ระดับระบบได้

4. ความเข้ากันได้ของแพ็กเกจแอปพลิเคชัน

การติดตั้งใช้งานอุปกรณ์ต้องติดตั้งและเรียกใช้ไฟล์ ".apk" ของ Android ตามที่เครื่องมือ "aapt" สร้างขึ้น ซึ่งรวมอยู่ใน Android SDK อย่างเป็นทางการ [แหล่งข้อมูล, 33]

การติดตั้งใช้งานอุปกรณ์ต้องไม่ขยายรูปแบบ .apk [ทรัพยากร, 34], Android Manifest [ทรัพยากร, 35], รูปแบบไบต์โค้ด Dalvik [ทรัพยากร, 17] หรือรูปแบบไบต์โค้ดของ RendererScript ในลักษณะที่ทําให้ติดตั้งไฟล์เหล่านั้นและทํางานอย่างถูกต้องในอุปกรณ์อื่นๆ ที่เข้ากันได้ไม่ได้ ผู้ติดตั้งใช้งานอุปกรณ์ควรใช้การติดตั้งใช้งาน Dalvik บนฝั่งต้นทางที่เป็นข้อมูลอ้างอิง และระบบการจัดการแพ็กเกจของการติดตั้งใช้งานที่เป็นข้อมูลอ้างอิง

5. ความเข้ากันได้ของมัลติมีเดีย

การติดตั้งใช้งานอุปกรณ์ต้องมีเอาต์พุตเสียงอย่างน้อย 1 รูปแบบ เช่น ลำโพง ช่องเสียบหูฟัง การเชื่อมต่อลำโพงภายนอก ฯลฯ

5.1 ตัวแปลงรหัสสื่อ

การติดตั้งใช้งานอุปกรณ์ต้องรองรับรูปแบบสื่อหลักที่ระบุไว้ในเอกสารประกอบของ Android SDK [ทรัพยากร, 58] ยกเว้นในกรณีที่ได้รับอนุญาตอย่างชัดแจ้งในเอกสารนี้ กล่าวโดยละเอียดคือ การติดตั้งใช้งานอุปกรณ์ต้องรองรับรูปแบบสื่อ โปรแกรมเข้ารหัส โปรแกรมถอดรหัส ประเภทไฟล์ และรูปแบบคอนเทนเนอร์ที่ระบุไว้ในตารางด้านล่าง โปรแกรมเปลี่ยนรหัสเหล่านี้ทั้งหมดมีให้ใช้งานเป็นการใช้งานซอฟต์แวร์ในการใช้งาน Android ที่ต้องการจากโครงการโอเพนซอร์ส Android

โปรดทราบว่าทั้ง Google และ Open Handset Alliance ไม่ได้รับรองว่าตัวแปลงรหัสเหล่านี้ไม่อยู่ภายใต้สิทธิบัตรของบุคคลที่สาม เราขอแนะนำให้ผู้ที่ตั้งใจจะใช้ซอร์สโค้ดนี้ในผลิตภัณฑ์ฮาร์ดแวร์หรือซอฟต์แวร์ทราบว่าการใช้งานโค้ดนี้ ซึ่งรวมถึงในซอฟต์แวร์โอเพนซอร์สหรือแชร์แวร์ อาจต้องใช้ใบอนุญาตสิทธิบัตรจากผู้ถือสิทธิบัตรที่เกี่ยวข้อง

โปรดทราบว่าตารางเหล่านี้ไม่ได้แสดงข้อกำหนดอัตราบิตที่เฉพาะเจาะจงสำหรับตัวแปลงรหัสวิดีโอส่วนใหญ่ เนื่องจากฮาร์ดแวร์ของอุปกรณ์ในปัจจุบันอาจไม่รองรับอัตราบิตที่ตรงกับอัตราบิตที่กำหนดโดยมาตรฐานที่เกี่ยวข้อง แต่การติดตั้งใช้งานอุปกรณ์ควรรองรับอัตราบิตสูงสุดที่เป็นไปได้บนฮาร์ดแวร์นั้นๆ จนถึงขีดจำกัดที่ข้อกำหนดระบุไว้

ประเภท รูปแบบ / ตัวแปลงรหัส โปรแกรมเปลี่ยนไฟล์ ตัวถอดรหัส รายละเอียด ประเภทไฟล์/รูปแบบคอนเทนเนอร์
เสียง โปรไฟล์ MPEG-4 AAC (AAC LC) ต้องระบุสำหรับการติดตั้งใช้งานอุปกรณ์ที่มีฮาร์ดแวร์ไมโครโฟน และกำหนด android.hardware.microphone ต้องระบุ รองรับเนื้อหาโมโน/สเตอริโอ/5.0/5.1* ที่มีอัตราการสุ่มตัวอย่างมาตรฐานตั้งแต่ 8 ถึง 48 kHz
  • 3GPP (.3gp)
  • MPEG-4 (.mp4, .m4a)
  • AAC ไฟล์ดิบ ADTS (.aac, ถอดรหัสใน Android 3.1 ขึ้นไป, เข้ารหัสใน Android 4.0 ขึ้นไป, ไม่รองรับ ADIF)
  • MPEG-TS (.ts, ไม่สามารถกรอได้, Android 3.0 ขึ้นไป)
โปรไฟล์ MPEG-4 HE AAC (AAC+) ต้องระบุสำหรับการติดตั้งใช้งานอุปกรณ์ที่มีฮาร์ดแวร์ไมโครโฟนและกำหนด android.hardware.microphone ต้องระบุ รองรับเนื้อหาโมโน/สเตอริโอ/5.0/5.1* ที่มีอัตราการสุ่มตัวอย่างมาตรฐานตั้งแต่ 16 ถึง 48 kHz
โปรไฟล์ MPEG-4 HE AAC v2 (AAC+ ที่ปรับปรุงแล้ว)   ต้องระบุ รองรับเนื้อหาโมโน/สเตอริโอ/5.0/5.1* ที่มีอัตราการสุ่มตัวอย่างมาตรฐานตั้งแต่ 16 ถึง 48 kHz
ประเภทออบเจ็กต์เสียง MPEG-4 ER AAC ELD (AAC แบบลดเวลาหน่วงที่ปรับปรุงแล้ว) ต้องระบุสำหรับการติดตั้งใช้งานอุปกรณ์ที่มีฮาร์ดแวร์ไมโครโฟนและกำหนด android.hardware.microphone ต้องระบุ รองรับเนื้อหาโมโน/สเตอริโอที่มีอัตราการสุ่มตัวอย่างมาตรฐานตั้งแต่ 16 ถึง 48 kHz
AMR-NB ต้องระบุสำหรับการติดตั้งใช้งานอุปกรณ์ที่มีฮาร์ดแวร์ไมโครโฟน และกำหนด android.hardware.microphone ต้องระบุ 4.75 ถึง 12.2 kbps ที่อัตราตัวอย่าง 8kHz 3GPP (.3gp)
AMR-WB ต้องระบุสำหรับการติดตั้งใช้งานอุปกรณ์ที่มีฮาร์ดแวร์ไมโครโฟน และกำหนด android.hardware.microphone ต้องระบุ 9 อัตราตั้งแต่ 6.60 Kbps ถึง 23.85 Kbps ที่อัตราตัวอย่าง 16kHz 3GPP (.3gp)
FLAC   ต้องระบุ
(Android 3.1 ขึ้นไป)
โมโน/สเตอริโอ (ไม่มีหลายช่อง) อัตราการสุ่มตัวอย่างสูงสุด 48 kHz (แต่แนะนำให้ใช้สูงสุด 44.1 kHz ในอุปกรณ์ที่มีเอาต์พุต 44.1 kHz เนื่องจากตัวแปลงสัญญาณ 48 เป็น 44.1 kHz จะไม่มีตัวกรอง Low Pass) แนะนำ 16 บิต ระบบจะไม่ใช้การกรองความถี่แบบดิทเทอร์สำหรับ 24 บิต FLAC (.flac) เท่านั้น
MP3   ต้องระบุ โมโน/สเตอริโอ 8-320 Kbps แบบคงที่ (CBR) หรืออัตราบิตแบบผันแปร (VBR) MP3 (.mp3)
MIDI   ต้องระบุ MIDI ประเภท 0 และ 1 DLS เวอร์ชัน 1 และ 2 XMF และ Mobile XMF รองรับรูปแบบริงโทน RTTTL/RTX, OTA และ iMelody
  • ประเภท 0 และ 1 (.mid, .xmf, .mxmf)
  • RTTTL/RTX (.rtttl, .rtx)
  • OTA (.ota)
  • iMelody (.imy)
Vorbis   ต้องระบุ  
  • Ogg (.ogg)
  • Matroska (.mkv)
PCM/WAVE ต้องระบุ ต้องระบุ PCM แบบเชิงเส้น 8 บิตและ 16 บิต** (อัตราสูงสุดตามขีดจำกัดของฮาร์ดแวร์) อุปกรณ์ต้องรองรับอัตราการสุ่มตัวอย่างสำหรับการบันทึก PCM ดิบที่ความถี่ 8000,16000 และ 44100 Hz WAVE (.wav)
รูปภาพ JPEG ต้องระบุ ต้องระบุ Base+progressive JPEG (.jpg)
GIF   ต้องระบุ   GIF (.gif)
PNG ต้องระบุ ต้องระบุ   PNG (.png)
BMP   ต้องระบุ   BMP (.bmp)
WEBP ต้องระบุ ต้องระบุ   WebP (.webp)
วิดีโอ H.263 ต้องระบุสำหรับการติดตั้งใช้งานอุปกรณ์ที่มีฮาร์ดแวร์กล้อง และกำหนด android.hardware.camera หรือ android.hardware.camera.front ต้องระบุ  
  • 3GPP (.3gp)
  • MPEG-4 (.mp4)
H.264 AVC ต้องระบุสำหรับการติดตั้งใช้งานอุปกรณ์ที่มีฮาร์ดแวร์กล้อง และกำหนด android.hardware.camera หรือ android.hardware.camera.front ต้องระบุ โปรไฟล์พื้นฐาน (BP)
  • 3GPP (.3gp)
  • MPEG-4 (.mp4)
  • MPEG-TS (.ts, เสียง AAC เท่านั้น, ไม่สามารถกรอได้, Android 3.0 ขึ้นไป)
MPEG-4 SP   ต้องระบุ   3GPP (.3gp)
VP8**** ต้องระบุ
(Android 4.3 ขึ้นไป)
ต้องระบุ
(Android 2.3.3 ขึ้นไป)
  WebM (.webm) และ Matroska (.mkv, Android 4.0 ขึ้นไป)***
VP9   ต้องระบุ
(Android 4.4 ขึ้นไป)
  WebM (.webm) และ Matroska (.mkv, Android 4.0 ขึ้นไป)***
  • *หมายเหตุ: จำเป็นต้องมีการลดคุณภาพเนื้อหา 5.0/5.1 เท่านั้น การบันทึกหรือการแสดงผลมากกว่า 2 ช่องเป็นตัวเลือก
  • **หมายเหตุ: ต้องใช้การบันทึก PCM แบบเชิงเส้น 16 บิต ไม่จำเป็นต้องใช้การบันทึก PCM แบบเชิงเส้น 8 บิต
  • ***หมายเหตุ: การติดตั้งใช้งานอุปกรณ์ควรรองรับการเขียนไฟล์ Matroska WebM
  • ****หมายเหตุ: เพื่อให้บริการสตรีมมิงวิดีโอบนเว็บและวิดีโอคอนเฟอเรนซ์มีคุณภาพที่ยอมรับได้ การติดตั้งใช้งานอุปกรณ์ควรใช้ตัวแปลงรหัส VP8 ของฮาร์ดแวร์ที่เป็นไปตามข้อกำหนดใน [แหล่งข้อมูล, 86]

5.2 การเข้ารหัสวิดีโอ

การใช้งานอุปกรณ์ Android ที่มีกล้องหลังและประกาศว่า android.hardware.cameraควรรองรับโปรไฟล์การเข้ารหัสวิดีโอ H.264 ต่อไปนี้

  SD (คุณภาพต่ำ) SD (คุณภาพสูง) HD (เมื่อฮาร์ดแวร์รองรับ)
ความละเอียดของวิดีโอ 176 x 144 พิกเซล 480 x 360 พิกเซล 1280 x 720 พิกเซล
อัตราเฟรมของวิดีโอ 12 FPS 30 fps 30 fps
อัตราบิตของวิดีโอ 56 Kbps 500 Kbps ขึ้นไป 2 Mbps ขึ้นไป
ตัวแปลงรหัสเสียง AAC-LC AAC-LC AAC-LC
ช่องเสียง 1 (โมโน) 2 (สเตอริโอ) 2 (สเตอริโอ)
อัตราบิตของเสียง 24 Kbps 128 Kbps 192 Kbps

การใช้งานอุปกรณ์ Android ที่มีกล้องหลังและประกาศว่า android.hardware.camera ควรรองรับโปรไฟล์การเข้ารหัสวิดีโอ VP8 ต่อไปนี้

  SD (คุณภาพต่ำ) SD (คุณภาพสูง) HD 720p
(เมื่อฮาร์ดแวร์รองรับ)
HD 1080p
(เมื่อฮาร์ดแวร์รองรับ)
ความละเอียดของวิดีโอ 320 x 180 พิกเซล 640 x 360 พิกเซล 1280 x 720 พิกเซล 1920 x 1080 พิกเซล
อัตราเฟรมของวิดีโอ 30 fps 30 fps 30 fps 30 fps
อัตราบิตของวิดีโอ 800 Kbps 2 Mbps 4 Mbps 10 Mbps

5.3 การถอดรหัสวิดีโอ

การใช้งานอุปกรณ์ Android ควรรองรับโปรไฟล์การถอดรหัสวิดีโอ VP8, VP9 และ H.264 ต่อไปนี้ การติดตั้งใช้งานอุปกรณ์ควรรองรับการเปลี่ยนความละเอียดวิดีโอแบบไดนามิกภายในสตรีมเดียวกันสำหรับตัวแปลงรหัส VP8, VP9 และ H.264 ด้วย

  SD (คุณภาพต่ำ) SD (คุณภาพสูง) HD 720p
(เมื่อฮาร์ดแวร์รองรับ)
HD 1080p
(เมื่อฮาร์ดแวร์รองรับ)
ความละเอียดของวิดีโอ 320 x 180 พิกเซล 640 x 360 พิกเซล 1280 x 720 พิกเซล 1920 x 1080 พิกเซล
อัตราเฟรมของวิดีโอ 30 fps 30 fps 30 fps 30 fps
อัตราบิตของวิดีโอ 800 Kbps 2 Mbps 8 Mbps 20 Mbps

5.4. การบันทึกเสียง

เมื่อแอปพลิเคชันใช้ android.media.AudioRecord API เพื่อเริ่มบันทึกสตรีมเสียง การติดตั้งใช้งานอุปกรณ์ที่มีฮาร์ดแวร์ไมโครโฟนและประกาศ android.hardware.microphone จะต้องสุ่มตัวอย่างและบันทึกเสียงโดยมีลักษณะการทำงานดังนี้

  • อุปกรณ์ควรแสดงลักษณะความกว้างของคลื่นเทียบกับความถี่ที่ราบเรียบโดยประมาณ กล่าวคือ ±3 dB จาก 100 Hz ถึง 4000 Hz
  • ควรตั้งค่าความไวอินพุตเสียงเพื่อให้แหล่งที่มาของระดับกำลังเสียง (SPL) 90 dB ที่ 1000 Hz ให้ค่า RMS 2500 สำหรับตัวอย่าง 16 บิต
  • ระดับแอมพลิจูด PCM ควรติดตามการเปลี่ยนแปลง SPL ของอินพุตแบบเชิงเส้นในช่วงอย่างน้อย 30 dB จาก -18 dB ถึง +12 dB เทียบกับ SPL 90 dB ที่ไมโครโฟน
  • ความเพี้ยนตามฮาร์โมนิกทั้งหมดควรน้อยกว่า 1% สำหรับ 1 Khz ที่ระดับอินพุต 90 dB SPL

นอกเหนือจากข้อกำหนดเฉพาะในการบันทึกข้างต้นแล้ว เมื่อแอปพลิเคชันเริ่มบันทึกสตรีมเสียงโดยใช้แหล่งที่มาของเสียง android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION

  • คุณต้องปิดใช้การประมวลผลการลดเสียงรบกวน (หากมี)
  • การควบคุมระดับสัญญาณอัตโนมัติ (หากมี) ต้องปิดใช้

ตั้งแต่ Android 4.4 เป็นต้นไป คลาส android.media.MediaRecorder.AudioSource จะมีแหล่งที่มาของเสียงใหม่ REMOTE_SUBMIX อุปกรณ์ต้องใช้แหล่งที่มาของเสียง REMOTE_SUBMIX อย่างถูกต้องเพื่อให้แอปพลิเคชันใช้ android.media.AudioRecord API เพื่อบันทึกจากแหล่งที่มาของเสียงนี้ได้ โดยสามารถบันทึกสตรีมเสียงทั้งหมดได้ ยกเว้นสตรีมต่อไปนี้

  • STREAM_RING
  • STREAM_ALARM
  • STREAM_NOTIFICATION

หมายเหตุ: แม้ว่าข้อกำหนดบางประการที่ระบุไว้ข้างต้นจะระบุว่า "ควร" ตั้งแต่ Android 4.3 แต่เราวางแผนที่จะเปลี่ยนคำจำกัดความของความเข้ากันได้สำหรับเวอร์ชันในอนาคตเป็น "ต้อง" กล่าวคือ ข้อกำหนดเหล่านี้เป็นข้อกำหนดที่ไม่บังคับใน Android 4.4 แต่จะเป็นข้อกำหนดที่จำเป็นในเวอร์ชันที่ใหม่กว่า เราขอแนะนำอย่างยิ่งให้อุปกรณ์ที่มีอยู่และอุปกรณ์ใหม่ที่ใช้ Android มีคุณสมบัติตรงตามข้อกำหนดเหล่านี้ ไม่เช่นนั้นอุปกรณ์จะใช้งานร่วมกับ Android ไม่ได้เมื่ออัปเกรดเป็นเวอร์ชันในอนาคต

หากแพลตฟอร์มรองรับเทคโนโลยีการลดเสียงรบกวนที่ได้รับการปรับแต่งสำหรับการจดจำคำพูด ผลลัพธ์จะต้องควบคุมได้จาก android.media.audiofx.NoiseSuppressor API นอกจากนี้ ช่อง "uuid" สำหรับตัวบ่งชี้ผลของการตัดเสียงรบกวนต้องระบุการใช้งานเทคโนโลยีการตัดเสียงรบกวนแต่ละรายการโดยไม่ซ้ำกัน

5.5. เวลาในการตอบสนองของเสียง

เวลาในการตอบสนองของเสียงคือความล่าช้าของเวลาเมื่อสัญญาณเสียงผ่านระบบ แอปพลิเคชันหลายประเภทอาศัยเวลาในการตอบสนองที่ต่ำเพื่อให้ได้เสียงเอฟเฟกต์แบบเรียลไทม์

ความหมายของคำต่างๆ ในส่วนนี้

  • "เวลาในการตอบสนองของเอาต์พุต" หมายถึงช่วงเวลาระหว่างที่แอปพลิเคชันเขียนเฟรมของข้อมูลที่เข้ารหัส PCM กับเวลาที่ผู้ฟังภายนอกได้ยินเสียงที่เกี่ยวข้องหรือที่ทรานสดิวเซอร์สังเกตเห็น
  • "เวลาในการตอบสนองของเอาต์พุตแบบเย็น" หมายถึงเวลาในการตอบสนองของเอาต์พุตสำหรับเฟรมแรกเมื่อระบบเอาต์พุตเสียงไม่ได้ใช้งานและปิดอยู่ก่อนได้รับคำขอ
  • "เวลาในการตอบสนองของเอาต์พุตแบบต่อเนื่อง" หมายถึงเวลาในการตอบสนองของเอาต์พุตสำหรับเฟรมต่อๆ ไปหลังจากที่อุปกรณ์เล่นเสียงแล้ว
  • "เวลาในการตอบสนองของอินพุต" คือช่วงเวลาระหว่างที่เสียงภายนอกแสดงในอุปกรณ์กับเวลาที่แอปพลิเคชันอ่านเฟรมที่สอดคล้องกันของข้อมูลที่เข้ารหัส PCM
  • "เวลาในการตอบสนองของอินพุตแบบเย็น" หมายถึงผลรวมของเวลาอินพุตที่เสียไปและเวลาในการตอบสนองของอินพุตสำหรับเฟรมแรก เมื่อระบบอินพุตเสียงไม่ได้ใช้งานและปิดอยู่ก่อนคําขอ
  • "เวลาในการตอบสนองของอินพุตแบบต่อเนื่อง" หมายถึงเวลาในการตอบสนองของอินพุตสำหรับเฟรมต่อๆ ไปขณะที่อุปกรณ์บันทึกเสียงอยู่แล้ว
  • "OpenSL ES PCM buffer queue API" คือชุด OpenSL ES API ที่เกี่ยวข้องกับ PCM ภายใน Android NDK ดู NDK_root/docs/opensles/index.html

ตามส่วนที่ 5 การใช้งานอุปกรณ์ที่เข้ากันได้ทั้งหมดต้องมีเอาต์พุตเสียงอย่างน้อย 1 รูปแบบ การติดตั้งใช้งานอุปกรณ์ควรเป็นไปตามหรือมากกว่าข้อกำหนดเวลาในการตอบสนองของเอาต์พุตต่อไปนี้

  • เวลาในการตอบสนองของเอาต์พุตแบบ Cold ไม่เกิน 100 มิลลิวินาที
  • เวลาในการตอบสนองของเอาต์พุตแบบต่อเนื่องไม่เกิน 45 มิลลิวินาที

หากการติดตั้งใช้งานอุปกรณ์เป็นไปตามข้อกำหนดของส่วนนี้หลังจากการปรับเทียบครั้งแรกเมื่อใช้ OpenSL ES PCM buffer queue API สำหรับเวลาในการตอบสนองของเอาต์พุตแบบต่อเนื่องและเวลาในการตอบสนองของเอาต์พุตแบบ Cold บนอุปกรณ์เอาต์พุตเสียงที่รองรับอย่างน้อย 1 เครื่อง อุปกรณ์อาจรายงานการรองรับเสียงที่มีเวลาในการตอบสนองต่ำโดยการรายงานฟีเจอร์ "android.hardware.audio.low-latency" ผ่านคลาส android.content.pm.PackageManager [แหล่งข้อมูล, 37] ในทางกลับกัน หากการติดตั้งใช้งานอุปกรณ์ไม่เป็นไปตามข้อกำหนดเหล่านี้ อุปกรณ์ต้องไม่รายงานการรองรับเสียงที่มีเวลาในการตอบสนองต่ำ

ตามส่วนที่ 7.2.5 การติดตั้งใช้งานอุปกรณ์อาจไม่รวมฮาร์ดแวร์ไมโครโฟน

การติดตั้งใช้งานอุปกรณ์ที่มีฮาร์ดแวร์ไมโครโฟนและประกาศ android.hardware.microphone ควร เป็นไปตามข้อกำหนดเวลาในการตอบสนองของเสียงอินพุตต่อไปนี้

  • เวลาในการตอบสนองของอินพุตแบบ Cold Start ไม่เกิน 100 มิลลิวินาที
  • เวลาในการตอบสนองของอินพุตต่อเนื่องไม่เกิน 50 มิลลิวินาที

5.6. โปรโตคอลเครือข่าย

อุปกรณ์ต้องรองรับโปรโตคอลเครือข่ายสื่อสำหรับการเล่นเสียงและวิดีโอตามที่ระบุไว้ในเอกสารประกอบ Android SDK [แหล่งข้อมูล, 58] กล่าวโดยละเอียดคือ อุปกรณ์ต้องรองรับโปรโตคอลเครือข่ายสื่อต่อไปนี้

  • RTSP (RTP, SDP)
  • การสตรีมแบบ Progressive ของ HTTP(S)
  • โปรโตคอลฉบับร่างสําหรับสตรีมมิงแบบสดของ HTTP(S) เวอร์ชัน 3 [แหล่งข้อมูล, 59]

6. ความเข้ากันได้ของเครื่องมือและตัวเลือกสำหรับนักพัฒนาแอป

6.1 เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์

การติดตั้งใช้งานอุปกรณ์ต้องรองรับเครื่องมือสําหรับนักพัฒนาแอป Android ที่มีให้ใน Android SDK กล่าวโดยละเอียดคือ อุปกรณ์ที่ใช้ร่วมกับ Android ได้ต้องเข้ากันได้กับสิ่งต่อไปนี้

  • Android Debug Bridge (หรือที่เรียกว่า adb) [แหล่งข้อมูล, 33]
    การติดตั้งใช้งานอุปกรณ์ต้องรองรับฟังก์ชัน adb ทั้งหมดตามที่ระบุไว้ใน Android SDK ไดแอม่อน adb ฝั่งอุปกรณ์ต้องไม่ทำงานโดยค่าเริ่มต้น และต้องมีข้อบังคับให้ผู้ใช้เข้าถึงกลไกเพื่อเปิด Android Debug Bridge ได้
  • Android รองรับ adb ที่ปลอดภัย adb ที่ปลอดภัยจะเปิดใช้ adb ในโฮสต์ที่รู้จักซึ่งผ่านการตรวจสอบสิทธิ์ การติดตั้งใช้งานอุปกรณ์ต้องรองรับ adb ที่ปลอดภัย
  • Dalvik Debug Monitor Service (หรือที่เรียกว่า ddms) [แหล่งข้อมูล, 33]
    การติดตั้งใช้งานอุปกรณ์ต้องรองรับฟีเจอร์ ddms ทั้งหมดตามที่ระบุไว้ในเอกสารประกอบของ Android SDK เนื่องจาก ddms ใช้ adb การรองรับ ddms ควรปิดอยู่โดยค่าเริ่มต้น แต่ต้องรองรับเมื่อใดก็ตามที่ผู้ใช้เปิดใช้งาน Android Debug Bridge ดังที่อธิบายไว้ข้างต้น
  • Monkey [แหล่งข้อมูล, 36]
    การติดตั้งใช้งานอุปกรณ์ต้องมีเฟรมเวิร์ก Monkey และทำให้แอปพลิเคชันใช้งานเฟรมเวิร์กนี้ได้
  • SysTrace [แหล่งข้อมูล, 33]
    การติดตั้งใช้งานอุปกรณ์ต้องรองรับเครื่องมือ Systrace ตามที่ระบุไว้ใน Android SDK Systrace ต้องปิดอยู่โดยค่าเริ่มต้น และต้องมีกลไกที่ผู้ใช้เข้าถึงได้เพื่อเปิด Systrace

ระบบที่ใช้ Linux ส่วนใหญ่และระบบ Apple Macintosh จะจดจำอุปกรณ์ Android โดยใช้เครื่องมือ Android SDK มาตรฐานโดยไม่ต้องมีการสนับสนุนเพิ่มเติม แต่ระบบ Microsoft Windows มักจะต้องใช้ไดรเวอร์สำหรับอุปกรณ์ Android รุ่นใหม่ (เช่น รหัสผู้ให้บริการใหม่และบางครั้งรหัสอุปกรณ์ใหม่ต้องใช้ไดรเวอร์ USB ที่กําหนดเองสําหรับระบบ Windows) หากเครื่องมือ adb ของ Android SDK มาตรฐานไม่รู้จักการติดตั้งใช้งานอุปกรณ์ ผู้ติดตั้งใช้งานอุปกรณ์ต้องจัดหาไดรเวอร์ Windows ที่อนุญาตให้นักพัฒนาแอปเชื่อมต่อกับอุปกรณ์โดยใช้โปรโตคอล adb คุณต้องจัดเตรียมไดรเวอร์เหล่านี้สำหรับ Windows XP, Windows Vista, Windows 7 และ Windows 8 ทั้งเวอร์ชัน 32 บิตและ 64 บิต

6.2 ตัวเลือกสำหรับนักพัฒนาแอป

Android รองรับให้นักพัฒนาแอปกำหนดการตั้งค่าที่เกี่ยวข้องกับการพัฒนาแอปพลิเคชัน การติดตั้งใช้งานอุปกรณ์ต้องเป็นไปตาม Intent android.settings.APPLICATION_DEVELOPMENT_SETTINGS เพื่อแสดงการตั้งค่าที่เกี่ยวข้องกับการพัฒนาแอปพลิเคชัน [แหล่งข้อมูล, 77] การใช้งาน Android เวอร์ชัน upstream จะซ่อนเมนูตัวเลือกสำหรับนักพัฒนาแอปไว้โดยค่าเริ่มต้น และเปิดใช้ตัวเลือกสำหรับนักพัฒนาแอปหลังจากที่ผู้ใช้กดรายการเมนูการตั้งค่า > เกี่ยวกับอุปกรณ์ > หมายเลขบิลด์ 7 ครั้ง การติดตั้งใช้งานอุปกรณ์ต้องมอบประสบการณ์การใช้งานที่สอดคล้องกันสำหรับตัวเลือกสำหรับนักพัฒนาแอป กล่าวโดยละเอียดคือ การใช้งานอุปกรณ์ต้องซ่อนตัวเลือกสำหรับนักพัฒนาแอปโดยค่าเริ่มต้น และต้องจัดให้มีกลไกในการเปิดใช้ตัวเลือกสำหรับนักพัฒนาแอปที่สอดคล้องกับการใช้งาน Android เวอร์ชันที่พัฒนาขึ้น

6.2.1. รุ่นทดลอง

Android 4.4 เปิดตัว ART ซึ่งเป็นรันไทม์ Android เวอร์ชันทดลอง ซึ่งเข้าถึงได้ภายในเมนูตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์เพื่อดูตัวอย่าง การติดตั้งใช้งานในอุปกรณ์ควรมี ART (libart.so) และรองรับการบูตคู่จากตัวเลือกสำหรับนักพัฒนาแอป แต่ต้องคง Dalvik (libdvm.so) เป็นรันไทม์เริ่มต้น

7. ความเข้ากันได้ของฮาร์ดแวร์

หากอุปกรณ์มีส่วนประกอบฮาร์ดแวร์บางอย่างที่มี API ที่สอดคล้องกันสำหรับนักพัฒนาแอปบุคคลที่สาม การใช้งานอุปกรณ์จะต้องใช้ API ดังกล่าวตามที่อธิบายไว้ในเอกสารประกอบของ Android SDK หาก API ใน SDK โต้ตอบกับคอมโพเนนต์ฮาร์ดแวร์ที่ระบุว่าไม่บังคับ และการติดตั้งใช้งานอุปกรณ์ไม่มีคอมโพเนนต์ดังกล่าว ให้ทำดังนี้

  • ต้องมีการกำหนดคลาสที่สมบูรณ์ (ตามที่ SDK ระบุไว้) สำหรับ API ของคอมโพเนนต์
  • ลักษณะการทํางานของ API ต้องติดตั้งใช้งานแบบ No-Ops ในลักษณะที่เหมาะสม
  • เมธอด API ต้องแสดงผลค่า null ตามที่เอกสารประกอบของ SDK อนุญาต
  • เมธอด API ต้องแสดงผลการใช้งานคลาสแบบไม่มีการดำเนินการในกรณีที่เอกสารประกอบของ SDK ไม่อนุญาตให้ใช้ค่า Null
  • เมธอด API ต้องไม่แสดงข้อยกเว้นที่ไม่ได้ระบุไว้ในเอกสารประกอบของ SDK

ตัวอย่างทั่วไปของสถานการณ์ที่มีการใช้ข้อกำหนดเหล่านี้คือ API โทรศัพท์: แม้แต่ในอุปกรณ์ที่ไม่ใช่โทรศัพท์ ก็ต้องติดตั้งใช้งาน API เหล่านี้แบบไม่ดำเนินการใดๆ

การติดตั้งใช้งานอุปกรณ์ต้องรายงานข้อมูลการกำหนดค่าฮาร์ดแวร์ที่ถูกต้องผ่านเมธอด getSystemAvailableFeatures() และ hasSystemFeature(String) ในคลาส android.content.pm.PackageManager [แหล่งข้อมูล, 37]

7.1. การแสดงผลและกราฟิก

Android มีเครื่องมือที่ปรับชิ้นงานแอปพลิเคชันและเลย์เอาต์ UI ให้เหมาะสมกับอุปกรณ์โดยอัตโนมัติ เพื่อให้แอปพลิเคชันของบุคคลที่สามทำงานได้อย่างราบรื่นในการกำหนดค่าฮาร์ดแวร์ต่างๆ [แหล่งข้อมูล, 38] อุปกรณ์ต้องใช้ API และลักษณะการทำงานเหล่านี้อย่างถูกต้องตามที่ระบุไว้ในส่วนนี้

หน่วยที่อ้างอิงโดยข้อกำหนดในส่วนนี้จะกำหนดไว้ดังนี้

  • "ขนาดเส้นทแยงมุมจริง" คือระยะทางเป็นนิ้วระหว่างมุมตรงข้ามกัน 2 มุมของส่วนที่สว่างของจอแสดงผล
  • "dpi" (หมายถึง "จุดต่อนิ้ว") คือจํานวนพิกเซลที่ล้อมรอบด้วยช่วงแนวนอนหรือแนวตั้ง 1 นิ้ว ในกรณีที่แสดงค่า dpi ทั้ง dpi แนวนอนและแนวตั้งต้องอยู่ภายในช่วง
  • "สัดส่วนภาพ" คืออัตราส่วนของขนาดที่ยาวกว่าของหน้าจอกับขนาดที่สั้นกว่า เช่น จอแสดงผลขนาด 480x854 พิกเซลจะเป็น 854 / 480 = 1.779 หรือประมาณ "16:9"
  • "พิกเซลที่ไม่ขึ้นอยู่กับความหนาแน่น" หรือ ("dp") คือหน่วยพิกเซลเสมือนที่ปรับให้เป็นมาตรฐานสำหรับหน้าจอ 160 dpi โดยคำนวณดังนี้ pixels = dps * (density / 160)

7.1.1. การกำหนดค่าหน้าจอ

ขนาดหน้าจอ

เฟรมเวิร์ก UI ของ Android รองรับหน้าจอขนาดต่างๆ และอนุญาตให้แอปพลิเคชันค้นหาขนาดหน้าจอของอุปกรณ์ (หรือที่เรียกว่า "เลย์เอาต์หน้าจอ") ผ่าน android.content.res.Configuration.screenLayout ด้วย SCREENLAYOUT_SIZE_MASK การติดตั้งใช้งานอุปกรณ์ต้องรายงานขนาดหน้าจอที่ถูกต้องตามที่ระบุไว้ในเอกสารประกอบ Android SDK [แหล่งข้อมูล, 38] และกำหนดโดยแพลตฟอร์ม Android ต้นทาง กล่าวโดยละเอียดคือ การติดตั้งใช้งานอุปกรณ์ต้องรายงานขนาดหน้าจอที่ถูกต้องตามมิติข้อมูลหน้าจอความหนาแน่นของพิกเซลอิสระ (dp) เชิงตรรกะต่อไปนี้

  • อุปกรณ์ต้องมีขนาดหน้าจออย่างน้อย 426 dp x 320 dp ("เล็ก")
  • อุปกรณ์ที่รายงานขนาดหน้าจอเป็น "ปกติ" ต้องมีหน้าจอขนาดอย่างน้อย 480 dp x 320 dp
  • อุปกรณ์ที่รายงานขนาดหน้าจอเป็น "ใหญ่" ต้องมีหน้าจอขนาดอย่างน้อย 640 dp x 480 dp
  • อุปกรณ์ที่รายงานขนาดหน้าจอเป็น "ขนาดใหญ่พิเศษ" ต้องมีหน้าจอขนาดอย่างน้อย 960 dp x 720 dp

นอกจากนี้ อุปกรณ์ต้องมีขนาดหน้าจออย่างน้อย 2.5 นิ้ว

อุปกรณ์ต้องไม่เปลี่ยนขนาดหน้าจอที่รายงานไม่ว่าเมื่อใดก็ตาม

แอปพลิเคชันระบุขนาดหน้าจอที่รองรับได้ผ่านแอตทริบิวต์ <supports-screens> ในไฟล์ AndroidManifest.xml การติดตั้งใช้งานอุปกรณ์ต้องเป็นไปตามการรองรับที่ระบุไว้ของแอปพลิเคชันสำหรับหน้าจอขนาดเล็ก ปกติ ใหญ่ และขนาดใหญ่อย่างถูกต้อง ตามที่อธิบายไว้ในเอกสารประกอบ Android SDK

สัดส่วนภาพหน้าจอ

สัดส่วนภาพต้องเป็นค่าตั้งแต่ 1.3333 (4:3) ถึง 1.86 (ประมาณ 16:9)

ความหนาแน่นของหน้าจอ

เฟรมเวิร์ก UI ของ Android จะกำหนดชุดความหนาแน่นเชิงตรรกะมาตรฐานเพื่อช่วยนักพัฒนาแอปพลิเคชันกำหนดเป้าหมายทรัพยากรของแอปพลิเคชัน การติดตั้งใช้งานอุปกรณ์ต้องรายงานความหนาแน่นของเฟรมเวิร์ก Android เชิงตรรกะอย่างใดอย่างหนึ่งต่อไปนี้ผ่าน android.util.DisplayMetrics API และต้องเรียกใช้แอปพลิเคชันที่ความหนาแน่นมาตรฐานนี้

  • 120 dpi หรือที่เรียกว่า "ldpi"
  • 160 dpi หรือที่เรียกว่า "mdpi"
  • 213 dpi หรือที่เรียกว่า "tvdpi"
  • 240 dpi หรือที่เรียกว่า "hdpi"
  • 320 dpi หรือที่เรียกว่า "xhdpi"
  • 400 dpi หรือที่เรียกว่า "400dpi"
  • 480 dpi หรือที่เรียกว่า "xxhdpi"
  • 640 dpi หรือที่เรียกว่า "xxxhdpi"
การใช้งานอุปกรณ์ควรกำหนดความหนาแน่นของเฟรมเวิร์ก Android มาตรฐานซึ่งใกล้เคียงกับค่าความหนาแน่นจริงของหน้าจอมากที่สุด เว้นแต่ว่าความหนาแน่นเชิงตรรกะดังกล่าวจะทำให้ขนาดหน้าจอที่รายงานต่ำกว่าค่าต่ำสุดที่รองรับ หากความหนาแน่นของเฟรมเวิร์ก Android มาตรฐานที่ใกล้เคียงกับความหนาแน่นของอุปกรณ์มากที่สุดทำให้ขนาดหน้าจอเล็กกว่าขนาดหน้าจอที่เล็กที่สุดที่รองรับ (ความกว้าง 320 dp) การใช้งานอุปกรณ์ควรรายงานความหนาแน่นของเฟรมเวิร์ก Android มาตรฐานที่ต่ำที่สุดถัดไป

7.1.2. เมตริก Display

การติดตั้งใช้งานอุปกรณ์ต้องรายงานค่าที่ถูกต้องสำหรับเมตริกการแสดงผลทั้งหมดที่ระบุไว้ใน android.util.DisplayMetrics [แหล่งข้อมูล, 39]

7.1.3. การวางแนวหน้าจอ

อุปกรณ์ต้องรองรับการวางแนวแบบไดนามิกตามแอปพลิเคชันเพื่อการวางแนวหน้าจอในแนวตั้งหรือแนวนอน กล่าวคือ อุปกรณ์ต้องคำนึงถึงคำขอการวางแนวหน้าจอที่เฉพาะเจาะจงของแอปพลิเคชัน การติดตั้งใช้งานอุปกรณ์อาจเลือกการวางแนวเป็นแนวตั้งหรือแนวนอนโดยค่าเริ่มต้น

อุปกรณ์ต้องรายงานค่าที่ถูกต้องสำหรับการวางแนวปัจจุบันของอุปกรณ์ทุกครั้งที่มีการค้นหาผ่าน android.content.res.Configuration.orientation, android.view.Display.getOrientation() หรือ API อื่นๆ

อุปกรณ์ต้องไม่เปลี่ยนขนาดหรือความหนาแน่นของหน้าจอที่รายงานเมื่อเปลี่ยนการวางแนว

อุปกรณ์ต้องรายงานการวางแนวหน้าจอที่รองรับ ( android.hardware.screen.portrait และ/หรือ android.hardware.screen.landscape) และต้องรายงานการวางแนวที่รองรับอย่างน้อย 1 รายการ เช่น อุปกรณ์ที่มีหน้าจอแนวนอนแบบคงที่ เช่น ทีวีหรือแล็ปท็อป จะต้องรายงานandroid.hardware.screen.landscapeเท่านั้น

7.1.4. การเร่งกราฟิก 2 มิติและ 3 มิติ

การติดตั้งใช้งานอุปกรณ์ต้องรองรับทั้ง OpenGL ES 1.0 และ 2.0 ตามที่ระบุไว้และอธิบายอย่างละเอียดในเอกสารประกอบของ Android SDK การติดตั้งใช้งานอุปกรณ์ควรรองรับ OpenGL ES 3.0 ในอุปกรณ์ที่รองรับ OpenGL ES 3.0 การติดตั้งใช้งานอุปกรณ์ต้องรองรับ Android Renderscript ด้วย ตามที่ระบุไว้ในเอกสารประกอบของ Android SDK [ทรัพยากร, 8]

การติดตั้งใช้งานอุปกรณ์ต้องระบุตัวเองอย่างถูกต้องว่ารองรับ OpenGL ES 1.0, OpenGL ES 2.0 หรือ OpenGL ES 3.0 ด้วย นั่นคือ

  • API ที่มีการจัดการ (เช่น ผ่านเมธอด GLES10.getString()) ต้องรายงานการรองรับ OpenGL ES 1.0 และ OpenGL ES 2.0
  • OpenGL API ของ C/C++ เดิม (นั่นคือ API ที่พร้อมให้บริการแก่แอปผ่าน libGLES_v1CM.so, libGLES_v2.so หรือ libEGL.so) จะต้องรายงานการรองรับ OpenGL ES 1.0 และ OpenGL ES 2.0
  • การติดตั้งใช้งานอุปกรณ์ที่ประกาศรองรับ OpenGL ES 3.0 จะต้องรองรับ API ที่มีการจัดการของ OpenGL ES 3.0 และรองรับ API ของ C/C++ ดั้งเดิม การใช้งานในอุปกรณ์ที่ประกาศรองรับ OpenGL ES 3.0 นั้น libGLESv2.so จะต้องส่งออกสัญลักษณ์ฟังก์ชัน OpenGL ES 3.0 นอกเหนือจากสัญลักษณ์ฟังก์ชัน OpenGL ES 2.0

การติดตั้งใช้งานอุปกรณ์อาจใช้ส่วนขยาย OpenGL ES ที่ต้องการ อย่างไรก็ตาม การติดตั้งใช้งานอุปกรณ์ต้องรายงานสตริงส่วนขยายทั้งหมดที่รองรับผ่าน API ของ OpenGL ES ที่มีการจัดการและ API เดิม และในทางกลับกัน ต้องไม่รายงานสตริงส่วนขยายที่ไม่รองรับ

โปรดทราบว่า Android รองรับแอปพลิเคชันที่จะระบุ (ไม่บังคับ) ว่าต้องใช้รูปแบบการบีบอัดพื้นผิว OpenGL ที่เฉพาะเจาะจง โดยทั่วไปแล้ว รูปแบบเหล่านี้จะเจาะจงผู้ให้บริการ Android ไม่จำเป็นต้องใช้รูปแบบการบีบอัดพื้นผิวที่เฉพาะเจาะจงในการติดตั้งใช้งานอุปกรณ์ อย่างไรก็ตาม ผู้ผลิตแอปควรรายงานรูปแบบการบีบอัดพื้นผิวที่รองรับอย่างถูกต้องผ่านเมธอด getString() ใน OpenGL API

Android มีกลไกสำหรับแอปพลิเคชันในการประกาศว่าต้องการเปิดใช้การเร่งด้วยฮาร์ดแวร์สำหรับกราฟิก 2 มิติที่ระดับแอปพลิเคชัน กิจกรรม หน้าต่าง หรือมุมมองผ่านการใช้แท็กไฟล์ Manifest android:hardwareAccelerated หรือการเรียก API โดยตรง [แหล่งข้อมูล, 9]

ใน Android 4.4 การใช้งานอุปกรณ์ต้องเปิดใช้การเร่งฮาร์ดแวร์โดยค่าเริ่มต้น และต้องปิดใช้การเร่งฮาร์ดแวร์หากนักพัฒนาแอปร้องขอ โดยการตั้งค่า android:hardwareAccelerated="false" หรือปิดใช้การเร่งฮาร์ดแวร์ผ่าน Android View API โดยตรง

นอกจากนี้ การติดตั้งใช้งานอุปกรณ์ต้องแสดงลักษณะการทำงานที่สอดคล้องกับเอกสารประกอบ Android SDK เกี่ยวกับการเร่งฮาร์ดแวร์ [แหล่งข้อมูล, 9]

Android มีออบเจ็กต์ TextureView ที่ช่วยนักพัฒนาแอปผสานรวมพื้นผิว OpenGL ES ที่เร่งด้วยฮาร์ดแวร์เป็นเป้าหมายการแสดงผลในลําดับชั้น UI ได้โดยตรง การติดตั้งใช้งานอุปกรณ์ต้องรองรับ TextureView API และต้องแสดงลักษณะการทำงานที่สอดคล้องกันกับการติดตั้งใช้งาน Android ต้นทาง

Android รองรับ EGL_ANDROID_RECORDABLE ซึ่งเป็นแอตทริบิวต์ EGLConfig ที่ระบุว่า EGLConfig รองรับการแสดงผลไปยัง ANativeWindow ที่บันทึกรูปภาพเป็นวิดีโอหรือไม่ การติดตั้งใช้งานอุปกรณ์ต้องรองรับส่วนขยาย EGL_ANDROID_RECORDABLE [แหล่งข้อมูล, 79]

7.1.5. โหมดความเข้ากันได้ของแอปพลิเคชันเดิม

Android จะระบุ "โหมดความเข้ากันได้" ซึ่งเฟรมเวิร์กจะทํางานในโหมดขนาดหน้าจอ "ปกติ" (ความกว้าง 320dp) เพื่อประโยชน์ของแอปพลิเคชันเดิมที่ไม่ได้พัฒนาขึ้นสําหรับ Android เวอร์ชันเก่าซึ่งอยู่ก่อนยุคที่รองรับหน้าจอทุกขนาด การติดตั้งใช้งานอุปกรณ์ต้องรองรับโหมดความเข้ากันได้ของแอปรุ่นเดิมตามที่โค้ดโอเพนซอร์สของ Android ต้นทางนำมาใช้งาน กล่าวคือ การติดตั้งใช้งานอุปกรณ์ต้องไม่เปลี่ยนแปลงทริกเกอร์หรือเกณฑ์ที่เปิดใช้งานโหมดความเข้ากันได้ และต้องไม่เปลี่ยนแปลงลักษณะการทํางานของโหมดความเข้ากันได้

7.1.6. ประเภทหน้าจอ

หน้าจอการติดตั้งใช้งานอุปกรณ์แบ่งออกเป็น 2 ประเภท ได้แก่

  • การติดตั้งใช้งานจอแสดงผลแบบพิกเซลคงที่: หน้าจอเป็นแผงเดียวที่รองรับความกว้างและความสูงของพิกเซลเพียงค่าเดียว โดยปกติแล้วหน้าจอจะผสานรวมกับอุปกรณ์ เช่น โทรศัพท์มือถือ แท็บเล็ต และอื่นๆ
  • การใช้งานจอแสดงผลแบบพิกเซลแปรผัน: การใช้งานอุปกรณ์ไม่มีหน้าจอที่ฝังและมีพอร์ตเอาต์พุตวิดีโอ เช่น VGA, HDMI หรือพอร์ตไร้สายสำหรับแสดงผล หรือมีหน้าจอที่ฝังซึ่งเปลี่ยนขนาดพิกเซลได้ ตัวอย่างเช่น ทีวี กล่องรับสัญญาณ และอื่นๆ

การติดตั้งใช้งานอุปกรณ์พิกเซลคงที่

การติดตั้งใช้งานอุปกรณ์พิกเซลคงที่อาจใช้หน้าจอขนาดพิกเซลใดก็ได้ ตราบใดที่เป็นไปตามข้อกำหนดที่ระบุไว้ในคำจำกัดความความเข้ากันได้นี้

การติดตั้งใช้งานพิกเซลคงที่อาจมีพอร์ตเอาต์พุตวิดีโอเพื่อใช้กับจอแสดงผลภายนอก อย่างไรก็ตาม หากมีการใช้จอแสดงผลดังกล่าวเพื่อเรียกใช้แอป อุปกรณ์ต้องเป็นไปตามข้อกำหนดต่อไปนี้

  • อุปกรณ์ต้องรายงานการกำหนดค่าหน้าจอและเมตริกการแสดงผลเดียวกันกับจอแสดงผลพิกเซลคงที่ตามที่ระบุไว้ในส่วน 7.1.1 และ 7.1.2
  • อุปกรณ์ต้องรายงานความหนาแน่นเชิงตรรกะเดียวกันกับจอแสดงผลพิกเซลคงที่
  • อุปกรณ์ต้องรายงานขนาดหน้าจอที่เหมือนกับหรือใกล้เคียงกับจอแสดงผลแบบพิกเซลคงที่

เช่น แท็บเล็ตขนาดเส้นทแยงมุม 7 นิ้วที่มีความละเอียด 1024x600 พิกเซลจะถือว่าเป็นการใช้งานจอแสดงผล mdpi ขนาดใหญ่แบบพิกเซลคงที่ หากมีพอร์ตเอาต์พุตวิดีโอที่แสดงที่ 720p หรือ 1080p การติดตั้งใช้งานอุปกรณ์จะต้องปรับขนาดเอาต์พุตเพื่อให้แอปพลิเคชันทำงานในหน้าต่าง mdpi ขนาดใหญ่เท่านั้น ไม่ว่าจะมีการใช้จอแสดงผลพิกเซลคงที่หรือพอร์ตเอาต์พุตวิดีโอก็ตาม

การใช้งานอุปกรณ์พิกเซลแบบปรับได้

การติดตั้งใช้งานอุปกรณ์แบบพิกเซลแบบปรับได้ต้องรองรับความละเอียดอย่างน้อย 1 รายการต่อไปนี้ 1280x720, 1920x1080 หรือ 3840x2160 (นั่นคือ 720p, 1080p หรือ 4K) การติดตั้งใช้งานอุปกรณ์ที่มีจอแสดงผลแบบพิกเซลแบบปรับได้ต้องไม่รองรับการกำหนดค่าหรือโหมดหน้าจออื่นๆ การติดตั้งใช้งานอุปกรณ์ที่มีหน้าจอพิกเซลแบบปรับได้อาจเปลี่ยนการกำหนดค่าหรือโหมดหน้าจอขณะรันไทม์หรือเวลาบูต เช่น ผู้ใช้กล่องรับสัญญาณอาจเปลี่ยนจอแสดงผล 720p เป็นจอแสดงผล 1080p และการใช้งานอุปกรณ์อาจปรับตาม

นอกจากนี้ การติดตั้งใช้งานอุปกรณ์พิกเซลแบบแปรผันต้องรายงานที่เก็บการกำหนดค่าต่อไปนี้สำหรับมิติข้อมูลพิกเซลเหล่านี้

  • 1280x720 (หรือที่เรียกว่า 720p): ขนาดหน้าจอ "ใหญ่" ความหนาแน่น "tvdpi" (213 dpi)
  • 1920x1080 (หรือที่เรียกว่า 1080p): หน้าจอขนาด "ใหญ่" ความหนาแน่น "xhdpi" (320 dpi)
  • 3840x2160 (หรือที่เรียกว่า 4K): ขนาดหน้าจอ "ใหญ่" ความหนาแน่น "xxxhdpi" (640 dpi)

เพื่อความชัดเจน การติดตั้งใช้งานอุปกรณ์ที่มีมิติข้อมูลพิกเซลแบบแปรผันจะจํากัดไว้ที่ 720p, 1080p หรือ 4K ใน Android 4.4 และต้องกําหนดค่าให้รายงานกลุ่มขนาดและความละเอียดของหน้าจอตามที่ระบุไว้ข้างต้น

7.1.7. เทคโนโลยีหน้าจอ

แพลตฟอร์ม Android มี API ที่ช่วยให้แอปพลิเคชันแสดงผลกราฟิกแบบริชมีเดียบนจอแสดงผลได้ อุปกรณ์ต้องรองรับ API ทั้งหมดเหล่านี้ตามที่ Android SDK กำหนด เว้นแต่จะได้รับอนุญาตอย่างเจาะจงในเอกสารนี้ ดังนี้

  • อุปกรณ์ต้องรองรับจอแสดงผลที่แสดงผลกราฟิกสี 16 บิตได้ และควรรองรับจอแสดงผลที่แสดงผลกราฟิกสี 24 บิตได้
  • อุปกรณ์ต้องรองรับจอแสดงผลที่แสดงภาพเคลื่อนไหวได้
  • เทคโนโลยีการแสดงผลที่ใช้ต้องมีสัดส่วนพิกเซล (PAR) อยู่ระหว่าง 0.9 ถึง 1.1 กล่าวคือ สัดส่วนพิกเซลต้องใกล้เคียงกับสี่เหลี่ยมจัตุรัส (1.0) โดยมีความคลาดเคลื่อน 10%

7.1.8. จอแสดงผลภายนอก

Android รองรับจอแสดงผลรองเพื่อให้สามารถแชร์สื่อได้ รวมถึง API สําหรับนักพัฒนาแอปในการเข้าถึงจอแสดงผลภายนอก หากอุปกรณ์รองรับจอแสดงผลภายนอกผ่านการเชื่อมต่อแบบใช้สาย ไร้สาย หรือการเชื่อมต่อจอแสดงผลเพิ่มเติมที่ฝังอยู่ การใช้งานอุปกรณ์จะต้องใช้ Display Manager API ตามที่อธิบายไว้ในเอกสารประกอบ Android SDK [แหล่งข้อมูล, 75] การติดตั้งใช้งานอุปกรณ์ที่รองรับเอาต์พุตวิดีโอที่ปลอดภัยและรองรับแพลตฟอร์มที่ปลอดภัยต้องประกาศการรองรับDisplay.FLAG_SECURE กล่าวโดยละเอียดคือ การติดตั้งใช้งานอุปกรณ์ที่ประกาศว่ารองรับ Display.FLAG_SECURE ต้องรองรับ HDCP 2.x ขึ้นไป สำหรับจอแสดงผลแบบไร้สาย Miracast หรือ HDCP 1.2 ขึ้นไป สำหรับจอแสดงผลแบบใช้สาย การใช้งานโอเพนซอร์สของ Android เวอร์ชันอัปสตรีมจะรองรับจอแสดงผลแบบไร้สาย (Miracast) และแบบใช้สาย (HDMI) ที่เป็นไปตามข้อกำหนดนี้

7.2. อุปกรณ์อินพุต

7.2.1. แป้นพิมพ์

การติดตั้งใช้งานอุปกรณ์

  • ต้องรองรับเฟรมเวิร์กการจัดการอินพุต (ซึ่งช่วยให้นักพัฒนาแอปบุคคลที่สามสร้างเครื่องมือการจัดการอินพุตได้ เช่น แป้นพิมพ์บนหน้าจอ) ตามที่ระบุไว้อย่างละเอียดที่ http://developer.android.com
  • ต้องระบุการใช้งานแป้นพิมพ์เสมือนอย่างน้อย 1 รายการ (ไม่ว่าจะมีแป้นพิมพ์จริงหรือไม่ก็ตาม)
  • อาจรวมถึงการติดตั้งใช้งานแป้นพิมพ์เสมือนเพิ่มเติม
  • มีแป้นพิมพ์ฮาร์ดแวร์
  • ต้องไม่มีแป้นพิมพ์ฮาร์ดแวร์ที่ไม่ตรงกับรูปแบบใดรูปแบบหนึ่งซึ่งระบุไว้ใน android.content.res.Configuration.keyboard [แหล่งข้อมูล, 40] (นั่นคือ QWERTY หรือ 12 ปุ่ม)

7.2.2. การนำทางแบบไม่สัมผัส

การติดตั้งใช้งานอุปกรณ์

  • อาจละเว้นตัวเลือกการไปยังส่วนต่างๆ ที่ไม่ใช้การสัมผัส (กล่าวคือ อาจละเว้นแทร็กบอล แผ่นบังคับทิศทาง หรือล้อ)
  • ต้องรายงานค่าที่ถูกต้องสำหรับ android.content.res.Configuration.navigation [Resources, 40]
  • ต้องจัดให้มีกลไกอินเทอร์เฟซผู้ใช้ทางเลือกที่สมเหตุสมผลสำหรับการเลือกและแก้ไขข้อความ ซึ่งเข้ากันได้กับเครื่องมือจัดการอินพุต การใช้งานโอเพนซอร์สของ Android เวอร์ชัน upstream มีกลไกการเลือกที่เหมาะสมสำหรับใช้กับอุปกรณ์ที่ไม่มีอินพุตการไปยังส่วนต่างๆ ที่ไม่ใช้การสัมผัส

7.2.3. ปุ่มนำทาง

ฟังก์ชันหน้าแรก ล่าสุด และย้อนกลับเป็นสิ่งสำคัญสำหรับรูปแบบการนําทางของ Android การติดตั้งใช้งานอุปกรณ์ต้องทำให้ฟังก์ชันเหล่านี้พร้อมใช้งานสำหรับผู้ใช้ตลอดเวลาเมื่อเรียกใช้แอปพลิเคชัน ฟังก์ชันเหล่านี้อาจใช้ผ่านปุ่มบนอุปกรณ์โดยเฉพาะ (เช่น ปุ่มกดหรือปุ่มสัมผัสแบบ Capacitive) หรืออาจใช้ผ่านคีย์ซอฟต์แวร์เฉพาะในส่วนต่างๆ ของหน้าจอ ท่าทางสัมผัส แผงสัมผัส ฯลฯ Android รองรับการใช้งานทั้ง 2 แบบ ฟังก์ชันเหล่านี้ทั้งหมดต้องเข้าถึงได้ด้วยการดำเนินการเพียงครั้งเดียว (เช่น แตะ ดับเบิลคลิก หรือท่าทางสัมผัส) เมื่อมองเห็น

ฟังก์ชัน "ย้อนกลับ" และ "ล่าสุด" ควรมีปุ่มหรือไอคอนที่มองเห็นได้ เว้นแต่ว่าจะถูกซ่อนไว้พร้อมกับฟังก์ชันการไปยังส่วนต่างๆ อื่นๆ ในโหมดเต็มหน้าจอ ฟังก์ชันหน้าแรกต้องมีปุ่มหรือไอคอนที่มองเห็นได้ เว้นแต่จะซ่อนไว้พร้อมกับฟังก์ชันการไปยังส่วนต่างๆ อื่นๆ ในโหมดเต็มหน้าจอ

ฟังก์ชันเมนูเลิกใช้งานแล้วตั้งแต่ Android 4.0 เปลี่ยนไปใช้แถบการดำเนินการแทน การติดตั้งใช้งานอุปกรณ์ไม่ควรใช้ปุ่มจริงเฉพาะสำหรับฟังก์ชันเมนู หากมีการใช้ปุ่มเมนูบนอุปกรณ์และอุปกรณ์กําลังใช้งานแอปพลิเคชันที่มี targetSdkVersion มากกว่า 10 การติดตั้งใช้งานอุปกรณ์จะมีลักษณะดังนี้

  • สำหรับอุปกรณ์ที่เปิดตัวด้วย Android 4.4 จะต้องแสดงปุ่มรายการเพิ่มเติมของการดำเนินการในแถบการดำเนินการเมื่อแถบการดำเนินการปรากฏขึ้น และป๊อปอัปเมนูรายการเพิ่มเติมของการดำเนินการที่ปรากฏขึ้นจะต้องไม่ว่างเปล่า
  • สำหรับอุปกรณ์ที่มีอยู่ซึ่งเปิดตัวด้วยเวอร์ชันก่อนหน้าแต่อัปเกรดเป็น Android 4.4 ควรแสดงปุ่มการดำเนินการเพิ่มเติมในแถบการดำเนินการเมื่อแถบการดำเนินการปรากฏขึ้นและป๊อปอัปเมนูการดำเนินการเพิ่มเติมที่ปรากฏขึ้นนั้นไม่ว่างเปล่า
  • ต้องไม่แก้ไขตําแหน่งของป๊อปอัปรายการเพิ่มเติมของการดำเนินการที่แสดงโดยการเลือกปุ่มรายการเพิ่มเติมในแถบการดำเนินการ
  • อาจแสดงผลป๊อปอัปรายการการดำเนินการเพิ่มเติมในตำแหน่งที่แก้ไขแล้วบนหน้าจอเมื่อแสดงโดยเลือกปุ่มเมนูจริง

การใช้งานอุปกรณ์ต้องให้บริการฟังก์ชันเมนูแก่แอปพลิเคชันเมื่อ targetSdkVersion <= 10 ไม่ว่าจะด้วยปุ่มจริง แป้นซอฟต์แวร์ หรือท่าทางสัมผัส ทั้งนี้เพื่อให้ใช้งานร่วมกันได้ย้อนหลัง ฟังก์ชันเมนูนี้ควรแสดง เว้นแต่จะซ่อนไว้พร้อมกับฟังก์ชันการนำทางอื่นๆ

Android รองรับการดำเนินการ Assist [Resources, 63] การติดตั้งใช้งานอุปกรณ์ต้องทำให้ผู้ใช้ดำเนินการ Assist ได้ตลอดเวลาเมื่อเรียกใช้แอปพลิเคชัน การดำเนินการ Assist ควรใช้โดยการกดปุ่มหน้าแรกค้างไว้หรือใช้ท่าทางสัมผัสด้วยการปัดขึ้นบนปุ่มหน้าแรกแบบซอฟต์แวร์ ฟังก์ชันนี้อาจใช้ผ่านปุ่มจริง ปุ่มซอฟต์แวร์ หรือท่าทางสัมผัสอื่นๆ แต่ต้องเข้าถึงได้ด้วยการดำเนินการเพียงครั้งเดียว (เช่น แตะ ดับเบิลคลิก หรือท่าทางสัมผัส) เมื่อปุ่มการไปยังส่วนต่างๆ อื่นๆ ปรากฏอยู่

การติดตั้งใช้งานอุปกรณ์อาจใช้ส่วนต่างๆ ของหน้าจอเพื่อแสดงปุ่มการนําทาง แต่หากเป็นเช่นนั้น จะต้องเป็นไปตามข้อกําหนดต่อไปนี้

  • ปุ่มการไปยังส่วนต่างๆ ของอุปกรณ์ต้องใช้พื้นที่บนหน้าจอที่แยกต่างหาก ซึ่งแอปพลิเคชันไม่สามารถเข้าถึงได้ และต้องไม่บดบังหรือรบกวนพื้นที่บนหน้าจอที่แอปพลิเคชันเข้าถึงได้
  • การติดตั้งใช้งานอุปกรณ์ต้องจัดสรรพื้นที่ส่วนหนึ่งของจอแสดงผลให้กับแอปพลิเคชันที่เป็นไปตามข้อกำหนดที่ระบุไว้ในส่วนที่ 7.1.1
  • การติดตั้งใช้งานอุปกรณ์ต้องแสดงปุ่มการนําทางเมื่อแอปพลิเคชันไม่ได้ระบุโหมด UI ของระบบหรือระบุ SYSTEM_UI_FLAG_VISIBLE
  • การติดตั้งใช้งานอุปกรณ์ต้องแสดงปุ่มการไปยังส่วนต่างๆ ในโหมด "ซ่อนอยู่" (เช่น สลัว) ที่ไม่รบกวนเมื่อแอปพลิเคชันระบุSYSTEM_UI_FLAG_LOW_PROFILE
  • การติดตั้งใช้งานอุปกรณ์ต้องซ่อนปุ่มการไปยังส่วนต่างๆ เมื่อแอปพลิเคชันระบุ SYSTEM_UI_FLAG_HIDE_NAVIGATION

7.2.4. การป้อนข้อมูลด้วยหน้าจอสัมผัส

การติดตั้งใช้งานอุปกรณ์ควรมีระบบอินพุตเคอร์เซอร์บางประเภท (แบบเมาส์หรือแบบสัมผัส) อย่างไรก็ตาม หากการติดตั้งใช้งานอุปกรณ์ไม่รองรับระบบการป้อนข้อมูลด้วยเคอร์เซอร์ อุปกรณ์ต้องไม่รายงานค่าคงที่ของฟีเจอร์ android.hardware.touchscreen หรือ android.hardware.faketouch การติดตั้งใช้งานอุปกรณ์ที่มีระบบอินพุตด้วยเคอร์เซอร์

  • ควรรองรับเคอร์เซอร์ที่ติดตามอย่างอิสระได้อย่างเต็มที่ หากระบบอินพุตของอุปกรณ์รองรับเคอร์เซอร์หลายตัว
  • ต้องรายงานค่าของ android.content.res.Configuration.touchscreen [Resources, 40] ที่สอดคล้องกับประเภทของหน้าจอสัมผัสที่เฉพาะเจาะจงในอุปกรณ์

Android รองรับหน้าจอสัมผัส แท็บเล็ตสัมผัส และอุปกรณ์อินพุตการสัมผัสจำลองที่หลากหลาย การติดตั้งใช้งานอุปกรณ์ที่ใช้หน้าจอสัมผัสจะเชื่อมโยงกับจอแสดงผล [แหล่งข้อมูล, 81] เพื่อให้ผู้ใช้รู้สึกว่าได้โต้ตอบกับรายการต่างๆ บนหน้าจอโดยตรง เนื่องจากผู้ใช้สัมผัสหน้าจอโดยตรง ระบบจึงไม่จำเป็นต้องมีสิ่งอำนวยความสะดวกเพิ่มเติมเพื่อระบุวัตถุที่กำลังมีการจัดการ ในทางตรงกันข้าม อินเทอร์เฟซการสัมผัสจำลองมีระบบการป้อนข้อมูลของผู้ใช้ที่ใกล้เคียงกับความสามารถของหน้าจอสัมผัสบางส่วน เช่น เมาส์หรือรีโมตคอนโทรลที่ควบคุมเคอร์เซอร์บนหน้าจอจะคล้ายกับการสัมผัส แต่ผู้ใช้ต้องชี้หรือโฟกัสก่อนแล้วจึงคลิก อุปกรณ์อินพุตจำนวนมาก เช่น เมาส์ แทร็กแพด เมาส์ไร้สายแบบใช้แรงโน้มถ่วง ชี้เซอร์แบบใช้แรงโน้มถ่วง จอยสติ๊ก และแทร็กแพดแบบมัลติทัช รองรับการโต้ตอบแบบสัมผัสจำลอง Android 4.0 มีค่าคงที่ของฟีเจอร์ android.hardware.faketouch ซึ่งสอดคล้องกับอุปกรณ์อินพุตแบบไม่สัมผัส (นั่นคืออุปกรณ์ที่ใช้เคอร์เซอร์) ที่มีคุณภาพสูง เช่น เมาส์หรือแทร็กแพด ซึ่งสามารถจําลองอินพุตแบบสัมผัสได้อย่างเพียงพอ (รวมถึงการรองรับท่าทางสัมผัสพื้นฐาน) และระบุว่าอุปกรณ์รองรับฟังก์ชันการทำงานของหน้าจอสัมผัสชุดย่อยที่จำลอง การติดตั้งใช้งานอุปกรณ์ที่ประกาศฟีเจอร์การแตะจำลองต้องเป็นไปตามข้อกำหนดการแตะจำลองในส่วนที่ 7.2.5

การติดตั้งใช้งานอุปกรณ์ต้องรายงานฟีเจอร์ที่ถูกต้องซึ่งสอดคล้องกับประเภทอินพุตที่ใช้ การติดตั้งใช้งานอุปกรณ์ที่มีหน้าจอสัมผัส (แบบสัมผัสเดียวหรือดีกว่า) จะต้องรายงานค่าคงที่ของฟีเจอร์แพลตฟอร์ม android.hardware.touchscreen การติดตั้งใช้งานอุปกรณ์ที่รายงานค่าคงที่ของฟีเจอร์แพลตฟอร์ม android.hardware.touchscreen จะต้องรายงานค่าคงที่ของฟีเจอร์แพลตฟอร์มด้วยเช่นกัน android.hardware.faketouch การติดตั้งใช้งานอุปกรณ์ที่ไม่มีหน้าจอสัมผัส (และใช้อุปกรณ์ชี้เฉพาะ) ต้องไม่รายงานฟีเจอร์หน้าจอสัมผัสใดๆ และต้องรายงานเฉพาะ android.hardware.faketouch หากเป็นไปตามข้อกำหนดการแตะจำลองในส่วนที่ 7.2.5

7.2.5. การป้อนข้อมูลด้วยการสัมผัสจำลอง

การติดตั้งใช้งานอุปกรณ์ที่ประกาศว่ารองรับ android.hardware.faketouch

  • ต้องรายงานตำแหน่งสัมบูรณ์ X และ Y ของหน้าจอของตำแหน่งเคอร์เซอร์ และแสดงเคอร์เซอร์ที่มองเห็นได้บนหน้าจอ [แหล่งข้อมูล, 80]
  • ต้องรายงานเหตุการณ์การสัมผัสด้วยโค้ดการดำเนินการ [แหล่งข้อมูล, 80] ที่ระบุการเปลี่ยนแปลงสถานะที่เกิดขึ้นเมื่อเคอร์เซอร์เปลี่ยนเป็น down หรือ up บนหน้าจอ [แหล่งข้อมูล, 80]
  • ต้องรองรับเคอร์เซอร์ down และ up บนออบเจ็กต์บนหน้าจอ ซึ่งช่วยให้ผู้ใช้จําลองการแตะออบเจ็กต์บนหน้าจอได้
  • ต้องรองรับเคอร์เซอร์ down, เคอร์เซอร์ up, เคอร์เซอร์ down แล้วตามด้วยเคอร์เซอร์ up ในตำแหน่งเดียวกันบนวัตถุบนหน้าจอภายในเกณฑ์เวลา ซึ่งช่วยให้ผู้ใช้จำลองการแตะสองครั้งที่วัตถุบนหน้าจอได้ [แหล่งข้อมูล, 80]
  • ต้องรองรับเคอร์เซอร์ down ที่จุดใดก็ได้บนหน้าจอ เคอร์เซอร์ย้ายไปยังจุดใดก็ได้บนหน้าจอ ตามด้วยเคอร์เซอร์ up ซึ่งช่วยให้ผู้ใช้จําลองการลากด้วยการแตะได้
  • ต้องรองรับเคอร์เซอร์ down จากนั้นอนุญาตให้ผู้ใช้ย้ายวัตถุไปยังตำแหน่งอื่นบนหน้าจอได้อย่างรวดเร็ว และรองรับเคอร์เซอร์ up บนหน้าจอ ซึ่งช่วยให้ผู้ใช้สามารถเหวี่ยงวัตถุบนหน้าจอได้

อุปกรณ์ที่ประกาศว่ารองรับ android.hardware.faketouch.multitouch.distinct ต้องเป็นไปตามข้อกำหนดสำหรับฟีเจอร์การแตะเสมือนจริงข้างต้น และต้องรองรับการติดตามอินพุตเคอร์เซอร์อิสระอย่างน้อย 2 รายการแยกกันด้วย

7.2.6. ไมโครโฟน

การติดตั้งใช้งานอุปกรณ์อาจไม่รวมไมโครโฟน อย่างไรก็ตาม หากการใช้งานอุปกรณ์ไม่มีไมโครโฟน อุปกรณ์ต้องไม่รายงานค่าคงที่ของฟีเจอร์ android.hardware.microphone และต้องใช้งาน API การบันทึกเสียงเป็น No-Ops ตามส่วนที่ 7 ในทางกลับกัน การใช้งานอุปกรณ์ที่มีไมโครโฟนจะมีลักษณะดังนี้

  • ต้องรายงานค่าคงที่ของฟีเจอร์ android.hardware.microphone
  • ควรเป็นไปตามข้อกำหนดด้านคุณภาพเสียงในส่วนที่ 5.4
  • ควรเป็นไปตามข้อกำหนดเกี่ยวกับเวลาในการตอบสนองของเสียงในส่วนที่ 5.5

7.3. เซ็นเซอร์

Android มี API สําหรับการเข้าถึงเซ็นเซอร์หลายประเภท โดยทั่วไปการติดตั้งใช้งานอุปกรณ์อาจไม่รวมเซ็นเซอร์เหล่านี้ตามที่ระบุไว้ในส่วนย่อยต่อไปนี้ หากอุปกรณ์มีเซ็นเซอร์บางประเภทที่มี API ที่สอดคล้องกันสำหรับนักพัฒนาแอปบุคคลที่สาม การติดตั้งใช้งานอุปกรณ์จะต้องใช้ API ดังกล่าวตามที่อธิบายไว้ในเอกสารประกอบของ Android SDK ตัวอย่างเช่น การติดตั้งใช้งานอุปกรณ์

  • ต้องรายงานการมีอยู่หรือไม่มีของเซ็นเซอร์ตามandroid.content.pm.PackageManagerคลาสอย่างถูกต้อง [แหล่งข้อมูล, 37]
  • ต้องแสดงรายการเซ็นเซอร์ที่รองรับที่ถูกต้องผ่าน SensorManager.getSensorList() และวิธีการที่คล้ายกัน
  • ต้องทํางานอย่างสมเหตุสมผลสําหรับ Sensor API อื่นๆ ทั้งหมด (เช่น แสดงผลเป็นจริงหรือเท็จตามความเหมาะสมเมื่อแอปพลิเคชันพยายามลงทะเบียนตัวรับฟัง ไม่เรียกใช้ตัวรับฟังเซ็นเซอร์เมื่อไม่มีเซ็นเซอร์ที่เกี่ยวข้อง เป็นต้น)
  • ต้องรายงานค่าการวัดจากเซ็นเซอร์ทั้งหมดโดยใช้ค่าระบบหน่วยวัดระหว่างประเทศ (เมตริก) ที่เกี่ยวข้องสำหรับเซ็นเซอร์แต่ละประเภทตามที่ระบุไว้ในเอกสารประกอบของ Android SDK [แหล่งข้อมูล, 41]

รายการข้างต้นเป็นเพียงตัวอย่างบางส่วนเท่านั้น ลักษณะการทํางานของ Android SDK ที่บันทึกไว้ถือเป็นข้อมูลที่น่าเชื่อถือ

เซ็นเซอร์บางประเภทเป็นแบบสังเคราะห์ ซึ่งหมายความว่าสามารถดึงข้อมูลได้จากเซ็นเซอร์อื่นๆ อย่างน้อย 1 ตัว (เช่น เซ็นเซอร์การวางแนวและเซ็นเซอร์ความเร่งเชิงเส้น) การติดตั้งใช้งานอุปกรณ์ควรใช้เซ็นเซอร์ประเภทเหล่านี้เมื่อติดตั้งเซ็นเซอร์ที่จับสัญญาณได้จริงตามข้อกําหนด

Android มีแนวคิดเกี่ยวกับเซ็นเซอร์ "สตรีมมิง" ซึ่งเป็นเซ็นเซอร์ที่แสดงผลข้อมูลอย่างต่อเนื่อง ไม่ใช่เฉพาะเมื่อข้อมูลมีการเปลี่ยนแปลง การติดตั้งใช้งานอุปกรณ์ต้องให้ตัวอย่างข้อมูลเป็นระยะๆ อย่างต่อเนื่องสําหรับ API ใดๆ ที่เอกสารประกอบ Android SDK ระบุว่าเป็นเซ็นเซอร์สตรีมมิง โปรดทราบว่าการติดตั้งใช้งานอุปกรณ์ต้องตรวจสอบว่าสตรีมเซ็นเซอร์ต้องไม่ป้องกันไม่ให้ CPU ของอุปกรณ์เข้าสู่สถานะ "หยุดชั่วคราว" หรือตื่นจากสถานะ "หยุดชั่วคราว"

7.3.1. ตัวตรวจวัดความเร่ง

การติดตั้งใช้งานอุปกรณ์ควรมีตัววัดความเร่งแบบ 3 แกน หากการติดตั้งใช้งานอุปกรณ์มีตัววัดความเร่งแบบ 3 แกน อุปกรณ์จะมีลักษณะดังนี้

  • ควรแสดงเหตุการณ์ที่ 120 Hz ขึ้นไปได้ โปรดทราบว่าแม้ว่าความถี่ของเซ็นเซอร์ตรวจจับแรงสั่นสะเทือนข้างต้นจะระบุว่า "ควร" สำหรับ Android 4.4 แต่เราวางแผนที่จะเปลี่ยนคำจำกัดความความเข้ากันได้สำหรับเวอร์ชันในอนาคตเป็น "ต้อง" กล่าวคือ มาตรฐานเหล่านี้เป็นมาตรฐานที่ไม่บังคับใน Android แต่จะต้องใช้ในเวอร์ชันในอนาคต เราขอแนะนำให้อุปกรณ์ที่มีอยู่และอุปกรณ์ใหม่ที่ใช้ Android มีคุณสมบัติตรงตามข้อกำหนดเหล่านี้ใน Android เพื่อให้อัปเกรดเป็นแพลตฟอร์มรุ่นในอนาคตได้
  • ต้องเป็นไปตามระบบพิกัดเซ็นเซอร์ของ Android ตามที่ระบุไว้ใน Android API (ดู [แหล่งข้อมูล, 41])
  • ต้องสามารถวัดจากการตกอย่างอิสระได้สูงสุด 2 เท่าของแรงโน้มถ่วง (2g) หรือมากกว่านั้นในเวกเตอร์ 3 มิติ
  • ต้องมีความละเอียด 8 บิตขึ้นไป
  • ค่าความเบี่ยงเบนมาตรฐานต้องไม่เกิน 0.05 m/s^2

7.3.2. เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็ก

การติดตั้งใช้งานอุปกรณ์ควรมีเครื่องวัดค่าความเข้มข้นของสนามแม่เหล็ก 3 แกน (เช่น เข็มทิศ) หากอุปกรณ์มีแม่เหล็ก 3 แกน อุปกรณ์จะมีลักษณะดังนี้

  • ต้องส่งเหตุการณ์ที่ 10 Hz ขึ้นไปได้
  • ต้องเป็นไปตามระบบพิกัดเซ็นเซอร์ของ Android ตามรายละเอียดใน Android API (ดู [แหล่งข้อมูล, 41])
  • ต้องสามารถสุ่มตัวอย่างความแรงของสนามในย่านความถี่ที่เพียงพอที่จะครอบคลุมสนามแม่เหล็กโลก
  • ต้องมีความละเอียด 8 บิตขึ้นไป
  • ค่าเบี่ยงเบนมาตรฐานต้องไม่เกิน 0.5 µT

7.3.3. GPS

การติดตั้งใช้งานอุปกรณ์ควรมีเครื่องรับสัญญาณ GPS หากการติดตั้งใช้งานอุปกรณ์มีเครื่องรับสัญญาณ GPS ก็ควรมีเทคนิค "Assisted GPS" บางรูปแบบเพื่อลดเวลาในการล็อก GPS

7.3.4. เครื่องวัดการหมุน

การติดตั้งใช้งานอุปกรณ์ควรมีไจโรสโคป (เช่น เซ็นเซอร์การเปลี่ยนแปลงเชิงมุม) อุปกรณ์ไม่ควรมีเซ็นเซอร์ไจโรสโคป เว้นแต่จะมีตัวตรวจวัดความเร่ง 3 แกนด้วย หากการติดตั้งใช้งานอุปกรณ์มีไจโรสโคป อุปกรณ์จะทําสิ่งต่อไปนี้

  • ต้องชดเชยอุณหภูมิ
  • ต้องสามารถวัดการเปลี่ยนแปลงการวางแนวได้สูงสุด 5.5*Pi เรเดียน/วินาที (ประมาณ 1,000 องศาต่อวินาที)
  • ควรส่งเหตุการณ์ที่ 200 Hz ขึ้นไปได้ โปรดทราบว่าแม้ว่าความถี่ของ Gyroscope ข้างต้นจะระบุว่า "ควร" สำหรับ Android 4.4 แต่เราวางแผนที่จะเปลี่ยนคำจำกัดความความเข้ากันได้สำหรับเวอร์ชันในอนาคตเป็น "ต้อง" กล่าวคือ มาตรฐานเหล่านี้เป็นมาตรฐานที่ไม่บังคับใน Android แต่จะต้องใช้ในเวอร์ชันในอนาคต เราขอแนะนำให้อุปกรณ์ที่มีอยู่และอุปกรณ์ใหม่ที่ใช้ Android มีคุณสมบัติตรงตามข้อกำหนดเหล่านี้อย่างยิ่งเพื่อให้อัปเกรดเป็นแพลตฟอร์มรุ่นในอนาคตได้
  • ต้องมีความละเอียด 12 บิตขึ้นไป
  • ต้องมีความแปรปรวนไม่เกิน 1e-7 rad^2 / s^2 ต่อ Hz (ความแปรปรวนต่อ Hz หรือ rad^2 / s) อนุญาตให้ความแปรปรวนเปลี่ยนแปลงตามอัตราการสุ่มตัวอย่าง แต่ต้องถูกจำกัดด้วยค่านี้ กล่าวคือ หากคุณวัดความแปรปรวนของ Gyro ที่อัตราตัวอย่าง 1 Hz ค่าดังกล่าวไม่ควรเกิน 1e-7 rad^2/s^2
  • ต้องมีการประทับเวลาที่ใกล้เคียงกับเวลาที่เหตุการณ์ฮาร์ดแวร์เกิดขึ้นมากที่สุด ต้องนำเวลาในการตอบสนองที่คงที่ออก

7.3.5. บารอมิเตอร์

การติดตั้งใช้งานอุปกรณ์อาจรวมถึงบารอมิเตอร์ (เช่น เซ็นเซอร์ความดันอากาศรอบตัว) หากการติดตั้งใช้งานอุปกรณ์มีบารอมิเตอร์ อุปกรณ์จะทําสิ่งต่อไปนี้

  • ต้องส่งเหตุการณ์ที่ 5 Hz ขึ้นไปได้
  • ต้องมีความแม่นยำเพียงพอเพื่อให้สามารถประมาณระดับความสูง
  • ต้องชดเชยอุณหภูมิ

7.3.6. เทอร์โมมิเตอร์

การติดตั้งใช้งานอุปกรณ์อาจรวมถึงเทอร์โมมิเตอร์วัดอุณหภูมิแวดล้อม (เช่น เซ็นเซอร์อุณหภูมิ) หากมี ต้องกำหนดเป็น SENSOR_TYPE_AMBIENT_TEMPERATURE และจะต้องวัดอุณหภูมิแวดล้อม (ห้อง) เป็นองศาเซลเซียส

การติดตั้งใช้งานอุปกรณ์อาจ (แต่ไม่ควร) มีเซ็นเซอร์อุณหภูมิ CPU หากมี ต้องกำหนดเป็น SENSOR_TYPE_TEMPERATURE และต้องวัดอุณหภูมิของ CPU ของอุปกรณ์ และต้องไม่วัดอุณหภูมิอื่นๆ โปรดทราบว่าเซ็นเซอร์ประเภท SENSOR_TYPE_TEMPERATURE เลิกใช้งานแล้วใน Android 4.0

7.3.7. โฟโตมิเตอร์

การติดตั้งใช้งานอุปกรณ์อาจรวมถึงโฟโตมิเตอร์ (เช่น เซ็นเซอร์แสงรอบข้าง)

7.3.8. พร็อกซิมิตีเซ็นเซอร์

การติดตั้งใช้งานอุปกรณ์อาจรวมถึงพร็อกซิมิตีเซ็นเซอร์ หากการติดตั้งใช้งานอุปกรณ์มีพร็อกซิมิตีเซ็นเซอร์ อุปกรณ์จะต้องวัดระยะใกล้ของวัตถุในทิศทางเดียวกับหน้าจอ กล่าวคือ พร็อกซิมิตีเซ็นเซอร์ต้องอยู่ในแนวที่จะตรวจจับวัตถุที่อยู่ใกล้กับหน้าจอ เนื่องจากวัตถุประสงค์หลักของเซ็นเซอร์ประเภทนี้คือการตรวจจับโทรศัพท์ที่ผู้ใช้กำลังใช้อยู่ หากการติดตั้งใช้งานอุปกรณ์มีพร็อกซิมิตีเซ็นเซอร์ที่มีการวางแนวอื่น อุปกรณ์ต้องเข้าถึงผ่าน API นี้ไม่ได้ หากการติดตั้งใช้งานอุปกรณ์มีพร็อกซิมิตีเซ็นเซอร์ อุปกรณ์จะต้องมีความแม่นยำ 1 บิตขึ้นไป

7.4. การเชื่อมต่อข้อมูล

7.4.1. โทรศัพท์

"โทรศัพท์" ตามที่ใช้โดย Android API และเอกสารนี้หมายถึงฮาร์ดแวร์ที่เกี่ยวข้องกับการโทรด้วยเสียงและการส่งข้อความ SMS ผ่านเครือข่าย GSM หรือ CDMA โดยเฉพาะ แม้ว่าการโทรด้วยเสียงเหล่านี้จะเปลี่ยนแพ็กเก็ตหรือไม่ก็ตาม แต่ Android จะถือว่าการโทรเหล่านี้ไม่เกี่ยวข้องกับการเชื่อมต่อข้อมูลใดๆ ที่อาจใช้เครือข่ายเดียวกัน กล่าวคือ ฟังก์ชันการทำงานและ API ของ "โทรศัพท์" ของ Android หมายถึงการโทรด้วยเสียงและ SMS โดยเฉพาะ เช่น การติดตั้งใช้งานอุปกรณ์ที่โทรออกหรือส่ง/รับข้อความ SMS ไม่ได้ต้องไม่รายงานฟีเจอร์ "android.hardware.telephony" หรือฟีเจอร์ย่อยใดๆ ก็ตาม ไม่ว่าจะใช้เครือข่ายมือถือเพื่อการเชื่อมต่อข้อมูลหรือไม่ก็ตาม

Android อาจใช้ในอุปกรณ์ที่ไม่มีฮาร์ดแวร์โทรศัพท์ กล่าวคือ Android ใช้ได้กับอุปกรณ์ที่ไม่ใช่โทรศัพท์ อย่างไรก็ตาม หากการติดตั้งใช้งานอุปกรณ์มีโทรศัพท์ GSM หรือ CDMA อุปกรณ์นั้นจะต้องรองรับ API ของเทคโนโลยีนั้นอย่างเต็มรูปแบบ การติดตั้งใช้งานอุปกรณ์ที่ไม่มีฮาร์ดแวร์โทรศัพท์ต้องติดตั้งใช้งาน API แบบเต็มแบบ No-Ops

7.4.2. IEEE 802.11 (Wi-Fi)

การติดตั้งใช้งานอุปกรณ์ Android ควรรองรับ 802.11 อย่างน้อย 1 รูปแบบ (b/g/a/n ฯลฯ) หากการติดตั้งใช้งานอุปกรณ์รองรับ 802.11 อุปกรณ์นั้นต้องใช้ Android API ที่เกี่ยวข้อง

การติดตั้งใช้งานอุปกรณ์ต้องใช้ Multicast API ตามที่อธิบายไว้ในเอกสารประกอบ SDK [แหล่งข้อมูล, 62] การติดตั้งใช้งานอุปกรณ์ที่รองรับ Wi-Fi จะต้องรองรับมัลติแคสต์ DNS (mDNS) การติดตั้งใช้งานอุปกรณ์ต้องไม่กรองแพ็กเก็ต mDNS (224.0.0.251) ไม่ว่าเมื่อใดก็ตามที่ดำเนินการ รวมถึงเมื่อหน้าจอไม่ได้อยู่ในสถานะทำงาน

7.4.2.1. Wi-Fi Direct

การติดตั้งใช้งานอุปกรณ์ควรรองรับ Wi-Fi Direct (Wi-Fi แบบผู้ใช้ต่อผู้ใช้) หากการติดตั้งใช้งานอุปกรณ์รองรับ Wi-Fi Direct อุปกรณ์นั้นต้องใช้ Android API ที่เกี่ยวข้องตามที่อธิบายไว้ในเอกสารประกอบ SDK [แหล่งข้อมูล, 68] หากการติดตั้งใช้งานอุปกรณ์รองรับ Wi-Fi Direct อุปกรณ์จะมีลักษณะดังนี้

  • ต้องรองรับการใช้งาน Wi-Fi ปกติ
  • ควรรองรับการใช้งาน Wi-Fi และ Wi-Fi Direct พร้อมกัน

7.4.2.2. การตั้งค่าลิงก์โดยตรงที่ผ่านอุโมงค์ Wi-Fi

การติดตั้งใช้งานอุปกรณ์ควรรองรับการตั้งค่าลิงก์โดยตรงแบบ Tunneled Wi-Fi (TDLS) ตามที่อธิบายไว้ในเอกสารประกอบ Android SDK [แหล่งข้อมูล, 85] หากการติดตั้งใช้งานอุปกรณ์รองรับ TDLS และ WiFiManager API เปิดใช้ TDLS ไว้ อุปกรณ์จะทําสิ่งต่อไปนี้

  • ควรใช้ TDLS เฉพาะเมื่อเป็นไปได้และมีประโยชน์เท่านั้น
  • ควรใช้การเรียนรู้เชิงสืบสวนบ้างและอย่าใช้ TDLS เมื่อประสิทธิภาพอาจแย่กว่าการผ่านจุดเข้าใช้งาน Wi-Fi

7.4.3. บลูทูธ

การติดตั้งใช้งานอุปกรณ์ควรมีตัวรับส่งสัญญาณบลูทูธ การใช้งานอุปกรณ์ที่มีตัวรับส่งสัญญาณบลูทูธต้องเปิดใช้ Bluetooth API ที่ใช้ RFCOMM ตามที่อธิบายไว้ในเอกสารประกอบ SDK และประกาศฟีเจอร์ฮาร์ดแวร์ android.hardware.bluetooth [แหล่งข้อมูล, 42] การใช้งานอุปกรณ์ควรใช้โปรไฟล์บลูทูธที่เกี่ยวข้อง เช่น A2DP, AVRCP, OBEX ฯลฯ ตามความเหมาะสมของอุปกรณ์

การติดตั้งใช้งานอุปกรณ์ที่รองรับ Bluetooth GATT (โปรไฟล์แอตทริบิวต์ทั่วไป) เพื่อเปิดใช้การสื่อสารกับอุปกรณ์ Bluetooth Smart หรือ Smart Ready จะต้องเปิดใช้ Bluetooth API ที่อิงตาม GATT ตามที่อธิบายไว้ในเอกสารประกอบ SDK และประกาศฟีเจอร์ฮาร์ดแวร์ ดังนี้ android.hardware.bluetooth_le [แหล่งข้อมูล, 42]

7.4.4. Near Field Communication

การติดตั้งใช้งานอุปกรณ์ควรมีตัวรับส่งสัญญาณและฮาร์ดแวร์ที่เกี่ยวข้องสำหรับ Near Field Communication (NFC) หากการติดตั้งใช้งานอุปกรณ์มีฮาร์ดแวร์ NFC อุปกรณ์จะมีลักษณะดังนี้

  • ต้องรายงานฟีเจอร์ android.hardware.nfc จากandroid.content.pm.PackageManager.hasSystemFeature() [แหล่งข้อมูล, 37]
  • ต้องสามารถอ่านและเขียนข้อความ NDEF ผ่านมาตรฐาน NFC ต่อไปนี้
    • ต้องทําหน้าที่เป็นเครื่องอ่าน/เครื่องเขียน NFC Forum ได้ (ตามที่ระบุไว้ในข้อกําหนดทางเทคนิคของ NFC Forum NFCForum-TS-DigitalProtocol-1.0) ผ่านมาตรฐาน NFC ต่อไปนี้
      • NfcA (ISO14443-3A)
      • NfcB (ISO14443-3B)
      • NfcF (JIS 6319-4)
      • IsoDep (ISO 14443-4)
      • แท็ก NFC Forum ประเภท 1, 2, 3, 4 (กำหนดโดย NFC Forum)
  • ควรอ่านและเขียนข้อความ NDEF ผ่านมาตรฐาน NFC ต่อไปนี้ได้ โปรดทราบว่าแม้ว่ามาตรฐาน NFC ด้านล่างจะระบุเป็น "ควร" แต่เราวางแผนที่จะเปลี่ยนคำจำกัดความของความเข้ากันได้สำหรับเวอร์ชันในอนาคตเป็น "ต้อง" กล่าวคือ มาตรฐานเหล่านี้เป็นมาตรฐานที่ไม่บังคับในเวอร์ชันนี้ แต่จะต้องใช้ในเวอร์ชันในอนาคต เราขอแนะนำให้อุปกรณ์ที่มีอยู่และอุปกรณ์ใหม่ที่ใช้ Android เวอร์ชันนี้มีคุณสมบัติตรงตามข้อกำหนดเหล่านี้ตั้งแต่ตอนนี้เพื่อให้อัปเกรดเป็นแพลตฟอร์มเวอร์ชันใหม่ในอนาคตได้
    • NfcV (ISO 15693)
  • ต้องสามารถส่งและรับข้อมูลผ่านมาตรฐานและโปรโตคอลแบบ peer-to-peer ต่อไปนี้
    • ISO 18092
    • LLCP 1.0 (กำหนดโดย NFC Forum)
    • SDP 1.0 (กำหนดโดย NFC Forum)
    • โปรโตคอล Push ของ NDEF [แหล่งข้อมูล, 43]
    • SNEP 1.0 (กำหนดโดย NFC Forum)
  • ต้องรองรับ Android Beam [แหล่งข้อมูล, 65]:
    • ต้องใช้เซิร์ฟเวอร์เริ่มต้น SNEP ข้อความ NDEF ที่ถูกต้องซึ่งเซิร์ฟเวอร์ SNEP เริ่มต้นได้รับต้องส่งไปยังแอปพลิเคชันโดยใช้ Intent android.nfc.ACTION_NDEF_DISCOVERED การปิดใช้ Android Beam ในการตั้งค่าต้องไม่ปิดใช้การส่งข้อความ NDEF ขาเข้า
    • การติดตั้งใช้งานอุปกรณ์ต้องเป็นไปตาม Intent android.settings.NFCSHARING_SETTINGS เพื่อแสดงการตั้งค่าการแชร์ NFC [แหล่งข้อมูล, 67]
    • ต้องติดตั้งใช้งานเซิร์ฟเวอร์ NPP ข้อความที่ได้รับจากเซิร์ฟเวอร์ NPP ต้องได้รับการประมวลผลในลักษณะเดียวกับเซิร์ฟเวอร์เริ่มต้น SNEP
    • ต้องติดตั้งใช้งานไคลเอ็นต์ SNEP และพยายามส่ง P2P NDEF ขาออกไปยังเซิร์ฟเวอร์ SNEP เริ่มต้นเมื่อเปิดใช้ Android Beam หากไม่พบเซิร์ฟเวอร์ SNEP เริ่มต้น ลูกค้าต้องพยายามส่งไปยังเซิร์ฟเวอร์ NPP
    • ต้องอนุญาตให้กิจกรรมที่ทำงานอยู่เบื้องหน้าตั้งค่าข้อความ NDEF ของ P2P ขาออกโดยใช้ android.nfc.NfcAdapter.setNdefPushMessage และ android.nfc.NfcAdapter.setNdefPushMessageCallback และ android.nfc.NfcAdapter.enableForegroundNdefPush
    • ควรใช้ท่าทางสัมผัสหรือการยืนยันบนหน้าจอ เช่น "แตะเพื่อส่งข้อมูลแบบไร้สัมผัส" ก่อนส่งข้อความ NDEF แบบ P2P ขาออก
    • ควรเปิดใช้ Android Beam โดยค่าเริ่มต้น
    • ต้องรองรับการส่งต่อการเชื่อมต่อ NFC ไปยังบลูทูธเมื่ออุปกรณ์รองรับโปรไฟล์การพุชออบเจ็กต์บลูทูธ การติดตั้งใช้งานอุปกรณ์ต้องรองรับการส่งต่อการเชื่อมต่อไปยังบลูทูธเมื่อใช้ android.nfc.NfcAdapter.setBeamPushUris โดยการใช้ข้อกำหนด "การส่งต่อการเชื่อมต่อเวอร์ชัน 1.2" [แหล่งข้อมูล, 60] และ "การจับคู่บลูทูธแบบง่ายที่ปลอดภัยโดยใช้ NFC เวอร์ชัน 1.0" [แหล่งข้อมูล, 61] จาก NFC Forum การใช้งานดังกล่าวต้องใช้บริการ LLCP สำหรับการส่งต่อที่มีชื่อบริการ "urn:nfc:sn:handover" เพื่อแลกเปลี่ยนคําขอส่งต่อ/ระเบียนการเลือกผ่าน NFC และต้องใช้โปรไฟล์การพุชออบเจ็กต์บลูทูธสําหรับการโอนข้อมูลบลูทูธจริง การติดตั้งใช้งานควรยังคงยอมรับคําขอ GET ของ SNEP เพื่อแลกเปลี่ยนคําขอส่งต่อ/บันทึกที่เลือกผ่าน NFC เพื่อเหตุผลเดิม (เพื่อให้เข้ากันได้กับอุปกรณ์ Android 4.1 ต่อไป) อย่างไรก็ตาม การติดตั้งใช้งานไม่ควรส่งคําขอ SNEP GET เพื่อดําเนินการเปลี่ยนผ่านการเชื่อมต่อ
  • ต้องสำรวจเทคโนโลยีที่รองรับทั้งหมดขณะอยู่ในโหมดการค้นพบ NFC
  • ควรอยู่ในโหมดการค้นหา NFC ขณะที่อุปกรณ์ทำงานอยู่โดยมีหน้าจอที่ใช้งานอยู่ และหน้าจอล็อกที่ปลดล็อก

(โปรดทราบว่าลิงก์ที่เผยแพร่ต่อสาธารณะไม่มีให้บริการสำหรับข้อกำหนดของ JIS, ISO และ NFC Forum ที่ระบุไว้ข้างต้น)

Android 4.4 รองรับโหมดการจําลองบัตรของโฮสต์ (HCE) ของ NFC หากการติดตั้งใช้งานอุปกรณ์มีตัวควบคุม NFC ที่รองรับ HCE และการกำหนดเส้นทางแอปพลิเคชัน (AID) อุปกรณ์จะมีลักษณะดังนี้

  • ต้องรายงานค่าคงที่ของฟีเจอร์ android.hardware.nfc.hce
  • ต้องรองรับ NFC HCE API ตามที่ระบุไว้ใน Android SDK [แหล่งข้อมูล, 90]

นอกจากนี้ การติดตั้งใช้งานอุปกรณ์อาจรวมถึงการรองรับเครื่องอ่าน/เครื่องเขียนสำหรับเทคโนโลยี MIFARE ต่อไปนี้

โปรดทราบว่า Android มี API สำหรับ MIFARE ประเภทเหล่านี้ หากการติดตั้งใช้งานอุปกรณ์รองรับ MIFARE ในบทบาทเครื่องอ่าน/เครื่องเขียน อุปกรณ์จะทําสิ่งต่อไปนี้

  • ต้องใช้ Android API ที่เกี่ยวข้องตามที่ระบุไว้ในเอกสารประกอบของ Android SDK
  • ต้องรายงานฟีเจอร์ com.nxp.mifare จากเมธอด android.content.pm.PackageManager.hasSystemFeature() [ทรัพยากร, 37] โปรดทราบว่านี่ไม่ใช่ฟีเจอร์มาตรฐานของ Android และจะไม่ปรากฏเป็นค่าคงที่ในคลาส PackageManager
  • ต้องไม่ใช้ Android API ที่เกี่ยวข้องหรือรายงานฟีเจอร์ com.nxp.mifare เว้นแต่จะใช้การรองรับ NFC ทั่วไปตามที่อธิบายไว้ในส่วนนี้ด้วย

หากการติดตั้งใช้งานอุปกรณ์ไม่มีฮาร์ดแวร์ NFC จะต้องไม่ประกาศฟีเจอร์ android.hardware.nfc จากเมธอด android.content.pm.PackageManager.hasSystemFeature() [แหล่งข้อมูล, 37] และต้องติดตั้งใช้งาน NFC API ของ Android แบบไม่ดำเนินการ

เนื่องจากคลาส android.nfc.NdefMessage และ android.nfc.NdefRecord แสดงรูปแบบการนำเสนอข้อมูลที่แยกจากโปรโตคอล การติดตั้งใช้งานอุปกรณ์จึงต้องใช้ API เหล่านี้แม้ว่าจะไม่รองรับ NFC หรือประกาศฟีเจอร์ android.hardware.nfc ก็ตาม

7.4.5. ความสามารถขั้นต่ำของเครือข่าย

การติดตั้งใช้งานอุปกรณ์ต้องรองรับรูปแบบเครือข่ายข้อมูลอย่างน้อย 1 รูปแบบ กล่าวโดยละเอียดคือ การติดตั้งใช้งานอุปกรณ์ต้องรองรับมาตรฐานข้อมูลอย่างน้อย 1 รายการที่รับส่งข้อมูลได้ 200 Kbit/วินาทีขึ้นไป ตัวอย่างเทคโนโลยีที่เป็นไปตามข้อกำหนดนี้ ได้แก่ EDGE, HSPA, EV-DO, 802.11g, Ethernet ฯลฯ

การติดตั้งใช้งานอุปกรณ์ที่ใช้มาตรฐานเครือข่ายทางกายภาพ (เช่น อีเทอร์เน็ต) เป็นการเชื่อมต่อข้อมูลหลักควรรองรับมาตรฐานข้อมูลไร้สายทั่วไปอย่างน้อย 1 รายการ เช่น 802.11 (Wi-Fi)

อุปกรณ์อาจใช้การเชื่อมต่อข้อมูลมากกว่า 1 รูปแบบ

7.4.6. การตั้งค่าการซิงค์

การติดตั้งใช้งานอุปกรณ์ต้องเปิดการตั้งค่าการซิงค์อัตโนมัติหลักไว้โดยค่าเริ่มต้นเพื่อให้เมธอด getMasterSyncAutomatically() แสดงผลเป็น "จริง" [แหล่งข้อมูล, 88]

7.5 กล้อง

การติดตั้งใช้งานอุปกรณ์ควรมีกล้องหลัง และอาจรวมถึงกล้องหน้า กล้องหลังคือกล้องที่อยู่ด้านข้างของอุปกรณ์ซึ่งอยู่ตรงข้ามกับจอแสดงผล กล่าวคือ กล้องจะจับภาพฉากที่อยู่อีกด้านหนึ่งของอุปกรณ์ เช่น กล้องแบบดั้งเดิม กล้องหน้าคือกล้องที่อยู่ที่ด้านเดียวกับจอแสดงผลของอุปกรณ์ กล่าวคือกล้องที่มักใช้ถ่ายภาพผู้ใช้ เช่น สำหรับการประชุมทางวิดีโอและแอปพลิเคชันที่เกี่ยวข้อง

7.5.1. กล้องหลัง

การติดตั้งใช้งานอุปกรณ์ควรมีกล้องหลัง หากการติดตั้งใช้งานอุปกรณ์มีกล้องหลัง อุปกรณ์จะมีลักษณะดังนี้

  • ต้องมีความละเอียดอย่างน้อย 2 ล้านพิกเซล
  • ควรมีการใช้โฟกัสอัตโนมัติของฮาร์ดแวร์หรือซอฟต์แวร์ในไดรเวอร์กล้อง (ทำงานร่วมกับซอฟต์แวร์แอปพลิเคชันได้อย่างราบรื่น)
  • อาจใช้ฮาร์ดแวร์แบบโฟกัสคงที่หรือ EDOF (ระยะชัดลึกแบบขยาย)
  • อาจใช้แฟลช หากกล้องมีแฟลช หลอดไฟแฟลชต้องไม่สว่างขึ้นขณะที่ลงทะเบียนอินสแตนซ์ android.hardware.Camera.PreviewCallback บนพื้นผิวแสดงตัวอย่างของกล้อง เว้นแต่แอปพลิเคชันจะเปิดใช้แฟลชอย่างชัดเจนโดยเปิดใช้แอตทริบิวต์ FLASH_MODE_AUTO หรือ FLASH_MODE_ON ของออบเจ็กต์ Camera.Parameters โปรดทราบว่าข้อจำกัดนี้ไม่มีผลกับแอปพลิเคชันกล้องของระบบในตัวของอุปกรณ์ แต่จะมีผลกับแอปพลิเคชันของบุคคลที่สามที่ใช้ Camera.PreviewCallback เท่านั้น

7.5.2. กล้องหน้า

การติดตั้งใช้งานอุปกรณ์อาจรวมถึงกล้องหน้า หากการใช้งานอุปกรณ์มีกล้องหน้า อุปกรณ์จะมีลักษณะดังนี้

  • ต้องมีความละเอียดอย่างน้อย VGA (นั่นคือ 640x480 พิกเซล)
  • ต้องไม่ใช้กล้องหน้าเป็นค่าเริ่มต้นสำหรับ Camera API กล่าวคือ API ของกล้องใน Android รองรับกล้องหน้าโดยเฉพาะ และการใช้งานอุปกรณ์ต้องไม่กำหนดค่า API ให้ถือว่ากล้องหน้าเป็นกล้องหลังเริ่มต้น แม้ว่าจะเป็นกล้องเดียวในอุปกรณ์ก็ตาม
  • อาจรวมฟีเจอร์ (เช่น โฟกัสอัตโนมัติ แฟลช ฯลฯ) ที่พร้อมใช้งานสำหรับกล้องหลังตามที่อธิบายไว้ในส่วนที่ 7.5.1
  • ต้องสะท้อน (มิเรอร์) สตรีมที่แสดงโดยแอปใน CameraPreview ในแนวนอน ดังนี้
    • หากผู้ใช้สามารถหมุนการใช้งานอุปกรณ์ได้ (เช่น การหมุนโดยอัตโนมัติผ่านเครื่องวัดความเร่งหรือการหมุนด้วยตนเองผ่านอินพุตของผู้ใช้) ตัวอย่างภาพจากกล้องต้องแสดงแบบสะท้อนในแนวนอนตามการวางแนวปัจจุบันของอุปกรณ์
    • หากแอปพลิเคชันปัจจุบันได้ส่งคำขออย่างชัดเจนให้หมุนการแสดงผลของกล้องผ่านการเรียกใช้เมธอด android.hardware.Camera.setDisplayOrientation() [Resources, 50] แสดงว่าภาพตัวอย่างของกล้องต้องแสดงแบบสะท้อนในแนวนอนตามการวางแนวที่แอปพลิเคชันระบุ
    • ไม่เช่นนั้น ตัวอย่างเพลงต้องมิเรอร์ตามแกนแนวนอนเริ่มต้นของอุปกรณ์
  • ต้องมิเรอร์รูปภาพที่แสดงโดยฟีเจอร์ดูภาพหลังโพสต์ในลักษณะเดียวกับสตรีมรูปภาพตัวอย่างของกล้อง (หากการติดตั้งใช้งานอุปกรณ์ไม่รองรับการดูโพสต์ ก็ไม่จําเป็นต้องใช้ข้อกําหนดนี้)
  • ต้องไม่มิเรอร์สตรีมวิดีโอหรือภาพนิ่งที่บันทึกไว้ซึ่งแสดงผลสุดท้ายซึ่งส่งกลับไปยังการเรียกกลับของแอปพลิเคชันหรือส่งไปยังพื้นที่เก็บข้อมูลสื่อ

7.5.3. ลักษณะการทํางานของ Camera API

การติดตั้งใช้งานอุปกรณ์ต้องใช้ลักษณะการทํางานต่อไปนี้สําหรับ API ที่เกี่ยวข้องกับกล้อง ทั้งสําหรับกล้องหน้าและกล้องหลัง

  1. หากแอปพลิเคชันไม่เคยเรียกใช้ android.hardware.Camera.Parameters.setPreviewFormat(int) อุปกรณ์ต้องใช้ android.hardware.PixelFormat.YCbCr_420_SP สำหรับข้อมูลพรีวิวที่ส่งไปยังการเรียกกลับของแอปพลิเคชัน
  2. หากแอปพลิเคชันลงทะเบียนอินสแตนซ์ android.hardware.Camera.PreviewCallback และระบบเรียกใช้เมธอด onPreviewFrame() เมื่อรูปแบบการแสดงตัวอย่างเป็น YCbCr_420_SP ข้อมูลใน byte[] ที่ส่งไปยัง onPreviewFrame() จะต้องอยู่ในรูปแบบการเข้ารหัส NV21 กล่าวคือ NV21 ต้องเป็นค่าเริ่มต้น
  3. การติดตั้งใช้งานอุปกรณ์ต้องรองรับรูปแบบ YV12 (ตามที่ระบุโดยค่าคงที่ android.graphics.ImageFormat.YV12) สำหรับการแสดงตัวอย่างภาพจากกล้องทั้งกล้องหน้าและกล้องหลัง (โปรแกรมเปลี่ยนไฟล์วิดีโอและกล้องฮาร์ดแวร์อาจใช้รูปแบบพิกเซลเดิมใดก็ได้ แต่การติดตั้งใช้งานอุปกรณ์ต้องรองรับการเปลี่ยนรูปแบบเป็น YV12)

การติดตั้งใช้งานอุปกรณ์ต้องใช้ Camera API แบบสมบูรณ์ที่รวมอยู่ในเอกสารประกอบ Android SDK [ทรัพยากร, 51] ไม่ว่าอุปกรณ์จะมีระบบโฟกัสอัตโนมัติแบบฮาร์ดแวร์หรือความสามารถอื่นๆ หรือไม่ก็ตาม ตัวอย่างเช่น กล้องที่ไม่มีโฟกัสอัตโนมัติจะต้องยังคงเรียกใช้อินสแตนซ์ android.hardware.Camera.AutoFocusCallback ที่ลงทะเบียนไว้ (แม้ว่าการดำเนินการนี้จะไม่เกี่ยวข้องกับกล้องที่ไม่มีโฟกัสอัตโนมัติก็ตาม) โปรดทราบว่าการดำเนินการนี้มีผลกับกล้องหน้า เช่น แม้ว่ากล้องหน้าส่วนใหญ่จะไม่รองรับโฟกัสอัตโนมัติ แต่การเรียกกลับ API ยังคงต้อง "จำลอง" ตามที่อธิบายไว้

การติดตั้งใช้งานอุปกรณ์ต้องรู้จักและปฏิบัติตามชื่อพารามิเตอร์แต่ละรายการที่กําหนดเป็นค่าคงที่ในคลาส android.hardware.Camera.Parameters หากฮาร์ดแวร์พื้นฐานรองรับฟีเจอร์ดังกล่าว หากฮาร์ดแวร์ของอุปกรณ์ไม่รองรับฟีเจอร์หนึ่งๆ API จะต้องทํางานตามที่ระบุไว้ในเอกสาร ในทางกลับกัน การใช้งานอุปกรณ์ต้องไม่ยอมรับหรือรู้จักค่าคงที่สตริงที่ส่งไปยังเมธอด android.hardware.Camera.setParameters() นอกเหนือจากค่าคงที่ที่ระบุไว้ในandroid.hardware.Camera.Parameters กล่าวคือ การติดตั้งใช้งานอุปกรณ์ต้องรองรับพารามิเตอร์กล้องมาตรฐานทั้งหมดหากฮาร์ดแวร์อนุญาต และจะต้องไม่รองรับประเภทพารามิเตอร์กล้องที่กำหนดเอง ตัวอย่างเช่น การติดตั้งใช้งานอุปกรณ์ที่รองรับการจับภาพโดยใช้เทคนิคการถ่ายภาพแบบ High Dynamic Range (HDR) จะต้องรองรับพารามิเตอร์ของกล้อง Camera.SCENE_MODE_HDR [แหล่งข้อมูล, 78])

การติดตั้งใช้งานอุปกรณ์ต้องออกอากาศ Camera.ACTION_NEW_PICTURE intent ทุกครั้งที่กล้องถ่ายภาพใหม่และเพิ่มรายการรูปภาพลงในที่เก็บสื่อ

การติดตั้งใช้งานอุปกรณ์ต้องออกอากาศCamera.ACTION_NEW_VIDEO Intent ทุกครั้งที่กล้องบันทึกวิดีโอใหม่และเพิ่มรายการรูปภาพลงในที่เก็บสื่อ

7.5.4. การวางแนวของกล้อง

กล้องหน้าและกล้องหลัง (หากมี) จะต้องวางแนวให้มิติข้อมูลแนวยาวของกล้องสอดคล้องกับมิติข้อมูลแนวยาวของหน้าจอ กล่าวคือ เมื่อถืออุปกรณ์ในแนวนอน กล้องต้องจับภาพในแนวนอน การดำเนินการนี้มีผลไม่ว่าอุปกรณ์จะวางในแนวใด นั่นคือ มีผลกับอุปกรณ์ที่แสดงแนวนอนเป็นหลักและอุปกรณ์ที่แสดงแนวตั้งเป็นหลัก

7.6. หน่วยความจำและพื้นที่เก็บข้อมูล

7.6.1. หน่วยความจำและพื้นที่เก็บข้อมูลขั้นต่ำ

การติดตั้งใช้งานอุปกรณ์ต้องมีหน่วยความจำอย่างน้อย 340 MB สำหรับเคอร์เนลและพื้นที่ผู้ใช้ 340 MB นี้ต้องเพิ่มขึ้นจากหน่วยความจำที่ใช้สำหรับคอมโพเนนต์ฮาร์ดแวร์ เช่น วิทยุ วิดีโอ และอื่นๆ ที่ไม่ได้อยู่ภายใต้การควบคุมของเคิร์กเนล

การติดตั้งใช้งานอุปกรณ์ที่มีหน่วยความจำน้อยกว่า 512 MB สำหรับเคอร์เนลและพื้นที่ผู้ใช้ต้องแสดงผลค่า "true" สำหรับ ActivityManager.isLowRamDevice()

การติดตั้งใช้งานอุปกรณ์ต้องมีพื้นที่เก็บข้อมูลแบบถาวรอย่างน้อย 1 GB สำหรับข้อมูลส่วนตัวของแอปพลิเคชัน กล่าวคือ พาร์ติชัน /data ต้องมีขนาดใหญ่อย่างน้อย 1 GB เราขอแนะนำให้อย่างยิ่งให้อุปกรณ์ที่ใช้ Android มีพื้นที่เก็บข้อมูลแบบถาวรอย่างน้อย 2 GB สำหรับข้อมูลส่วนตัวของแอปพลิเคชันเพื่อให้อัปเกรดเป็นแพลตฟอร์มรุ่นในอนาคตได้

Android API มีเครื่องมือจัดการการดาวน์โหลดที่แอปพลิเคชันอาจใช้เพื่อดาวน์โหลดไฟล์ข้อมูล [แหล่งข้อมูล, 56] การติดตั้งใช้งาน Download Manager ของอุปกรณ์ต้องสามารถดาวน์โหลดไฟล์แต่ละไฟล์ที่มีขนาดอย่างน้อย 100MB ไปยังตำแหน่ง "แคช" เริ่มต้น

7.6.2. พื้นที่เก็บข้อมูลภายนอกที่ใช้ร่วมกัน

การติดตั้งใช้งานอุปกรณ์ต้องมีพื้นที่เก็บข้อมูลที่ใช้ร่วมกันสำหรับแอปพลิเคชัน พื้นที่เก็บข้อมูลที่ใช้ร่วมกันที่ระบุต้องมีขนาดอย่างน้อย 1 GB

การติดตั้งใช้งานอุปกรณ์ต้องได้รับการกำหนดค่าด้วยพื้นที่เก็บข้อมูลที่แชร์ซึ่งติดตั้งโดยค่าเริ่มต้น "พร้อมใช้งานทันที" หากไม่ได้ต่อเชื่อมพื้นที่เก็บข้อมูลที่ใช้ร่วมกันในเส้นทาง /sdcard ของ Linux อุปกรณ์ต้องมีลิงก์สัญลักษณ์ Linux จาก /sdcard ไปยังจุดต่อเชื่อมจริง

การติดตั้งใช้งานอุปกรณ์ต้องบังคับใช้สิทธิ์ android.permission.WRITE_EXTERNAL_STORAGE ในที่จัดเก็บข้อมูลที่ใช้ร่วมกันนี้ตามที่ระบุไว้ มิเช่นนั้น แอปพลิเคชันใดก็ตามที่ได้รับสิทธิ์ดังกล่าวจะต้องเขียนลงในพื้นที่เก็บข้อมูลที่ใช้ร่วมกันได้

การติดตั้งใช้งานอุปกรณ์อาจมีฮาร์ดแวร์สำหรับพื้นที่เก็บข้อมูลแบบถอดออกได้ซึ่งผู้ใช้เข้าถึงได้ เช่น การ์ด Secure Digital หรือการติดตั้งใช้งานอุปกรณ์อาจจัดสรรพื้นที่เก็บข้อมูลภายใน (แบบถอดไม่ได้) เป็นพื้นที่เก็บข้อมูลที่ใช้ร่วมกันสำหรับแอป โปรเจ็กต์โอเพนซอร์ส Android ต้นทางมีการใช้งานที่ใช้พื้นที่เก็บข้อมูลภายในของอุปกรณ์สำหรับ API พื้นที่เก็บข้อมูลภายนอกที่แชร์ การใช้งานอุปกรณ์ควรใช้การกำหนดค่านี้และการใช้งานซอฟต์แวร์

ไม่ว่าระบบจะใช้พื้นที่เก็บข้อมูลร่วมกันในรูปแบบใด การติดตั้งใช้งานอุปกรณ์จะต้องจัดให้มีกลไกในการเข้าถึงเนื้อหาของพื้นที่เก็บข้อมูลร่วมกันจากคอมพิวเตอร์โฮสต์ เช่น อุปกรณ์เก็บข้อมูลขนาดใหญ่ USB (UMS) หรือ Media Transfer Protocol (MTP) การติดตั้งใช้งานอุปกรณ์อาจใช้อุปกรณ์เก็บข้อมูลขนาดใหญ่ USB แต่ควรใช้ Media Transfer Protocol หากการติดตั้งใช้งานอุปกรณ์รองรับ Media Transfer Protocol ให้ทำดังนี้

  • การใช้งานอุปกรณ์ควรเข้ากันได้กับโฮสต์ MTP ของ Android อ้างอิง ซึ่งก็คือ Android File Transfer [แหล่งข้อมูล, 57]
  • การติดตั้งใช้งานอุปกรณ์ควรรายงานคลาสอุปกรณ์ USB ของ 0x00
  • การติดตั้งใช้งานอุปกรณ์ควรรายงานชื่ออินเทอร์เฟซ USB เป็น "MTP"

หากการติดตั้งใช้งานอุปกรณ์ไม่มีพอร์ต USB อุปกรณ์นั้นต้องให้คอมพิวเตอร์โฮสต์เข้าถึงเนื้อหาของพื้นที่เก็บข้อมูลที่ใช้ร่วมกันด้วยวิธีอื่น เช่น ระบบไฟล์เครือข่าย

ต่อไปนี้เป็นตัวอย่างที่พบบ่อย 2 ตัวอย่าง หากการติดตั้งใช้งานอุปกรณ์มีช่องการ์ด SD เพื่อตอบสนองข้อกำหนดของพื้นที่เก็บข้อมูลที่ใช้ร่วมกัน การ์ด SD รูปแบบ FAT ขนาด 1 GB ขึ้นไปต้องมาพร้อมกับอุปกรณ์ที่ขายให้แก่ผู้ใช้ และจะต้องต่อเชื่อมโดยค่าเริ่มต้น หรือหากการติดตั้งใช้งานอุปกรณ์ใช้พื้นที่เก็บข้อมูลแบบคงที่ภายในเพื่อปฏิบัติตามข้อกำหนดนี้ พื้นที่เก็บข้อมูลดังกล่าวต้องมีขนาด 1 GB ขึ้นไปและติดตั้งใน /sdcard (หรือ /sdcard ต้องลิงก์สัญลักษณ์ไปยังตำแหน่งจริงหากติดตั้งไว้ที่อื่น)

การติดตั้งใช้งานอุปกรณ์ที่มีเส้นทางพื้นที่เก็บข้อมูลที่ใช้ร่วมกันหลายเส้นทาง (เช่น ทั้งช่องการ์ด SD และพื้นที่เก็บข้อมูลภายในที่ใช้ร่วมกัน) ต้องไม่อนุญาตให้แอปพลิเคชัน Android เขียนลงในพื้นที่เก็บข้อมูลภายนอกรอง ยกเว้นไดเรกทอรีเฉพาะแพ็กเกจในพื้นที่เก็บข้อมูลภายนอกรอง แต่ควรแสดงเนื้อหาจากทั้ง 2 เส้นทางพื้นที่เก็บข้อมูลอย่างโปร่งใสผ่านบริการสแกนมัลติมีเดียของ Android และ android.provider.MediaStore

7.7. USB

การติดตั้งใช้งานอุปกรณ์ควรมีพอร์ตไคลเอ็นต์ USB และควรมีพอร์ตโฮสต์ USB

หากการติดตั้งใช้งานอุปกรณ์มีพอร์ตไคลเอ็นต์ USB ให้ทำดังนี้

  • พอร์ตต้องเชื่อมต่อกับโฮสต์ USB ที่มีพอร์ต USB-A มาตรฐานได้
  • พอร์ตควรใช้รูปแบบของ micro USB ในด้านอุปกรณ์ เราขอแนะนำให้อุปกรณ์ที่มีอยู่และอุปกรณ์ใหม่ที่ใช้ Android มีคุณสมบัติตรงตามข้อกำหนดเหล่านี้ใน Android เพื่อให้อัปเกรดเป็นแพลตฟอร์มรุ่นในอนาคตได้
  • พอร์ตควรอยู่ตรงกลางของขอบ การติดตั้งใช้งานอุปกรณ์ควรวางพอร์ตไว้ที่ด้านล่างของอุปกรณ์ (ตามการวางแนวตามปกติ) หรือเปิดใช้การหมุนหน้าจอด้วยซอฟต์แวร์สำหรับแอปทั้งหมด (รวมถึงหน้าจอหลัก) เพื่อให้จอแสดงผลวาดภาพได้อย่างถูกต้องเมื่ออุปกรณ์วางแนวโดยให้พอร์ตอยู่ด้านล่าง เราขอแนะนำให้อย่างยิ่งให้อุปกรณ์ที่มีอยู่และอุปกรณ์ใหม่ที่ใช้ Android มีคุณสมบัติตรงตามข้อกำหนดเหล่านี้ใน Android เพื่อให้อัปเกรดเป็นแพลตฟอร์มรุ่นต่อๆ ไปได้
  • หากอุปกรณ์มีพอร์ตอื่นๆ (เช่น พอร์ตชาร์จที่ไม่ใช่ USB) พอร์ตดังกล่าวควรอยู่ด้านเดียวกับพอร์ต micro-USB
  • อุปกรณ์ต้องอนุญาตให้โฮสต์ที่เชื่อมต่อเข้าถึงเนื้อหาของวอลุ่มพื้นที่เก็บข้อมูลที่แชร์โดยใช้ที่จัดเก็บข้อมูลจำนวนมากแบบ USB หรือ Media Transfer Protocol
  • อุปกรณ์ต้องใช้ Android Open Accessory API และข้อกำหนดตามที่ระบุไว้ในเอกสารประกอบของ Android SDK และต้องประกาศรองรับฟีเจอร์ฮาร์ดแวร์ android.hardware.usb.accessory [แหล่งข้อมูล, 52]
  • ต้องใช้คลาสเสียง USB ตามที่ระบุไว้ในเอกสารประกอบ Android SDK [แหล่งข้อมูล, 66]
  • ควรรองรับข้อกำหนดการชาร์จแบตเตอรี่ผ่าน USB [แหล่งข้อมูล, 64] เราขอแนะนำให้อุปกรณ์ที่มีอยู่และอุปกรณ์ใหม่ที่ใช้ Android ปฏิบัติตามข้อกำหนดเหล่านี้เพื่อให้อัปเกรดเป็นแพลตฟอร์มเวอร์ชันในอนาคตได้
  • ค่าของ iSerialNumber ในข้อบ่งชี้อุปกรณ์มาตรฐาน USB ต้องเท่ากับค่าของ android.os.Build.SERIAL

หากการติดตั้งใช้งานอุปกรณ์มีพอร์ตโฮสต์ USB ให้ทำดังนี้

  • อุปกรณ์อาจใช้รูปแบบพอร์ตที่ไม่เป็นไปตามมาตรฐาน แต่หากเป็นเช่นนั้น อุปกรณ์ต้องมาพร้อมกับสายหรือสายแปลงพอร์ตเป็น USB-A มาตรฐาน
  • ต้องใช้ Android USB Host API ตามที่ระบุไว้ใน Android SDK และต้องประกาศการรองรับฟีเจอร์ฮาร์ดแวร์ android.hardware.usb.host [แหล่งข้อมูล, 53]

การติดตั้งใช้งานอุปกรณ์ต้องใช้ Android Debug Bridge หากการติดตั้งใช้งานอุปกรณ์ไม่มีพอร์ตไคลเอ็นต์ USB อุปกรณ์นั้นต้องใช้ Android Debug Bridge ผ่านเครือข่าย LAN (เช่น อีเทอร์เน็ตหรือ 802.11)

8. ความเข้ากันได้ด้านประสิทธิภาพ

การติดตั้งใช้งานอุปกรณ์ต้องเป็นไปตามเมตริกประสิทธิภาพหลักของอุปกรณ์ที่เข้ากันได้กับ Android ซึ่งระบุไว้ในตารางด้านล่าง

เมตริก เกณฑ์ประสิทธิภาพ ความคิดเห็น
เวลาเปิดแอปพลิเคชัน แอปพลิเคชันต่อไปนี้ควรเปิดตัวภายในเวลาที่ระบุ
  • เบราว์เซอร์: น้อยกว่า 1300 มิลลิวินาที
  • Contacts: น้อยกว่า 700 มิลลิวินาที
  • การตั้งค่า: น้อยกว่า 700 มิลลิวินาที
ระบบจะวัดเวลาเปิดเป็นเวลาทั้งหมดที่ใช้ในการโหลดกิจกรรมเริ่มต้นสําหรับแอปพลิเคชันให้เสร็จสมบูรณ์ ซึ่งรวมถึงเวลาที่ใช้ในการเริ่มกระบวนการ Linux, โหลดแพ็กเกจ Android ลงใน Dalvik VM และเรียกใช้ onCreate
การสมัครพร้อมกัน เมื่อเปิดแอปพลิเคชันหลายรายการแล้ว การเปิดตัวแอปพลิเคชันที่ทำงานอยู่แล้วอีกครั้งหลังจากเปิดตัวต้องใช้เวลาน้อยกว่าเวลาเปิดตัวครั้งแรก  

9. ความเข้ากันได้ของรูปแบบการรักษาความปลอดภัย

การติดตั้งใช้งานอุปกรณ์ต้องใช้รูปแบบการรักษาความปลอดภัยที่สอดคล้องกันกับรูปแบบการรักษาความปลอดภัยของแพลตฟอร์ม Android ตามที่ระบุไว้ในเอกสารอ้างอิงเกี่ยวกับความปลอดภัยและสิทธิ์ใน API [แหล่งข้อมูล, 54] ในเอกสารประกอบสำหรับนักพัฒนาแอป Android การติดตั้งใช้งานอุปกรณ์ต้องรองรับการติดตั้งแอปพลิเคชันที่ลงนามด้วยตนเองโดยไม่ต้องขอสิทธิ์/ใบรับรองเพิ่มเติมจากบุคคลที่สาม/หน่วยงาน กล่าวโดยละเอียดคือ อุปกรณ์ที่เข้ากันได้ต้องรองรับกลไกการรักษาความปลอดภัยที่อธิบายไว้ในส่วนย่อยต่อไปนี้

9.1. สิทธิ์

การติดตั้งใช้งานอุปกรณ์ต้องรองรับรูปแบบสิทธิ์ของ Android ตามที่ระบุไว้ในเอกสารประกอบสำหรับนักพัฒนาแอป Android [แหล่งข้อมูล, 54] กล่าวโดยละเอียดคือ การติดตั้งใช้งานต้องบังคับใช้สิทธิ์แต่ละรายการตามที่อธิบายไว้ในเอกสารประกอบ SDK โดยต้องไม่ละเว้น เปลี่ยนแปลง หรือละเว้นสิทธิ์ใดๆ การใช้งานอาจเพิ่มสิทธิ์เพิ่มเติมได้ ตราบใดที่สตริงรหัสสิทธิ์ใหม่ไม่ได้อยู่ในเนมสเปซ android.*

9.2. UID และการแยกกระบวนการ

การติดตั้งใช้งานอุปกรณ์ต้องรองรับรูปแบบแซนด์บ็อกซ์แอปพลิเคชันของ Android ซึ่งแอปพลิเคชันแต่ละรายการจะทำงานเป็น UID สไตล์ Unix ที่ไม่ซ้ำกันและในกระบวนการแยกต่างหาก การติดตั้งใช้งานอุปกรณ์ต้องรองรับการเรียกใช้แอปพลิเคชันหลายรายการเป็นรหัสผู้ใช้ Linux เดียวกัน โดยมีเงื่อนไขว่าแอปพลิเคชันได้รับการลงนามและสร้างอย่างถูกต้องตามที่ระบุไว้ในข้อมูลอ้างอิงด้านความปลอดภัยและสิทธิ์ [แหล่งข้อมูล, 54]

9.3. สิทธิ์ในระบบไฟล์

การติดตั้งใช้งานอุปกรณ์ต้องรองรับรูปแบบสิทธิ์การเข้าถึงไฟล์ Android ตามที่ระบุไว้ในข้อมูลอ้างอิงด้านความปลอดภัยและสิทธิ์ [ทรัพยากร, 54]

9.4. สภาพแวดล้อมการดําเนินการอื่น

การติดตั้งใช้งานอุปกรณ์อาจรวมถึงสภาพแวดล้อมรันไทม์ที่เรียกใช้แอปพลิเคชันโดยใช้ซอฟต์แวร์หรือเทคโนโลยีอื่นที่ไม่ใช่เครื่องเสมือน Dalvik หรือโค้ดแบบเนทีฟ อย่างไรก็ตาม สภาพแวดล้อมการเรียกใช้ระบบอื่นดังกล่าวต้องไม่ทำให้รูปแบบการรักษาความปลอดภัยของ Android หรือความปลอดภัยของแอปพลิเคชัน Android ที่ติดตั้งไว้ลดลงตามที่อธิบายไว้ในส่วนนี้

รันไทม์อื่นต้องเป็นแอปพลิเคชัน Android และเป็นไปตามรูปแบบการรักษาความปลอดภัยมาตรฐานของ Android ตามที่อธิบายไว้ในส่วนอื่นๆ ของส่วนที่ 9

รันไทม์อื่นต้องไม่ได้รับสิทธิ์เข้าถึงทรัพยากรที่ได้รับการปกป้องโดยสิทธิ์ที่ไม่ได้ขอในไฟล์ AndroidManifest.xml ของรันไทม์ผ่านกลไก <uses-permission>

รันไทม์อื่นต้องไม่อนุญาตให้แอปพลิเคชันใช้ประโยชน์จากฟีเจอร์ที่ได้รับการปกป้องโดยสิทธิ์ Android ที่จำกัดไว้สำหรับแอปพลิเคชันระบบเท่านั้น

รันไทม์ทางเลือกต้องเป็นไปตามรูปแบบแซนด์บ็อกซ์ของ Android ดังนี้

  • รันไทม์อื่นควรติดตั้งแอปผ่าน PackageManager ลงในแซนด์บ็อกซ์ Android แยกต่างหาก (เช่น รหัสผู้ใช้ Linux ฯลฯ)
  • รันไทม์อื่นอาจให้แซนด์บ็อกซ์ Android เดียวที่แอปพลิเคชันทั้งหมดที่ใช้รันไทม์อื่นใช้ร่วมกัน
  • รันไทม์อื่นและแอปพลิเคชันที่ติดตั้งโดยใช้รันไทม์อื่นต้องไม่นำแซนด์บ็อกซ์ของแอปอื่นๆ ที่ติดตั้งในอุปกรณ์มาใช้ซ้ำ ยกเว้นผ่านกลไกมาตรฐานของ Android สำหรับรหัสผู้ใช้ที่แชร์และใบรับรองการรับรอง
  • รันไทม์อื่นต้องไม่เปิดขึ้นด้วย มอบสิทธิ์ หรือได้รับสิทธิ์เข้าถึงแซนด์บ็อกซ์ที่เกี่ยวข้องกับแอปพลิเคชัน Android อื่นๆ

รันไทม์อื่นต้องไม่เปิดใช้งานด้วย ไม่ได้รับ หรือให้สิทธิ์แก่แอปพลิเคชันอื่นๆ เกี่ยวกับสิทธิ์ของผู้ดูแลระบบ (root) หรือรหัสผู้ใช้อื่นๆ

ไฟล์ .apk ของรันไทม์อื่นอาจรวมอยู่ในอิมเมจระบบของการติดตั้งใช้งานอุปกรณ์ แต่ต้องลงนามด้วยคีย์ที่แตกต่างจากคีย์ที่ใช้ลงนามแอปพลิเคชันอื่นๆ ที่รวมอยู่ในการติดตั้งใช้งานอุปกรณ์

เมื่อติดตั้งแอปพลิเคชัน รันไทม์อื่นต้องได้รับความยินยอมจากผู้ใช้สำหรับสิทธิ์ Android ที่แอปพลิเคชันใช้ กล่าวคือ หากแอปพลิเคชันต้องใช้ทรัพยากรของอุปกรณ์ซึ่งมีสิทธิ์ Android ที่เกี่ยวข้อง (เช่น กล้อง, GPS ฯลฯ) รันไทม์อื่นต้องแจ้งให้ผู้ใช้ทราบว่าแอปพลิเคชันจะเข้าถึงทรัพยากรนั้นได้ หากสภาพแวดล้อมรันไทม์ไม่ได้บันทึกความสามารถของแอปพลิเคชันด้วยวิธีนี้ สภาพแวดล้อมรันไทม์ต้องแสดงสิทธิ์ทั้งหมดที่รันไทม์มีเมื่อติดตั้งแอปพลิเคชันที่ใช้รันไทม์นั้น

9.5 การรองรับผู้ใช้หลายคน

Android รองรับผู้ใช้หลายคนและรองรับการแยกผู้ใช้อย่างเต็มรูปแบบ [แหล่งข้อมูล, 70]

การติดตั้งใช้งานอุปกรณ์ต้องเป็นไปตามข้อกำหนดต่อไปนี้ที่เกี่ยวข้องกับการรองรับผู้ใช้หลายคน [ทรัพยากร, 71]

  • เนื่องจากขณะนี้ยังไม่มีการกำหนดลักษณะการทำงานของ API การโทรในอุปกรณ์ที่มีผู้ใช้หลายคน การติดตั้งใช้งานอุปกรณ์ที่ประกาศ android.hardware.telephony ต้องไม่เปิดใช้การรองรับผู้ใช้หลายคน
  • การติดตั้งใช้งานอุปกรณ์ต้องติดตั้งใช้งานรูปแบบการรักษาความปลอดภัยที่สอดคล้องกับรูปแบบการรักษาความปลอดภัยของแพลตฟอร์ม Android ให้กับผู้ใช้แต่ละราย ตามที่ระบุไว้ในเอกสารอ้างอิงเกี่ยวกับความปลอดภัยและสิทธิ์ใน API [แหล่งข้อมูล, 54]
  • Android รองรับโปรไฟล์ที่ถูกจำกัด ซึ่งเป็นฟีเจอร์ที่ช่วยให้เจ้าของอุปกรณ์จัดการผู้ใช้รายอื่นและความสามารถของผู้ใช้เหล่านั้นในอุปกรณ์ได้ โปรไฟล์ที่จํากัดช่วยให้เจ้าของอุปกรณ์ตั้งค่าสภาพแวดล้อมแยกต่างหากสําหรับผู้ใช้เพิ่มเติมได้อย่างรวดเร็ว พร้อมความสามารถในการจัดการข้อจํากัดที่ละเอียดยิ่งขึ้นในแอปที่ใช้ได้ภายในสภาพแวดล้อมเหล่านั้น การติดตั้งใช้งานอุปกรณ์ที่รองรับผู้ใช้หลายคนต้องรองรับโปรไฟล์ที่จํากัด โปรเจ็กต์โอเพนซอร์ส Android ต้นทางมีการใช้งานที่เป็นไปตามข้อกำหนดนี้

อินสแตนซ์ผู้ใช้แต่ละรายการในอุปกรณ์ Android ต้องมีไดเรกทอรีพื้นที่เก็บข้อมูลภายนอกแยกต่างหากและแยกกัน การติดตั้งใช้งานอุปกรณ์อาจจัดเก็บข้อมูลของผู้ใช้หลายคนในวอลุ่มหรือระบบไฟล์เดียวกัน อย่างไรก็ตาม การติดตั้งใช้งานอุปกรณ์ต้องตรวจสอบว่าแอปพลิเคชันที่ผู้ใช้เป็นเจ้าของและทำงานในนามของผู้ใช้รายหนึ่งๆ ไม่สามารถแสดงรายการ อ่าน หรือเขียนข้อมูลของผู้ใช้รายอื่น โปรดทราบว่าสื่อแบบถอดออกได้ เช่น ช่องการ์ด SD อาจอนุญาตให้ผู้ใช้รายหนึ่งเข้าถึงข้อมูลของผู้ใช้รายอื่นได้โดยใช้ PC โฮสต์ ด้วยเหตุนี้ การติดตั้งใช้งานอุปกรณ์ที่ใช้สื่อแบบถอดออกได้สำหรับ API พื้นที่เก็บข้อมูลภายนอกจึงต้องเข้ารหัสเนื้อหาของการ์ด SD หากเปิดใช้ผู้ใช้หลายคนโดยใช้คีย์ที่จัดเก็บไว้ในสื่อแบบถอดออกไม่ได้เท่านั้นที่ระบบเข้าถึงได้ เนื่องจากพีซีโฮสต์จะอ่านสื่อไม่ได้ การติดตั้งใช้งานอุปกรณ์จะต้องเปลี่ยนไปใช้ MTP หรือระบบที่คล้ายกันเพื่อให้พีซีโฮสต์เข้าถึงข้อมูลของผู้ใช้ปัจจุบันได้ ดังนั้น การติดตั้งใช้งานอุปกรณ์อาจเปิดใช้ผู้ใช้หลายคนได้ แต่ไม่ควรเปิดใช้หากใช้สื่อแบบถอดออกได้ [แหล่งข้อมูล, 72] เป็นพื้นที่เก็บข้อมูลภายนอกหลัก

9.6 คำเตือนเกี่ยวกับ SMS แบบพรีเมียม

Android รองรับการเตือนผู้ใช้เกี่ยวกับข้อความ SMS แบบพรีเมียมขาออก [แหล่งข้อมูล, 73] ข้อความ SMS แบบพรีเมียมคือ SMS ที่ส่งไปยังบริการที่ลงทะเบียนกับผู้ให้บริการซึ่งอาจมีการเรียกเก็บเงินจากผู้ใช้ การติดตั้งใช้งานอุปกรณ์ที่ประกาศรองรับ android.hardware.telephony จะต้องเตือนผู้ใช้ก่อนส่งข้อความ SMS ไปยังหมายเลขที่ระบุด้วยนิพจน์ทั่วไปที่กําหนดไว้ในไฟล์ /data/misc/sms/codes.xml ในอุปกรณ์ โครงการโอเพนซอร์ส Android เวอร์ชันอัปสตรีมมีการใช้งานที่เป็นไปตามข้อกำหนดนี้

9.7 ฟีเจอร์ความปลอดภัยของเคิร์นัล

แซนด์บ็อกซ์ของ Android มีฟีเจอร์ที่ใช้ระบบการควบคุมการเข้าถึงแบบบังคับ (MAC) ของ Security-Enhanced Linux (SELinux) และฟีเจอร์ด้านความปลอดภัยอื่นๆ ในเคอร์เนล Linux ได้ SELinux หรือฟีเจอร์ความปลอดภัยอื่นๆ หากติดตั้งใช้งานด้านล่างเฟรมเวิร์ก Android

  • ต้องคงความเข้ากันได้กับแอปพลิเคชันที่มีอยู่
  • ต้องไม่มีอินเทอร์เฟซผู้ใช้ที่มองเห็นได้ แม้ว่าจะตรวจพบการละเมิดก็ตาม
  • ไม่ควรกำหนดค่าโดยผู้ใช้หรือนักพัฒนาซอฟต์แวร์

หาก API สำหรับการกำหนดค่านโยบายแสดงต่อแอปพลิเคชันที่สามารถส่งผลต่อแอปพลิเคชันอื่นได้ (เช่น Device Administration API) API นั้นต้องไม่อนุญาตให้มีการกำหนดค่าที่ทำให้ใช้งานร่วมกันไม่ได้

อุปกรณ์ต้องใช้ SELinux และเป็นไปตามข้อกำหนดต่อไปนี้ ซึ่งเป็นไปตามการใช้งานอ้างอิงในโปรเจ็กต์โอเพนซอร์ส Android เวอร์ชันอัปสตรีม

  • ต้องรองรับนโยบาย SELinux ที่อนุญาตให้ตั้งค่าโหมด SELinux ตามโดเมน โดยมีเงื่อนไขดังนี้
    • โดเมนที่อยู่ในโหมดบังคับใช้ในการใช้งานโอเพนซอร์ส Android ต้นทาง (เช่น installd, netd และ vold) จะต้องอยู่ในโหมดบังคับใช้
    • โดเมนสําหรับแอปพลิเคชันของบุคคลที่สามควรอยู่ในโหมดอนุญาตเพื่อให้ใช้งานร่วมกันได้ต่อไป
  • ควรโหลดนโยบายจากไฟล์ /sepolicy ในอุปกรณ์
  • ต้องรองรับการอัปเดตไฟล์นโยบาย SELinux แบบไดนามิกโดยไม่ต้องอัปเดตอิมเมจระบบ
  • และต้องบันทึกการละเมิดนโยบายโดยไม่ทำให้แอปพลิเคชันขัดข้องหรือส่งผลต่อลักษณะการทํางานของระบบ

การใช้งานอุปกรณ์ควรใช้นโยบาย SELinux เริ่มต้นที่ระบุไว้ในโปรเจ็กต์โอเพนซอร์ส Android ต้นทาง จนกว่าจะมีการตรวจสอบการเพิ่มนโยบาย SELinux ก่อน การติดตั้งใช้งานอุปกรณ์ต้องเข้ากันได้กับโครงการโอเพนซอร์ส Android เวอร์ชันที่พัฒนาขึ้น

9.8 ความเป็นส่วนตัว

หากอุปกรณ์ใช้ฟังก์ชันการทำงานในระบบที่จับภาพเนื้อหาที่แสดงบนหน้าจอและ/หรือบันทึกสตรีมเสียงที่เล่นในอุปกรณ์ อุปกรณ์ต้องแจ้งให้ผู้ใช้ทราบอย่างต่อเนื่องทุกครั้งที่เปิดใช้ฟังก์ชันการทำงานนี้และกำลังจับภาพ/บันทึกอยู่

9.9. การเข้ารหัสดิสก์ทั้งเครื่อง

หากอุปกรณ์มีหน้าจอล็อก อุปกรณ์จะต้องรองรับการเข้ารหัสทั้งดิสก์

10. การทดสอบความเข้ากันได้ของซอฟต์แวร์

การติดตั้งใช้งานอุปกรณ์ต้องผ่านการทดสอบทั้งหมดที่อธิบายในส่วนนี้

อย่างไรก็ตาม โปรดทราบว่าไม่มีแพ็กเกจทดสอบซอฟต์แวร์ใดที่ครอบคลุมทั้งหมด ด้วยเหตุนี้ เราขอแนะนำให้ผู้ติดตั้งใช้งานอุปกรณ์ทำการเปลี่ยนแปลงน้อยที่สุดเท่าที่จะเป็นไปได้กับการใช้งาน Android อ้างอิงและการใช้งานที่แนะนำจากโปรเจ็กต์โอเพนซอร์ส Android วิธีนี้จะช่วยลดความเป็นไปได้ที่จะเกิดข้อบกพร่องซึ่งทำให้เกิดความเข้ากันไม่ได้ ซึ่งทำให้ต้องทํางานใหม่และอาจต้องอัปเดตอุปกรณ์

10.1. ชุดเครื่องมือทดสอบความเข้ากันได้

การติดตั้งใช้งานอุปกรณ์ต้องผ่านชุดเครื่องมือทดสอบความเข้ากันได้กับอุปกรณ์ Android (CTS) [แหล่งข้อมูล 2] ซึ่งมีอยู่ในโปรเจ็กต์โอเพนซอร์ส Android โดยใช้ซอฟต์แวร์เวอร์ชันสุดท้ายที่พร้อมจำหน่ายในอุปกรณ์ นอกจากนี้ ผู้ติดตั้งใช้งานอุปกรณ์ควรใช้การติดตั้งใช้งานอ้างอิงในซอร์สโค้ดแบบเปิดของ Android มากที่สุดเท่าที่จะเป็นไปได้ และต้องตรวจสอบความเข้ากันได้ในกรณีที่ CTS มีความคลุมเครือ และในกรณีที่มีการติดตั้งใช้งานบางส่วนของซอร์สโค้ดอ้างอิงอีกครั้ง

CTS ออกแบบมาเพื่อใช้งานบนอุปกรณ์จริง เช่นเดียวกับซอฟต์แวร์อื่นๆ DTC อาจมีข้อบกพร่อง CTS จะมีเวอร์ชันแยกต่างหากจากคำจำกัดความความเข้ากันได้นี้ และอาจมีการเผยแพร่ CTS เวอร์ชันแก้ไขหลายเวอร์ชันสำหรับ Android 4.4 การติดตั้งใช้งานอุปกรณ์ต้องผ่าน CTS เวอร์ชันล่าสุดที่มีให้บริการ ณ เวลาที่มีการสร้างซอฟต์แวร์ของอุปกรณ์เสร็จสมบูรณ์

10.2. โปรแกรมตรวจสอบ CTS

การติดตั้งใช้งานอุปกรณ์ต้องดำเนินการกับกรณีที่เกี่ยวข้องทั้งหมดในโปรแกรมตรวจสอบ CTS อย่างถูกต้อง CTS Verifier จะรวมอยู่ในชุดทดสอบความเข้ากันได้ และมีไว้เพื่อให้ผู้ดำเนินการทดสอบฟังก์ชันการทำงานที่ระบบอัตโนมัติทดสอบไม่ได้ เช่น การทำงานของกล้องและเซ็นเซอร์อย่างถูกต้อง

CTS Verifier มีการทดสอบฮาร์ดแวร์หลายประเภท รวมถึงฮาร์ดแวร์บางประเภทที่ไม่บังคับ การติดตั้งใช้งานอุปกรณ์ต้องผ่านการทดสอบทั้งหมดสำหรับฮาร์ดแวร์ที่อุปกรณ์มี เช่น หากอุปกรณ์มีเครื่องวัดความเร่ง อุปกรณ์ต้องเรียกใช้กรณีทดสอบเครื่องวัดความเร่งในโปรแกรมตรวจสอบ CTS อย่างถูกต้อง ระบบอาจข้ามหรือละเว้นกรณีทดสอบสำหรับฟีเจอร์ที่เอกสารคำจำกัดความความเข้ากันได้นี้ระบุว่าไม่บังคับ

อุปกรณ์และบิลด์ทุกรุ่นต้องเรียกใช้ CTS Verifier อย่างถูกต้องตามที่ระบุไว้ข้างต้น อย่างไรก็ตาม เนื่องจากบิลด์จำนวนมากมีความคล้ายคลึงกันมาก ผู้ติดตั้งใช้งานอุปกรณ์จึงไม่จำเป็นต้องเรียกใช้ CTS Verifier อย่างชัดเจนในบิลด์ที่แตกต่างกันเพียงเล็กน้อย กล่าวโดยละเอียดคือ การติดตั้งใช้งานอุปกรณ์ที่แตกต่างจากการติดตั้งใช้งานที่ผ่าน CTS Verifier เฉพาะชุดภาษา การสร้างแบรนด์ ฯลฯ ที่รวมอยู่ อาจไม่ต้องทำการทดสอบ CTS Verifier

10.3. แอปพลิเคชันอ้างอิง

ผู้ติดตั้งใช้งานอุปกรณ์ต้องทดสอบความเข้ากันได้ของการติดตั้งใช้งานโดยใช้แอปพลิเคชันโอเพนซอร์สต่อไปนี้

  • แอปพลิเคชัน "แอปสําหรับ Android" [แหล่งข้อมูล, 55]
  • Replica Island (มีให้บริการใน Google Play Store)

แอปแต่ละรายการข้างต้นต้องเปิดใช้งานและทํางานอย่างถูกต้องในการใช้งาน เพื่อให้การติดตั้งใช้งานถือว่าเข้ากันได้

11. ซอฟต์แวร์ที่อัปเดตได้

การติดตั้งใช้งานอุปกรณ์ต้องมีกลไกในการแทนที่ซอฟต์แวร์ระบบทั้งหมด กลไกนี้ไม่จำเป็นต้องทำการอัปเกรด "แบบเรียลไทม์" กล่าวคือ คุณอาจต้องรีสตาร์ทอุปกรณ์

คุณใช้วิธีการใดก็ได้ ตราบใดที่วิธีการดังกล่าวสามารถแทนที่ซอฟต์แวร์ทั้งหมดที่ติดตั้งไว้ล่วงหน้าในอุปกรณ์ ตัวอย่างเช่น แนวทางต่อไปนี้จะเป็นไปตามข้อกำหนดนี้

  • การดาวน์โหลดผ่านอากาศ (OTA) ที่มีการอัปเดตแบบออฟไลน์ผ่านการรีบูต
  • อัปเดตแบบ "ใช้การต่อฮอตสปอตจากมือถือ" ผ่าน USB จาก PC โฮสต์
  • การอัปเดต "ออฟไลน์" ผ่านการรีบูตและการอัปเดตจากไฟล์ในอุปกรณ์เก็บข้อมูลแบบถอดได้

กลไกการอัปเดตที่ใช้ต้องรองรับการอัปเดตโดยไม่ล้างข้อมูลผู้ใช้ กล่าวคือ กลไกการอัปเดตต้องเก็บรักษาข้อมูลส่วนตัวของแอปพลิเคชันและข้อมูลที่แชร์ของแอปพลิเคชัน โปรดทราบว่าซอฟต์แวร์ Android เวอร์ชัน upstream มีกลไกการอัปเดตที่เป็นไปตามข้อกำหนดนี้

หากพบข้อผิดพลาดในการใช้งานอุปกรณ์หลังจากที่มีการเผยแพร่แล้ว แต่ภายในอายุการใช้งานผลิตภัณฑ์ที่เหมาะสมซึ่งพิจารณาจากการปรึกษากับทีมความเข้ากันได้ของ Android เพื่อดูว่าส่งผลต่อความเข้ากันได้ของแอปพลิเคชันของบุคคลที่สามหรือไม่ ผู้ใช้งานอุปกรณ์ต้องแก้ไขข้อผิดพลาดผ่านการอัปเดตซอฟต์แวร์ที่ใช้ได้ซึ่งเป็นไปตามกลไกที่อธิบายไป

12. บันทึกการเปลี่ยนแปลงของเอกสาร

ตารางต่อไปนี้แสดงสรุปการเปลี่ยนแปลงคำจำกัดความของความเข้ากันได้ในรุ่นนี้

ส่วน สรุปการเปลี่ยนแปลง
3.2.2. พารามิเตอร์การสร้าง แก้ไขคำอธิบายของแบรนด์ อุปกรณ์ และผลิตภัณฑ์ ตอนนี้ต้องระบุ SERIAL
3.2.3.5. การตั้งค่าแอปเริ่มต้น ส่วนใหม่ที่เพิ่มข้อกำหนดให้ปฏิบัติตามการตั้งค่าแอปพลิเคชันเริ่มต้นใหม่
3.3.1 อินเทอร์เฟซแบบไบนารีของแอปพลิเคชัน ชี้แจงค่าที่อนุญาตสำหรับพารามิเตอร์ android.os.Build.CPU_ABI และ android.os.Build.CPU_ABI2
3.4.1. ความเข้ากันได้ของ WebView เพิ่ม Chromium เป็นการใช้งาน WebView ที่จำเป็น
3.7. ความเข้ากันได้ของเครื่องเสมือน เพิ่มข้อกำหนดสำหรับความหนาแน่นของหน้าจอ xxhdpi และ 400dpi
3.8.6. ธีม อัปเดตให้สอดคล้องกับการใช้แถบระบบแบบโปร่งแสง
3.8.12. ตำแหน่ง ส่วนใหม่ที่เพิ่มการตั้งค่าสถานที่ตั้งของข้อกำหนดแบบรวมศูนย์
3.8.13. Unicode ส่วนใหม่ที่เพิ่มข้อกำหนดสำหรับการรองรับอีโมจิ
3.9. การดูแลระบบของอุปกรณ์ แอปพลิเคชันการดูแลระบบที่ติดตั้งไว้ล่วงหน้าซึ่งระบุไว้ข้างต้นต้องไม่ใช่แอปพลิเคชันเจ้าของอุปกรณ์เริ่มต้น
5.1 ตัวแปลงรหัสสื่อ เพิ่มข้อกำหนดเกี่ยวกับโปรแกรมถอดรหัส VP9 เพิ่มข้อกำหนดที่แนะนำสำหรับตัวแปลงรหัส VP8 ของฮาร์ดแวร์
5.3 การถอดรหัสวิดีโอ เพิ่ม VP9 เพิ่มคําแนะนําสําหรับการสลับความละเอียดแบบไดนามิก
5.4. การบันทึกเสียง เพิ่ม REMOTE_SUBMIX เป็นแหล่งที่มาของเสียงใหม่ที่จำเป็น กำหนดให้ต้องใช้ android.media.audiofx.NoiseSuppressor API
6.2.1 เวอร์ชันทดลอง ส่วนใหม่ที่แนะนำรันไทม์ ART และใช้ Dalvik เป็นรันไทม์เริ่มต้น
7.1.1. การกำหนดค่าหน้าจอ เปลี่ยนสัดส่วนการแสดงผล 1.85 เป็น 1.86 เพิ่มความหนาแน่นของหน้าจอ 400dpi
7.1.6. ประเภทหน้าจอ เพิ่มการกำหนดค่าความละเอียด 640 dpi (4K) แล้ว
7.2.3. ปุ่มนำทาง เพิ่มฟังก์ชัน "ล่าสุด" เป็นฟังก์ชันที่จำเป็น ถอดฟังก์ชัน "เมนู" ลงจากลำดับความสำคัญ
7.3.6. เทอร์โมมิเตอร์ เพิ่ม SENSOR_TYPE_AMBIENT_TEMPERATURE เป็นเทอร์โมมิเตอร์ที่แนะนำ
7.4.2.2. การตั้งค่าลิงก์โดยตรงที่ผ่านอุโมงค์ Wi-Fi ส่วนใหม่ที่เพิ่มการรองรับการตั้งค่าลิงก์โดยตรงแบบ Tunneled ของ Wi-Fi (TDLS)
7.4.4. Near Field Communication เพิ่ม Host Card Emulation (HCE) เป็นหนึ่งในข้อกำหนด แทนที่ SNEP GET ด้วย Logical Link Control Protocol (LLCP) และเพิ่มโปรไฟล์ Bluetooth Object Push เป็นข้อกำหนด
7.4.6. การตั้งค่าการซิงค์ ส่วนใหม่ที่เพิ่มข้อกำหนดให้เปิดใช้การซิงค์ข้อมูลอัตโนมัติโดยค่าเริ่มต้น
7.6.1. หน่วยความจำและพื้นที่เก็บข้อมูลขั้นต่ำ เพิ่มข้อกำหนดการตั้งค่า ActivityManager.isLowRamDevice() สำหรับอุปกรณ์ที่มีหน่วยความจำน้อยกว่า 512 MB เพิ่มข้อกำหนดด้านพื้นที่เก็บข้อมูลจาก 512 MB และ 1 GB เป็น 1 GB และ 2 GB ตามลำดับ
7.6.2. พื้นที่เก็บข้อมูล "ภายนอก" ที่แชร์ การแก้ไขด้านบรรณาธิการ เช่น การเปลี่ยนชื่อส่วน และย้ายข้อความที่เหมาะกับส่วนนี้จากส่วนที่ 9.5 แอปพลิเคชันที่ระบุไว้อาจเขียนไปยังไดเรกทอรีเฉพาะแพ็กเกจของตนในที่จัดเก็บข้อมูลภายนอกรอง
7.7. USB เพิ่มข้อกำหนดให้อุปกรณ์ทั้งหมดรายงานหมายเลขซีเรียล USB
9.5 การรองรับผู้ใช้หลายคน ย้ายข้อความที่ไม่เจาะจงผู้ใช้หลายคนไปไว้ที่ส่วน 7.6.2
9.7 ฟีเจอร์ความปลอดภัยของเคิร์นัล เขียนใหม่เพื่อระบุการเปลี่ยน SELinux เป็นโหมดการบังคับใช้และข้อกำหนด ระบบจะไม่แสดงผลเอาต์พุต SELinux ในอินเทอร์เฟซผู้ใช้
9.8 ความเป็นส่วนตัว ส่วนใหม่ที่เพิ่มข้อกำหนดในการบันทึกเสียงและวิดีโอต้องทริกเกอร์การแจ้งเตือนอย่างต่อเนื่องไปยังผู้ใช้
9.9. การเข้ารหัสดิสก์ทั้งเครื่อง ส่วนใหม่ที่เพิ่มข้อกำหนดให้อุปกรณ์ที่มีหน้าจอล็อกรองรับการเข้ารหัสทั้งดิสก์
12. บันทึกการเปลี่ยนแปลงของเอกสาร ส่วนใหม่ที่สรุปการเปลี่ยนแปลงใน CDD ตามแต่ละส่วน

 

13. ติดต่อเรา

คุณสามารถติดต่อผู้เขียนเอกสารที่ compatibility@android.com เพื่อขอคำชี้แจงหรือแจ้งปัญหาที่คุณคิดว่าเอกสารไม่ได้กล่าวถึง