นิยามความเข้ากันได้ของ Android 4.2

ฉบับที่ 2
อัปเดตล่าสุด: 17 ก.พ. 2013

ลิขสิทธิ์ © 2012, Google Inc. สงวนลิขสิทธิ์
[email protected]

สารบัญ

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. ติดต่อเรา
ภาคผนวก ก - ขั้นตอนการทดสอบบลูทูธ

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

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

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

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

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

ในกรณีที่คำจำกัดความนี้หรือการทดสอบซอฟต์แวร์ที่อธิบายไว้ในส่วนที่ 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.2: http://source.android.com/docs/compatibility/4.2/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 webdatabase API: http://www.w3.org/TR/webdatabase/
  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/security.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. Wifi 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. Wifi Direct (Wifi 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. ข้อมูลอ้างอิงเกี่ยวกับพื้นที่เก็บข้อมูลภายนอก: https://source.android.com/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
  • กล้อง: http://developer.android.com/reference/android/hardware/Camera.Parameters.html
  • แหล่งข้อมูลเหล่านี้จำนวนมากมาจาก Android SDK เวอร์ชัน 4.2 โดยตรงหรือโดยอ้อม และจะมีฟังก์ชันการทำงานเหมือนกับข้อมูลในเอกสารประกอบของ SDK ดังกล่าว ในกรณีที่นิยามความเข้ากันได้นี้หรือชุดเครื่องมือทดสอบความเข้ากันได้ขัดแย้งกับเอกสารประกอบ SDK ระบบจะถือว่าเอกสารประกอบ SDK ถูกต้อง รายละเอียดทางเทคนิคที่ระบุไว้ในข้อมูลอ้างอิงข้างต้นจะถือว่าเป็นส่วนหนึ่งของคำจำกัดความความเข้ากันได้นี้

    3. ซอฟต์แวร์

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

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

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

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

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

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

    3.2.1. สิทธิ์

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

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

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

    พารามิเตอร์ ความคิดเห็น
    android.os.Build.VERSION.RELEASE เวอร์ชันของระบบ Android ที่ใช้งานอยู่ในปัจจุบันในรูปแบบที่มนุษย์อ่านได้ ช่องนี้ต้องมีค่าสตริงอย่างใดอย่างหนึ่งที่ระบุไว้ใน [ทรัพยากร, 7]
    android.os.Build.VERSION.SDK เวอร์ชันของระบบ Android ที่ใช้งานอยู่ในปัจจุบันในรูปแบบที่โค้ดแอปพลิเคชันของบุคคลที่สามเข้าถึงได้ สำหรับ Android 4.2 ช่องนี้ต้องมีค่าจำนวนเต็มเป็น 17
    android.os.Build.VERSION.SDK_INT เวอร์ชันของระบบ Android ที่ใช้งานอยู่ในปัจจุบันในรูปแบบที่โค้ดแอปพลิเคชันของบุคคลที่สามเข้าถึงได้ สำหรับ Android 4.2 ช่องนี้ต้องมีค่าจำนวนเต็มเป็น 17
    android.os.Build.VERSION.INCREMENTAL ค่าที่นักติดตั้งใช้งานอุปกรณ์เลือกเพื่อระบุบิลด์ที่เฉพาะเจาะจงของระบบ Android ที่ใช้งานอยู่ในปัจจุบันในรูปแบบที่มนุษย์อ่านได้ ค่านี้ต้องไม่นําไปใช้ซ้ำกับบิลด์อื่นที่พร้อมให้บริการแก่ผู้ใช้ปลายทาง การใช้งานทั่วไปของช่องนี้คือเพื่อระบุหมายเลขบิลด์หรือตัวระบุการเปลี่ยนแปลงในระบบควบคุมแหล่งที่มาที่ใช้สร้างบิลด์ ไม่มีข้อกำหนดเกี่ยวกับรูปแบบที่เจาะจงของช่องนี้ ยกเว้นว่าต้องไม่มีค่าเป็น Null หรือสตริงว่าง ("")
    android.os.Build.BOARD ค่าที่นักติดตั้งใช้งานอุปกรณ์เลือกเพื่อระบุฮาร์ดแวร์ภายในที่เฉพาะเจาะจงซึ่งอุปกรณ์ใช้ในรูปแบบที่มนุษย์อ่านได้ การใช้ช่องนี้ที่เป็นไปได้คือการระบุการแก้ไขที่เฉพาะเจาะจงของแผงวงจรที่จ่ายไฟให้อุปกรณ์ ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตได้และตรงกับนิพจน์ทั่วไป "^[a-zA-Z0-9.,_-]+$"
    android.os.Build.BRAND ค่าที่ผู้ติดตั้งใช้งานอุปกรณ์เลือกเพื่อระบุชื่อบริษัท องค์กร บุคคลธรรมดา ฯลฯ ที่ผลิตอุปกรณ์ในรูปแบบที่มนุษย์อ่านได้ การใช้ช่องนี้ที่เป็นไปได้คือเพื่อระบุ OEM และ/หรือผู้ให้บริการที่ขายอุปกรณ์ ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตได้และตรงกับนิพจน์ทั่วไป "^[a-zA-Z0-9.,_-]+$"
    android.os.Build.CPU_ABI ชื่อชุดคำสั่ง (ประเภท CPU + รูปแบบ ABI) ของโค้ดเนทีฟ โปรดดูส่วนที่ 3.3: ความเข้ากันได้ของ Native API
    android.os.Build.CPU_ABI2 ชื่อชุดคำสั่งที่ 2 (ประเภท CPU + รูปแบบ ABI) ของโค้ดเนทีฟ โปรดดูส่วนที่ 3.3: ความเข้ากันได้ของ Native API
    android.os.Build.DEVICE ค่าที่ผู้ติดตั้งใช้งานอุปกรณ์เลือกเพื่อระบุการกำหนดค่าหรือการแก้ไขที่เฉพาะเจาะจงของบอดี้ (บางครั้งเรียกว่า "การออกแบบอุตสาหกรรม") ของอุปกรณ์ ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตได้ และตรงกับนิพจน์ทั่วไป "^[a-zA-Z0-9.,_-]+$"
    android.os.Build.FINGERPRINT สตริงที่ระบุบิลด์นี้โดยไม่ซ้ำกัน ควรเป็นชื่อที่มนุษย์อ่านได้ โดยต้องเป็นไปตามเทมเพลตนี้
    $(BRAND)/$(PRODUCT)/$(DEVICE):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)
    ตัวอย่างเช่น
    acme/mydevice/generic:4.2/JRN53/3359:userdebug/test-keys
    ฟิงเกอร์ปรินต์ต้องไม่มีอักขระที่เป็นช่องว่าง หากฟิลด์อื่นๆ ที่รวมอยู่ในเทมเพลตด้านบนมีอักขระที่เป็นช่องว่าง คุณต้องแทนที่อักขระเหล่านั้นในลายนิ้วมือของบิลด์ด้วยอักขระอื่น เช่น อักขระขีดล่าง ("_") ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตได้
    android.os.Build.HARDWARE ชื่อของฮาร์ดแวร์ (จากบรรทัดคำสั่งเคอร์เนลหรือ /proc) ควรเป็นชื่อที่มนุษย์อ่านได้ ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตได้ และตรงกับนิพจน์ทั่วไป "^[a-zA-Z0-9.,_-]+$"
    android.os.Build.HOST สตริงที่ระบุโฮสต์ที่ใช้สร้างบิลด์ที่ไม่ซ้ำกันในรูปแบบที่มนุษย์อ่านได้ ช่องนี้ไม่มีข้อกำหนดเกี่ยวกับรูปแบบที่เจาะจง ยกเว้นว่าต้องไม่มีค่าเป็น Null หรือสตริงว่าง ("")
    android.os.Build.ID ตัวระบุที่ผู้ติดตั้งใช้งานอุปกรณ์เลือกเพื่ออ้างอิงถึงรุ่นที่เฉพาะเจาะจงในรูปแบบที่มนุษย์อ่านได้ ฟิลด์นี้อาจเหมือนกับ android.os.Build.VERSION.INCREMENTAL แต่ควรเป็นค่าที่มีความหมายเพียงพอสำหรับผู้ใช้ปลายทางในการแยกความแตกต่างระหว่างบิลด์ซอฟต์แวร์ ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตและตรงกับนิพจน์ทั่วไป "^[a-zA-Z0-9.,_-]+$"
    android.os.Build.MANUFACTURER ชื่อทางการค้าของผู้ผลิตอุปกรณ์ดั้งเดิม (OEM) ของผลิตภัณฑ์ ไม่มีข้อกำหนดเกี่ยวกับรูปแบบที่เฉพาะเจาะจงของฟิลด์นี้ ยกเว้นว่าต้องไม่มีค่าเป็น Null หรือสตริงว่าง ("")
    android.os.Build.MODEL ค่าที่นักติดตั้งใช้งานอุปกรณ์เลือกซึ่งมีชื่อของอุปกรณ์ตามที่ผู้ใช้ปลายทางทราบ ชื่อนี้ควรเป็นชื่อเดียวกับที่ใช้ในการทําการตลาดและขายอุปกรณ์แก่ผู้ใช้ ไม่มีข้อกำหนดเฉพาะเกี่ยวกับรูปแบบของฟิลด์นี้ ยกเว้นว่าต้องไม่มีค่าเป็น Null หรือสตริงว่าง ("")
    android.os.Build.PRODUCT ค่าที่ผู้ติดตั้งใช้งานอุปกรณ์เลือกซึ่งมีชื่อการพัฒนาหรือชื่อรหัสของผลิตภัณฑ์ (SKU) ต้องอ่านออกได้ แต่ไม่จำเป็นต้องมีไว้เพื่อให้ผู้ใช้ปลายทางดู ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตและตรงกับนิพจน์ทั่วไป "^[a-zA-Z0-9.,_-]+$"
    android.os.Build.SERIAL หมายเลขซีเรียลของฮาร์ดแวร์ (หากมี) ค่าของช่องนี้ต้องเข้ารหัสได้ในรูปแบบ ASCII 7 บิตและตรงกับนิพจน์ทั่วไป "^([a-zA-Z0-9]{0,20})$"
    android.os.Build.TAGS รายการแท็กที่คั่นด้วยคอมมาซึ่งผู้ติดตั้งใช้งานอุปกรณ์เลือกไว้เพื่อแยกความแตกต่างของบิลด์เพิ่มเติม เช่น "unsigned,debug" ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตและตรงกับนิพจน์ทั่วไป "^[a-zA-Z0-9.,_-]+$"
    android.os.Build.TIME ค่าที่แสดงการประทับเวลาที่บิลด์เกิดขึ้น
    android.os.Build.TYPE ค่าที่ผู้ติดตั้งใช้งานอุปกรณ์เลือกซึ่งระบุการกำหนดค่ารันไทม์ของบิลด์ ช่องนี้ควรมีค่าอย่างใดอย่างหนึ่งที่สอดคล้องกับการกำหนดค่ารันไทม์ Android ทั่วไป 3 รายการ ได้แก่ "user", "userdebug" หรือ "eng" ค่าของช่องนี้ต้องเข้ารหัสเป็น ASCII 7 บิตได้และตรงกับนิพจน์ทั่วไป "^[a-zA-Z0-9.,_-]+$"
    android.os.Build.USER ชื่อหรือรหัสผู้ใช้ของผู้ใช้ (หรือผู้ใช้อัตโนมัติ) ที่สร้างบิลด์ ไม่มีข้อกำหนดเกี่ยวกับรูปแบบที่เจาะจงของช่องนี้ ยกเว้นว่าต้องไม่มีค่า 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.2 ได้ การใช้งานโอเพนซอร์สจากฝั่งอัปสตรีมของ 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.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) กับไลบรารีที่จำเป็นแต่ละรายการในรายการด้านล่าง
    • ต้องรายงานอินเทอร์เฟซแบบไบนารีของแอปพลิเคชัน (ABI) เดิมที่อุปกรณ์รองรับอย่างถูกต้องผ่าน android.os.Build.CPU_ABI API
    • ต้องรายงานเฉพาะ ABI ที่ระบุไว้ใน Android NDK เวอร์ชันล่าสุดในไฟล์ docs/CPU-ARCH-ABIS.txt
    • ควรสร้างโดยใช้ซอร์สโค้ดและไฟล์ส่วนหัวที่มีอยู่ในโปรเจ็กต์โอเพนซอร์สของ 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)
    • 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 ใดๆ ทั้งสิ้น

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

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

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

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

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

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

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

    HTML5 API เช่นเดียวกับ JavaScript API ทั้งหมดต้องปิดใช้โดยค่าเริ่มต้นใน WebView เว้นแต่ว่านักพัฒนาแอปจะเปิดใช้อย่างชัดเจนผ่าน Android API ปกติ

    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
    xlarge mdpi 32MB
    xlarge tvdpi / hdpi 64MB
    xlarge xhdpi 128MB

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

    3.8.1. วิดเจ็ต

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

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

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

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

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

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

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

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

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

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

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

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

    3.8.5. ธีม

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

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