Định nghĩa về khả năng tương thích với Android 11

1. Giới thiệu

Tài liệu này liệt kê những yêu cầu mà thiết bị phải đáp ứng để tương thích với Android 11.

Việc sử dụng "PHẢI", "KHÔNG ĐƯỢC", "BẮT BUỘC", "SẼ", "SẼ KHÔNG", "NÊN", "KHÔNG NÊN", "NÊN", "CÓ THỂ" và "KHÔNG BẮT BUỘC" là theo tiêu chuẩn IETF được xác định trong RFC2119.

Theo định nghĩa trong tài liệu này, "nhà triển khai thiết bị" là một cá nhân hoặc tổ chức phát triển giải pháp phần cứng/phần mềm chạy Android 11. "Cách triển khai thiết bị" hoặc "triển khai" là giải pháp phần cứng/phần mềm được phát triển.

Để được coi là tương thích với Android 11, các hoạt động triển khai thiết bị PHẢI đáp ứng các yêu cầu được trình bày trong Định nghĩa về khả năng tương thích này, bao gồm cả mọi tài liệu được đưa vào thông qua tài liệu tham khảo.

Trong trường hợp định nghĩa này hoặc các kiểm thử phần mềm được mô tả trong mục 10 không rõ ràng, mơ hồ hoặc chưa đầy đủ, thì nhà triển khai thiết bị có trách nhiệm đảm bảo khả năng tương thích với các phương thức triển khai hiện có.

Vì lý do này, Dự án nguồn mở Android vừa là tài liệu tham khảo vừa là cách triển khai ưu tiên của Android. Các nhà triển khai thiết bị NÊN DỰA VÀO mã nguồn "nguồn" có trong Dự án nguồn mở Android trong phạm vi tối đa có thể. Mặc dù về lý thuyết, bạn có thể thay thế một số thành phần bằng các cách triển khai thay thế, nhưng BẠN TUYỆT ĐỐI KHÔNG NÊN làm theo cách này, vì việc vượt qua các kiểm thử phần mềm sẽ trở nên khó khăn hơn đáng kể. Bên triển khai có trách nhiệm đảm bảo khả năng tương thích đầy đủ về hành vi với việc triển khai Android tiêu chuẩn, bao gồm cả Bộ kiểm tra tính tương thích và các yêu cầu khác. Cuối cùng, xin lưu ý rằng một số trường hợp thay thế và sửa đổi thành phần nhất định bị nghiêm cấm theo tài liệu này.

Nhiều tài nguyên được liên kết trong tài liệu này có nguồn gốc trực tiếp hoặc gián tiếp từ Android SDK và sẽ có chức năng giống hệt thông tin trong tài liệu của SDK đó. Trong mọi trường hợp mà Định nghĩa về khả năng tương thích này hoặc Bộ kiểm thử khả năng tương thích không thống nhất với tài liệu SDK, thì tài liệu SDK sẽ được coi là có thẩm quyền. Mọi thông tin chi tiết về kỹ thuật được cung cấp trong các tài nguyên được liên kết trong tài liệu này đều được coi là một phần của Định nghĩa về khả năng tương thích này.

1.1 Cấu trúc tài liệu

1.1.1. Yêu cầu theo loại thiết bị

Mục 2 chứa tất cả các yêu cầu áp dụng cho một loại thiết bị cụ thể. Mỗi phần phụ của Mục 2 đều dành riêng cho một loại thiết bị cụ thể.

Tất cả các yêu cầu khác áp dụng chung cho mọi trường hợp triển khai thiết bị Android đều được liệt kê trong các phần sau Mục 2. Những yêu cầu này được gọi là "Yêu cầu cốt lõi" trong tài liệu này.

1.1.2. Mã yêu cầu

Mã yêu cầu được chỉ định cho các yêu cầu BẮT BUỘC.

  • Mã nhận dạng chỉ được chỉ định cho các yêu cầu BẮT BUỘC.
  • Các yêu cầu ĐƯỢC KHUYẾN NGHỊ MẠNH MẼ được đánh dấu là [SR] nhưng không được chỉ định mã nhận dạng.
  • Mã này bao gồm: Mã loại thiết bị – Mã điều kiện – Mã yêu cầu (ví dụ: C-0-1).

Mỗi mã nhận dạng được xác định như sau:

  • Mã nhận dạng loại thiết bị (xem thêm trong phần 2. Loại thiết bị)
    • C: Core (Các yêu cầu áp dụng cho mọi cách triển khai thiết bị Android)
    • H: Thiết bị Android cầm tay
    • T: Thiết bị Android TV
    • Đáp: Triển khai Android Automotive
    • W: Triển khai Android Watch
    • Thẻ: Triển khai trên máy tính bảng Android
  • Mã điều kiện
    • Khi yêu cầu là vô điều kiện, mã nhận dạng này được đặt là 0.
    • Khi yêu cầu là có điều kiện, 1 sẽ được chỉ định cho điều kiện thứ nhất và số này sẽ tăng thêm 1 trong cùng một phần và cùng loại thiết bị.
  • Mã yêu cầu
    • Mã nhận dạng này bắt đầu từ 1 và tăng thêm 1 trong cùng một phần và cùng một điều kiện.

1.1.3. Mã yêu cầu trong Phần 2

Mã yêu cầu trong Mục 2 bắt đầu bằng mã mục tương ứng, theo sau là mã yêu cầu như mô tả ở trên.

  • Mã nhận dạng trong Mục 2 bao gồm: Mã mục / Mã loại thiết bị – Mã điều kiện – Mã yêu cầu (ví dụ: 7.4.3/A-0-1).

2. Loại thiết bị

Mặc dù Dự án nguồn mở Android cung cấp một ngăn xếp phần mềm có thể dùng cho nhiều loại thiết bị và hệ số hình dạng, nhưng có một số loại thiết bị có hệ sinh thái phân phối ứng dụng tương đối ổn định hơn.

Phần này mô tả các loại thiết bị đó, cũng như các yêu cầu và đề xuất bổ sung áp dụng cho từng loại thiết bị.

Tất cả các hoạt động triển khai thiết bị Android không thuộc bất kỳ loại thiết bị nào được mô tả vẫn PHẢI đáp ứng mọi yêu cầu trong các phần khác của Định nghĩa về khả năng tương thích này.

2.1 Cấu hình thiết bị

Để biết những điểm khác biệt chính về cấu hình phần cứng theo loại thiết bị, hãy xem các yêu cầu dành riêng cho thiết bị trong phần sau đây.

2.2. Yêu cầu đối với thiết bị cầm tay

Thiết bị cầm tay Android là một cách triển khai thiết bị Android mà người dùng thường cầm trên tay, chẳng hạn như máy nghe nhạc mp3, điện thoại hoặc máy tính bảng.

Việc triển khai thiết bị Android được phân loại là Thiết bị cầm tay nếu đáp ứng tất cả các tiêu chí sau:

  • Có nguồn điện di động, chẳng hạn như pin.
  • Có kích thước màn hình đường chéo thực tế trong khoảng từ 3,3 inch (hoặc 2,5 inch đối với các thiết bị ra mắt ở cấp độ API thấp hơn Android 11) đến 8 inch.

Các yêu cầu bổ sung trong phần còn lại của phần này dành riêng cho việc triển khai thiết bị Android cầm tay.

Lưu ý: Những yêu cầu không áp dụng cho thiết bị Máy tính bảng Android được đánh dấu bằng dấu *.

2.2.1. Phần cứng

Cách triển khai thiết bị cầm tay:

  • [7.1.1.1/H-0-1] PHẢI có ít nhất một màn hình tương thích với Android đáp ứng tất cả các yêu cầu được mô tả trong tài liệu này.
  • [7.1.1.3/H-SR] RẤT NÊN cung cấp cho người dùng một cách để thay đổi kích thước hiển thị (mật độ màn hình).

Nếu các hoạt động triển khai thiết bị cầm tay hỗ trợ tính năng xoay màn hình phần mềm, thì:

  • [7.1.1.1/H-1-1]* PHẢI đảm bảo màn hình logic được cung cấp cho các ứng dụng bên thứ ba có kích thước ít nhất là 2 inch ở(các) cạnh ngắn và 2,7 inch ở(các) cạnh dài. Những thiết bị ra mắt ở cấp độ API thấp hơn cấp độ API trong tài liệu này sẽ được miễn yêu cầu này.

Nếu các hoạt động triển khai Thiết bị cầm tay không hỗ trợ tính năng xoay màn hình bằng phần mềm, thì:

  • [7.1.1.1/H-2-1]* PHẢI đảm bảo màn hình logic được cung cấp cho các ứng dụng bên thứ ba có kích thước ít nhất là 2,7 inch ở(các) cạnh ngắn. Những thiết bị ra mắt ở cấp độ API thấp hơn cấp độ API trong tài liệu này sẽ được miễn yêu cầu này.

Nếu các hoạt động triển khai thiết bị Cầm tay tuyên bố hỗ trợ màn hình có dải động cao thông qua Configuration.isScreenHdr() , thì các hoạt động này:

  • [7.1.4.5/H-1-1] PHẢI quảng cáo việc hỗ trợ các tiện ích EGL_EXT_gl_colorspace_bt2020_pq, EGL_EXT_surface_SMPTE2086_metadata, EGL_EXT_surface_CTA861_3_metadata, VK_EXT_swapchain_colorspaceVK_EXT_hdr_metadata.

Cách triển khai thiết bị cầm tay:

  • [7.1.4.6/H-0-1] PHẢI báo cáo xem thiết bị có hỗ trợ chức năng phân tích tài nguyên GPU hay không thông qua một thuộc tính hệ thống graphics.gpu.profiler.support.

Nếu các hoạt động triển khai Thiết bị cầm tay khai báo sự hỗ trợ thông qua một thuộc tính hệ thống graphics.gpu.profiler.support, thì các hoạt động này:

  • [7.1.4.6/H-1-1] PHẢI báo cáo dưới dạng đầu ra một dấu vết protobuf tuân thủ giản đồ cho bộ đếm GPU và giai đoạn kết xuất GPU được xác định trong tài liệu Perfetto.
  • [7.1.4.6/H-1-2] PHẢI báo cáo các giá trị tuân thủ cho bộ đếm GPU của thiết bị theo gpu counter trace packet proto.
  • [7.1.4.6/H-1-3] PHẢI báo cáo các giá trị tuân thủ cho GPU RenderStages của thiết bị theo render stage trace packet proto.
  • [7.1.4.6/H-1-4] PHẢI báo cáo một điểm theo dõi Tần suất của GPU theo định dạng được chỉ định: power/gpu_frequency.

Cách triển khai thiết bị cầm tay:

  • [7.1.5/H-0-1] PHẢI hỗ trợ chế độ tương thích ứng dụng cũ như được triển khai bằng mã nguồn mở Android nguồn trên. Tức là các hoạt động triển khai thiết bị KHÔNG ĐƯỢC phép thay đổi các điều kiện kích hoạt hoặc ngưỡng kích hoạt chế độ tương thích, cũng như KHÔNG ĐƯỢC phép thay đổi hành vi của chính chế độ tương thích.
  • [7.2.1/H-0-1] PHẢI hỗ trợ các ứng dụng Trình chỉnh sửa phương thức nhập (IME) của bên thứ ba.
  • [7.2.3/H-0-3] PHẢI cung cấp chức năng Trang chủ trên tất cả màn hình tương thích với Android có màn hình chính.
  • [7.2.3/H-0-4] PHẢI cung cấp chức năng Quay lại trên tất cả màn hình tương thích với Android và chức năng Gần đây trên ít nhất một màn hình tương thích với Android.
  • [7.2.3/H-0-2] PHẢI gửi cả sự kiện nhấn bình thường và nhấn và giữ của chức năng Quay lại (KEYCODE_BACK) đến ứng dụng trên nền trước. Hệ thống KHÔNG ĐƯỢC phép sử dụng các sự kiện này và CÓ THỂ được kích hoạt bên ngoài thiết bị Android (ví dụ: bàn phím phần cứng bên ngoài kết nối với thiết bị Android).
  • [7.2.4/H-0-1] PHẢI hỗ trợ thao tác nhập bằng màn hình cảm ứng.
  • [7.2.4/H-SR] RẤT NÊN khởi chạy ứng dụng hỗ trợ do người dùng chọn, tức là ứng dụng triển khai VoiceInteractionService hoặc một hoạt động xử lý ACTION_ASSIST khi người dùng nhấn và giữ KEYCODE_MEDIA_PLAY_PAUSE hoặc KEYCODE_HEADSETHOOK nếu hoạt động trên nền trước không xử lý các sự kiện nhấn và giữ đó.
  • [7.3.1/H-SR] NÊN CÓ gia tốc kế 3 trục.

Nếu các thiết bị Cầm tay có gia tốc kế 3 trục, thì:

  • [7.3.1/H-1-1] PHẢI có khả năng báo cáo các sự kiện với tần suất ít nhất là 100 Hz.

Nếu các hoạt động triển khai Thiết bị cầm tay có bộ nhận GPS/GNSS và báo cáo khả năng cho các ứng dụng thông qua cờ tính năng android.hardware.location.gps, thì các hoạt động triển khai này:

  • [7.3.3/H-2-1] PHẢI báo cáo các phép đo GNSS ngay khi tìm thấy, ngay cả khi một vị trí được tính toán từ GPS/GNSS chưa được báo cáo.
  • [7.3.3/H-2-2] PHẢI báo cáo các khoảng cách giả và tốc độ khoảng cách giả của GNSS. Trong điều kiện không bị che khuất sau khi xác định vị trí, khi đứng yên hoặc di chuyển với gia tốc dưới 0,2 mét trên giây bình phương, các khoảng cách giả và tốc độ khoảng cách giả này phải đủ để tính toán vị trí trong vòng 20 mét và tốc độ trong vòng 0,2 mét trên giây, ít nhất 95% thời gian.

Nếu các hoạt động triển khai Thiết bị cầm tay có con quay hồi chuyển 3 trục, thì:

  • [7.3.4/H-3-1] PHẢI có khả năng báo cáo các sự kiện với tần suất tối thiểu là 100 Hz.
  • [7.3.4/H-3-2] PHẢI có khả năng đo lường các thay đổi về hướng lên đến 1.000 độ mỗi giây.

Các hoạt động triển khai thiết bị cầm tay có thể thực hiện cuộc gọi thoại và cho biết mọi giá trị khác ngoài PHONE_TYPE_NONE trong getPhoneType:

  • [7.3.8/H] PHẢI có cảm biến tiệm cận.

Cách triển khai thiết bị cầm tay:

  • [7.3.11/H-SR] NÊN hỗ trợ cảm biến tư thế với 6 bậc tự do.
  • [7.4.3/H] PHẢI hỗ trợ Bluetooth và Bluetooth LE.

Nếu các hoạt động triển khai Thiết bị cầm tay có kết nối có đo lượng dữ liệu, thì:

  • [7.4.7/H-1-1] PHẢI cung cấp chế độ tiết kiệm dữ liệu.

Nếu các hoạt động triển khai Thiết bị cầm tay bao gồm một thiết bị camera logic liệt kê các chức năng bằng CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA, thì các hoạt động triển khai này:

  • [7.5.4/H-1-1] Theo mặc định, camera PHẢI có trường nhìn (FOV) bình thường và PHẢI nằm trong khoảng từ 50 đến 90 độ.

Cách triển khai thiết bị cầm tay:

  • [7.6.1/H-0-1] PHẢI có ít nhất 4 GB bộ nhớ không biến động để lưu trữ dữ liệu riêng tư của ứng dụng (còn gọi là phân vùng "/data").
  • [7.6.1/H-0-2] PHẢI trả về "true" cho ActivityManager.isLowRamDevice() khi có ít hơn 1 GB bộ nhớ dành cho nhân và không gian người dùng.

Nếu các hoạt động triển khai Thiết bị cầm tay chỉ khai báo hỗ trợ ABI 32 bit:

  • [7.6.1/H-1-1] Bộ nhớ mà nhân và không gian người dùng có thể truy cập PHẢI có dung lượng tối thiểu là 416 MB nếu màn hình mặc định sử dụng độ phân giải bộ đệm khung hình lên đến qHD (ví dụ: FWVGA).

  • [7.6.1/H-2-1] Bộ nhớ có sẵn cho nhân và không gian người dùng PHẢI tối thiểu là 592 MB nếu màn hình mặc định sử dụng độ phân giải bộ đệm khung hình lên đến HD+ (ví dụ: HD, WSVGA).

  • [7.6.1/H-3-1] Bộ nhớ có sẵn cho nhân và không gian người dùng PHẢI tối thiểu là 896 MB nếu màn hình mặc định sử dụng độ phân giải bộ đệm khung hình lên đến FHD (ví dụ: WSXGA+).

  • [7.6.1/H-4-1] Bộ nhớ có sẵn cho nhân và không gian người dùng PHẢI có dung lượng tối thiểu là 1344 MB nếu màn hình mặc định sử dụng độ phân giải bộ đệm khung hình lên đến QHD (ví dụ: QWXGA).

Nếu các hoạt động triển khai Thiết bị cầm tay khai báo hỗ trợ bất kỳ ABI 64 bit nào (có hoặc không có ABI 32 bit):

  • [7.6.1/H-5-1] Bộ nhớ mà nhân và không gian người dùng có thể truy cập PHẢI có dung lượng tối thiểu là 816 MB nếu màn hình mặc định sử dụng độ phân giải bộ đệm khung hình lên đến qHD (ví dụ: FWVGA).

  • [7.6.1/H-6-1] Bộ nhớ có sẵn cho nhân và không gian người dùng PHẢI tối thiểu là 944 MB nếu màn hình mặc định sử dụng độ phân giải bộ đệm khung hình lên đến HD+ (ví dụ: HD, WSVGA).

  • [7.6.1/H-7-1] Bộ nhớ có sẵn cho nhân và không gian người dùng PHẢI tối thiểu là 1280 MB nếu màn hình mặc định sử dụng độ phân giải khung hình lên đến FHD (ví dụ: WSXGA+).

  • [7.6.1/H-8-1] Bộ nhớ có sẵn cho nhân và không gian người dùng PHẢI tối thiểu là 1824 MB nếu màn hình mặc định sử dụng độ phân giải bộ đệm khung hình lên đến QHD (ví dụ: QWXGA).

Xin lưu ý rằng "bộ nhớ có sẵn cho nhân và không gian người dùng" ở trên đề cập đến dung lượng bộ nhớ được cung cấp ngoài mọi bộ nhớ đã được dành riêng cho các thành phần phần cứng như đài, video, v.v. mà không thuộc quyền kiểm soát của nhân trên các hoạt động triển khai thiết bị.

Nếu các thiết bị Cầm tay có dung lượng bộ nhớ dành cho nhân và không gian người dùng nhỏ hơn hoặc bằng 1 GB, thì các thiết bị đó:

  • [7.6.1/H-9-1] PHẢI khai báo cờ tính năng android.hardware.ram.low.
  • [7.6.1/H-9-2] PHẢI có ít nhất 1,1 GB bộ nhớ không biến động cho dữ liệu riêng tư của ứng dụng (còn gọi là phân vùng "/data").

Nếu các chế độ triển khai Thiết bị cầm tay có hơn 1 GB bộ nhớ dành cho nhân và không gian người dùng, thì các chế độ triển khai đó:

  • [7.6.1/H-10-1] PHẢI có ít nhất 4 GB bộ nhớ không biến động để lưu trữ dữ liệu riêng tư của ứng dụng (còn gọi là phân vùng "/data").
  • NÊN khai báo cờ tính năng android.hardware.ram.normal.

Cách triển khai thiết bị cầm tay:

  • [7.6.2/H-0-1] KHÔNG ĐƯỢC cung cấp bộ nhớ dùng chung của ứng dụng có dung lượng nhỏ hơn 1 GiB.
  • [7.7.1/H] PHẢI có một cổng USB hỗ trợ chế độ thiết bị ngoại vi.

Nếu các thiết bị cầm tay triển khai một cổng USB hỗ trợ chế độ thiết bị ngoại vi, thì:

  • [7.7.1/H-1-1] PHẢI triển khai API Phụ kiện mở Android (AOA).

Nếu các thiết bị cầm tay có cổng USB hỗ trợ chế độ máy chủ, thì:

Cách triển khai thiết bị cầm tay:

  • [7.8.1/H-0-1] PHẢI có micrô.
  • [7.8.2/H-0-1] PHẢI có đầu ra âm thanh và khai báo android.hardware.audio.output.

Nếu các hoạt động triển khai Thiết bị cầm tay có thể đáp ứng tất cả các yêu cầu về hiệu suất để hỗ trợ chế độ Thực tế ảo và có hỗ trợ chế độ này, thì:

  • [7.9.1/H-1-1] PHẢI khai báo cờ tính năng android.hardware.vr.high_performance.
  • [7.9.1/H-1-2] PHẢI có một ứng dụng triển khai android.service.vr.VrListenerService mà các ứng dụng thực tế ảo có thể bật thông qua android.app.Activity#setVrModeEnabled.

Nếu các thiết bị cầm tay có một hoặc nhiều cổng USB-C ở chế độ máy chủ và triển khai (lớp âm thanh USB), ngoài các yêu cầu trong mục 7.7.2, thì các thiết bị này phải:

  • [7.8.2.2/H-1-1] PHẢI cung cấp thông tin ánh xạ phần mềm sau đây về mã HID:
Chức năng Ánh xạ Ngữ cảnh Hành vi
A Trang sử dụng HID: 0x0C
Mục đích sử dụng HID: 0x0CD
Khoá nhân: KEY_PLAYPAUSE
Khoá Android: KEYCODE_MEDIA_PLAY_PAUSE
Phát lại phương tiện Đầu vào: Nhấn nhanh
Đầu ra: Phát hoặc tạm dừng
Đầu vào: Nhấn và giữ
Đầu ra: Khởi chạy lệnh thoại
Gửi: android.speech.action.VOICE_SEARCH_HANDS_FREE nếu thiết bị bị khoá hoặc màn hình tắt. Gửi android.speech.RecognizerIntent.ACTION_WEB_SEARCH trong trường hợp khác
Cuộc gọi đến Đầu vào: Nhấn nhanh
Đầu ra: Chấp nhận cuộc gọi
Đầu vào: Nhấn và giữ
Đầu ra: Từ chối cuộc gọi
Cuộc gọi đang diễn ra Thao tác đầu vào: Nhấn nhanh
Thao tác đầu ra: Kết thúc cuộc gọi
Đầu vào: Nhấn và giữ
Đầu ra: Tắt hoặc bật tiếng micrô
B Trang sử dụng HID: 0x0C
Mục đích sử dụng HID: 0x0E9
Khoá nhân: KEY_VOLUMEUP
Khoá Android: VOLUME_UP
Phát nội dung nghe nhìn, Cuộc gọi đang diễn ra Đầu vào: Nhấn nhanh hoặc nhấn lâu
Đầu ra: Tăng âm lượng hệ thống hoặc âm lượng tai nghe
C Trang sử dụng HID: 0x0C
Sử dụng HID: 0x0EA
Khoá nhân: KEY_VOLUMEDOWN
Khoá Android: VOLUME_DOWN
Phát nội dung nghe nhìn, Cuộc gọi đang diễn ra Đầu vào: Nhấn nhanh hoặc nhấn và giữ
Đầu ra: Giảm âm lượng hệ thống hoặc âm lượng tai nghe
D Trang sử dụng HID: 0x0C
Mục đích sử dụng HID: 0x0CF
Khoá nhân: KEY_VOICECOMMAND
Khoá Android: KEYCODE_VOICE_ASSIST
Tất cả. Có thể được kích hoạt trong mọi trường hợp. Thao tác đầu vào: Nhấn nhanh hoặc nhấn và giữ
Thao tác đầu ra: Khởi chạy lệnh thoại
  • [7.8.2.2/H-1-2] PHẢI kích hoạt ACTION_HEADSET_PLUG khi cắm giắc cắm, nhưng chỉ sau khi các giao diện và điểm cuối âm thanh USB được liệt kê đúng cách để xác định loại đầu cắm được kết nối.

Khi phát hiện thấy các loại đầu cuối âm thanh USB 0x0302, chúng sẽ:

  • [7.8.2.2/H-2-1] PHẢI truyền tin Broadcast Intent ACTION_HEADSET_PLUG với giá trị bổ sung "microphone" được đặt thành 0.

Khi phát hiện thấy các loại đầu cắm âm thanh USB 0x0402, chúng sẽ:

  • [7.8.2.2/H-3-1] PHẢI truyền Intent ACTION_HEADSET_PLUG với giá trị bổ sung "microphone" được đặt thành 1.

Khi API AudioManager.getDevices() được gọi trong khi thiết bị ngoại vi USB đang kết nối, thiết bị này sẽ:

  • [7.8.2.2/H-4-1] PHẢI liệt kê một thiết bị thuộc loại AudioDeviceInfo.TYPE_USB_HEADSET và vai trò là isSink() nếu trường loại đầu cuối âm thanh USB là 0x0302.

  • [7.8.2.2/H-4-2] PHẢI liệt kê một thiết bị thuộc loại AudioDeviceInfo.TYPE_USB_HEADSET và vai trò là isSink() nếu trường loại đầu cuối âm thanh USB là 0x0402.

  • [7.8.2.2/H-4-3] PHẢI liệt kê một thiết bị thuộc loại AudioDeviceInfo.TYPE_USB_HEADSET và vai trò là isSource() nếu trường loại đầu cuối âm thanh USB là 0x0402.

  • [7.8.2.2/H-4-4] PHẢI liệt kê một thiết bị thuộc loại AudioDeviceInfo.TYPE_USB_DEVICE và vai trò là isSink() nếu trường loại đầu cuối âm thanh USB là 0x603.

  • [7.8.2.2/H-4-5] PHẢI liệt kê một thiết bị thuộc loại AudioDeviceInfo.TYPE_USB_DEVICE và vai trò là isSource() nếu trường loại đầu cuối âm thanh USB là 0x604.

  • [7.8.2.2/H-4-6] PHẢI liệt kê một thiết bị thuộc loại AudioDeviceInfo.TYPE_USB_DEVICE và vai trò là isSink() nếu trường loại đầu cuối âm thanh USB là 0x400.

  • [7.8.2.2/H-4-7] PHẢI liệt kê một thiết bị thuộc loại AudioDeviceInfo.TYPE_USB_DEVICE và vai trò là isSource() nếu trường loại đầu cuối âm thanh USB là 0x400.

  • [7.8.2.2/H-SR] ĐƯỢC RẤT KHUYẾN KHÍCH khi kết nối với một thiết bị ngoại vi âm thanh USB-C, để thực hiện việc liệt kê các nội dung mô tả USB, xác định các loại đầu cuối và truyền Intent ACTION_HEADSET_PLUG trong vòng chưa đến 1000 mili giây.

Nếu các hoạt động triển khai Thiết bị cầm tay có ít nhất một bộ truyền động xúc giác, thì:

Bộ truyền động cộng hưởng tuyến tính (LRA) là một hệ thống lò xo khối lượng đơn có tần số cộng hưởng chủ đạo, trong đó khối lượng chuyển động theo hướng chuyển động mong muốn.

Nếu các thiết bị cầm tay triển khai ít nhất một bộ truyền động cộng hưởng tuyến tính, thì:

  • [7.10/H]* NÊN di chuyển bộ truyền động xúc giác theo trục X của hướng dọc.

Nếu các hoạt động triển khai Thiết bị cầm tay có bộ truyền động xúc giác là Bộ truyền động cộng hưởng tuyến tính (LRA) trên trục X, thì:

  • [7.10/H-SR]* RẤT NÊN có tần số cộng hưởng của LRA trục X dưới 200 Hz.

Nếu các hoạt động triển khai thiết bị cầm tay tuân theo quy trình liên kết hằng số xúc giác, thì:

2.2.2. Đa phương tiện

Việc triển khai thiết bị cầm tay PHẢI hỗ trợ các định dạng mã hoá và giải mã âm thanh sau đây, đồng thời cung cấp các định dạng này cho các ứng dụng bên thứ ba:

  • [5.1/H-0-1] AMR-NB
  • [5.1/H-0-2] AMR-WB
  • [5.1/H-0-3] Cấu hình AAC MPEG-4 (AAC LC)
  • [5.1/H-0-4] Cấu hình HE AAC MPEG-4 (AAC+)
  • [5.1/H-0-5] AAC ELD (AAC có độ trễ thấp nâng cao)

Các chế độ triển khai thiết bị cầm tay PHẢI hỗ trợ các định dạng mã hoá video sau đây và cung cấp các định dạng này cho các ứng dụng bên thứ ba:

  • [5.2/H-0-1] H.264 AVC
  • [5.2/H-0-2] VP8

Các chế độ triển khai thiết bị cầm tay PHẢI hỗ trợ các định dạng giải mã video sau đây và cung cấp các định dạng này cho các ứng dụng bên thứ ba:

  • [5.3/H-0-1] H.264 AVC
  • [5.3/H-0-2] H.265 HEVC
  • [5.3/H-0-3] MPEG-4 SP
  • [5.3/H-0-4] VP8
  • [5.3/H-0-5] VP9

2.2.3. Phần mềm

Cách triển khai thiết bị cầm tay:

  • [3.2.3.1/H-0-1] PHẢI có một ứng dụng xử lý các ý định ACTION_GET_CONTENT, ACTION_OPEN_DOCUMENT, ACTION_OPEN_DOCUMENT_TREEACTION_CREATE_DOCUMENT như mô tả trong tài liệu SDK, đồng thời cung cấp cho người dùng khả năng truy cập vào dữ liệu của trình cung cấp tài liệu bằng cách sử dụng API DocumentsProvider.
  • [3.2.3.1/H-0-2]* PHẢI tải trước một hoặc nhiều ứng dụng hoặc thành phần dịch vụ bằng một trình xử lý ý định, cho tất cả các mẫu bộ lọc ý định công khai do các ý định ứng dụng sau đây xác định tại đây.
  • [3.2.3.1/H-SR] RẤT NÊN tải trước một ứng dụng email có thể xử lý các ý định ACTION_SENDTO hoặc ACTION_SEND hoặc ACTION_SEND_MULTIPLE để gửi email.
  • [3.4.1/H-0-1] PHẢI cung cấp một quy trình triển khai hoàn chỉnh cho API android.webkit.Webview.
  • [3.4.2/H-0-1] PHẢI có một ứng dụng Trình duyệt độc lập để người dùng duyệt web nói chung.
  • [3.8.1/H-SR] NÊN TRIỂN KHAI một trình chạy mặc định hỗ trợ tính năng ghim lối tắt, tiện ích và widgetFeatures trong ứng dụng.
  • [3.8.1/H-SR] NÊN TRIỂN KHAI một trình chạy mặc định giúp truy cập nhanh vào các lối tắt bổ sung do ứng dụng bên thứ ba cung cấp thông qua API ShortcutManager.
  • [3.8.1/H-SR] NÊN CÓ MỘT ỨNG DỤNG TRÌNH CHẠY MẶC ĐỊNH hiển thị huy hiệu cho các biểu tượng ứng dụng.
  • [3.8.2/H-SR] RẤT NÊN hỗ trợ các tiện ích ứng dụng của bên thứ ba.
  • [3.8.3/H-0-1] PHẢI cho phép các ứng dụng bên thứ ba thông báo cho người dùng về các sự kiện đáng chú ý thông qua các lớp API NotificationNotificationManager.
  • [3.8.3/H-0-2] PHẢI hỗ trợ thông báo đa dạng.
  • [3.8.3/H-0-3] PHẢI hỗ trợ thông báo dạng nổi.
  • [3.8.3/H-0-4] PHẢI có một bảng thông báo, cho phép người dùng trực tiếp kiểm soát (ví dụ: trả lời, tạm dừng, loại bỏ, chặn) các thông báo thông qua khả năng tương tác của người dùng, chẳng hạn như các nút hành động hoặc bảng điều khiển như được triển khai trong AOSP.
  • [3.8.3/H-0-5] PHẢI hiển thị các lựa chọn được cung cấp thông qua RemoteInput.Builder setChoices() trong ngăn thông báo.
  • [3.8.3/H-SR] NÊN HIỂN THỊ lựa chọn đầu tiên được cung cấp thông qua RemoteInput.Builder setChoices() trong bảng thông báo mà không cần người dùng tương tác thêm.
  • [3.8.3/H-SR] NÊN HIỂN THỊ tất cả các lựa chọn được cung cấp thông qua RemoteInput.Builder setChoices() trong ngăn thông báo khi người dùng mở rộng tất cả thông báo trong ngăn thông báo.
  • [3.8.3.1/H-SR] NÊN HIỂN THỊ các thao tác mà Notification.Action.Builder.setContextual được đặt làm true cùng dòng với các câu trả lời mà Notification.Remoteinput.Builder.setChoices hiển thị.
  • [3.8.4/H-SR] RẤT NÊN triển khai một trợ lý trên thiết bị để xử lý thao tác Trợ lý.

Nếu các hoạt động triển khai Thiết bị cầm tay hỗ trợ thao tác Trợ lý, thì:

  • [3.8.4/H-SR] NÊN SỬ DỤNG thao tác nhấn và giữ phím HOME làm thao tác tương tác được chỉ định để khởi chạy ứng dụng hỗ trợ như mô tả trong mục 7.2.3. PHẢI chạy ứng dụng hỗ trợ do người dùng chọn, tức là ứng dụng triển khai VoiceInteractionService hoặc một hoạt động xử lý ý định ACTION_ASSIST.

Nếu các chế độ triển khai Thiết bị cầm tay hỗ trợ conversation notifications và nhóm các thông báo này vào một phần riêng biệt với thông báo cảnh báo và thông báo im lặng không phải cuộc trò chuyện, thì:

  • [3.8.4/H-1-1]* PHẢI hiển thị thông báo cuộc trò chuyện trước các thông báo không phải là cuộc trò chuyện, ngoại trừ các thông báo dịch vụ trên nền trước đang diễn ra và thông báo có importance:high.

Nếu các thiết bị Android cầm tay hỗ trợ màn hình khoá, thì:

  • [3.8.10/H-1-1] PHẢI hiển thị Thông báo trên màn hình khoá, bao gồm cả Mẫu thông báo về nội dung nghe nhìn.

Nếu các hoạt động triển khai Thiết bị cầm tay hỗ trợ màn hình khoá bảo mật, thì:

  • [3.9/H-1-1] PHẢI triển khai đầy đủ các chính sách quản trị thiết bị được xác định trong tài liệu về Android SDK.
  • [3.9/H-1-2] PHẢI khai báo việc hỗ trợ hồ sơ được quản lý thông qua cờ tính năng android.software.managed_users, trừ phi thiết bị được định cấu hình để báo cáo chính nó là thiết bị có RAM thấp hoặc để phân bổ bộ nhớ trong (không tháo rời được) làm bộ nhớ dùng chung.

Nếu các hoạt động triển khai Thiết bị cầm tay có hỗ trợ các API ControlsProviderServiceControl, đồng thời cho phép các ứng dụng bên thứ ba xuất bản các chế độ điều khiển thiết bị, thì các hoạt động triển khai đó:

  • [3.8.16/H-1-1] PHẢI khai báo cờ tính năng android.software.controls và đặt thành true.
  • [3.8.16/H-1-2] PHẢI cung cấp cho người dùng một phương thức tương tác có khả năng thêm, chỉnh sửa, chọn và vận hành các chế độ điều khiển thiết bị mà người dùng yêu thích từ các chế độ điều khiển do ứng dụng bên thứ ba đăng ký thông qua API ControlsProviderServiceControl.
  • [3.8.16/H-1-3] PHẢI cung cấp quyền truy cập vào tính năng này cho người dùng trong vòng 3 lượt tương tác từ một Trình chạy mặc định.
  • [3.8.16/H-1-4] PHẢI hiển thị chính xác tên và biểu tượng của từng ứng dụng bên thứ ba cung cấp các chế độ kiểm soát thông qua API ControlsProviderService cũng như mọi trường được chỉ định do API Control cung cấp trong chế độ hỗ trợ này cho người dùng.

Ngược lại, nếu các hoạt động triển khai Thiết bị cầm tay không triển khai các chế độ kiểm soát như vậy, thì:

Cách triển khai thiết bị cầm tay:

  • [3.10/H-0-1] PHẢI hỗ trợ các dịch vụ hỗ trợ tiếp cận của bên thứ ba.
  • [3.10/H-SR] NÊN CÀI ĐẶT TRƯỚC các dịch vụ hỗ trợ tiếp cận trên thiết bị có chức năng tương đương hoặc vượt quá chức năng của các dịch vụ hỗ trợ tiếp cận Tiếp cận bằng công tắc và TalkBack (đối với các ngôn ngữ được công cụ Chuyển văn bản sang lời nói cài đặt sẵn hỗ trợ) như được cung cấp trong dự án nguồn mở talkback.
  • [3.11/H-0-1] PHẢI hỗ trợ việc cài đặt các công cụ TTS của bên thứ ba.
  • [3.11/H-SR] NÊN CÓ một công cụ TTS hỗ trợ các ngôn ngữ có trên thiết bị.
  • [3.13/H-SR] RẤT NÊN có một thành phần giao diện người dùng Cài đặt nhanh.

Nếu các hoạt động triển khai thiết bị cầm tay Android khai báo hỗ trợ FEATURE_BLUETOOTH hoặc FEATURE_WIFI, thì:

  • [3.16/H-1-1] PHẢI hỗ trợ tính năng ghép nối thiết bị đồng hành.

Nếu chức năng điều hướng được cung cấp dưới dạng một thao tác dựa trên cử chỉ trên màn hình:

  • [7.2.3/H] Vùng nhận dạng cử chỉ cho chức năng Trang chủ KHÔNG ĐƯỢC cao hơn 32 dp so với cuối màn hình.

Nếu các chế độ triển khai Thiết bị cầm tay cung cấp chức năng điều hướng dưới dạng cử chỉ từ mọi vị trí ở mép trái và mép phải của màn hình:

  • [7.2.3/H-0-1] Vùng cử chỉ của chức năng điều hướng PHẢI có chiều rộng nhỏ hơn 40 dp ở mỗi bên. Theo mặc định, vùng cử chỉ PHẢI có chiều rộng 24 dp.

2.2.4. Hiệu suất và sức mạnh

  • [8.1/H-0-1] Độ trễ khung hình nhất quán. Độ trễ khung hình không nhất quán hoặc độ trễ khi kết xuất khung hình KHÔNG ĐƯỢC xảy ra thường xuyên hơn 5 khung hình trong một giây và NÊN dưới 1 khung hình trong một giây.
  • [8.1/H-0-2] Độ trễ giao diện người dùng. Các hoạt động triển khai thiết bị PHẢI đảm bảo trải nghiệm người dùng có độ trễ thấp bằng cách cuộn danh sách gồm 10.000 mục danh sách theo quy định của Bộ kiểm tra tính tương thích (CTS) của Android trong vòng chưa đầy 36 giây.
  • [8.1/H-0-3] Chuyển đổi tác vụ. Khi nhiều ứng dụng đã được khởi chạy, việc khởi chạy lại một ứng dụng đang chạy sau khi ứng dụng đó đã được khởi chạy PHẢI mất ít hơn 1 giây.

Cách triển khai thiết bị cầm tay:

  • [8.2/H-0-1] PHẢI đảm bảo hiệu suất ghi tuần tự tối thiểu là 5 MB/giây.
  • [8.2/H-0-2] PHẢI đảm bảo hiệu suất ghi ngẫu nhiên tối thiểu là 0,5 MB/giây.
  • [8.2/H-0-3] PHẢI đảm bảo hiệu suất đọc tuần tự ít nhất là 15 MB/giây.
  • [8.2/H-0-4] PHẢI đảm bảo hiệu suất đọc ngẫu nhiên tối thiểu là 3,5 MB/giây.

Nếu các hoạt động triển khai Thiết bị cầm tay có các tính năng cải thiện khả năng quản lý nguồn điện của thiết bị có trong AOSP hoặc mở rộng các tính năng có trong AOSP, thì:

  • [8.3/H-1-1] PHẢI cung cấp cho người dùng khả năng bật và tắt tính năng tiết kiệm pin.
  • [8.3/H-1-2] PHẢI cung cấp cho người dùng khả năng hiển thị tất cả ứng dụng được miễn chế độ chờ của ứng dụng và chế độ tiết kiệm pin Nghỉ.

Cách triển khai thiết bị cầm tay:

  • [8.4/H-0-1] PHẢI cung cấp một hồ sơ sử dụng điện cho từng thành phần, xác định giá trị mức tiêu thụ hiện tại cho từng thành phần phần cứng và mức tiêu hao pin ước tính do các thành phần gây ra theo thời gian như được ghi lại trong trang web Dự án nguồn mở Android.
  • [8.4/H-0-2] PHẢI báo cáo tất cả các giá trị tiêu thụ điện năng theo đơn vị miliampe giờ (mAh).
  • [8.4/H-0-3] PHẢI báo cáo mức tiêu thụ điện năng của CPU theo UID của từng quy trình. Dự án nguồn mở Android đáp ứng yêu cầu này thông qua việc triển khai mô-đun nhân uid_cputime.
  • [8.4/H-0-4] PHẢI cung cấp thông tin về mức tiêu thụ điện này thông qua lệnh shell adb shell dumpsys batterystats cho nhà phát triển ứng dụng.
  • [8.4/H] CẦN được quy cho chính thành phần phần cứng nếu không thể quy mức sử dụng điện của thành phần phần cứng cho một ứng dụng.

Nếu các hoạt động triển khai Thiết bị cầm tay có màn hình hoặc đầu ra video, thì:

2.2.5. Mô hình bảo mật

Cách triển khai thiết bị cầm tay:

  • [9.1/H-0-1] PHẢI cho phép các ứng dụng bên thứ ba truy cập vào số liệu thống kê về mức sử dụng thông qua quyền android.permission.PACKAGE_USAGE_STATS và cung cấp một cơ chế mà người dùng có thể truy cập để cấp hoặc thu hồi quyền truy cập vào các ứng dụng đó để phản hồi ý định android.settings.ACTION_USAGE_ACCESS_SETTINGS.

Các cách triển khai thiết bị cầm tay (* Không áp dụng cho Máy tính bảng):

  • [9.11/H-0-2]* PHẢI sao lưu việc triển khai kho khoá bằng một môi trường thực thi riêng biệt.
  • [9.11/H-0-3]* PHẢI triển khai các thuật toán mã hoá RSA, AES, ECDSA và HMAC cũng như các hàm băm MD5, SHA1 và SHA-2 để hỗ trợ đúng cách các thuật toán được hệ thống Kho khoá Android hỗ trợ trong một khu vực được cách ly an toàn với mã đang chạy trên nhân trở lên. Tính năng cách ly an toàn PHẢI chặn tất cả các cơ chế tiềm ẩn mà mã kernel hoặc không gian người dùng có thể truy cập vào trạng thái nội bộ của môi trường biệt lập, bao gồm cả DMA. Dự án nguồn mở Android (AOSP) đáp ứng yêu cầu này bằng cách sử dụng chế độ triển khai Trusty, nhưng một giải pháp khác dựa trên ARM TrustZone hoặc một chế độ triển khai bảo mật đã được bên thứ ba xem xét về khả năng cách ly dựa trên siêu giám sát viên thích hợp cũng là các lựa chọn thay thế.
  • [9.11/H-0-4]* PHẢI thực hiện quy trình xác thực trên màn hình khoá trong môi trường thực thi biệt lập và chỉ khi thành công, mới cho phép sử dụng các khoá liên kết với quy trình xác thực. Thông tin đăng nhập trên màn hình khoá PHẢI được lưu trữ theo cách chỉ cho phép môi trường thực thi biệt lập thực hiện quy trình xác thực trên màn hình khoá. Dự án nguồn mở Android ở nguồn trên cung cấp Lớp trừu tượng phần cứng (HAL) Gatekeeper và Trusty. Bạn có thể dùng các lớp này để đáp ứng yêu cầu này.
  • [9.11/H-0-5]* PHẢI hỗ trợ quy trình chứng thực khoá trong đó khoá ký chứng thực được bảo vệ bằng phần cứng bảo mật và quy trình ký được thực hiện trong phần cứng bảo mật. Bạn PHẢI chia sẻ các khoá ký chứng thực trên một số lượng thiết bị đủ lớn để ngăn các khoá này được dùng làm giá trị nhận dạng thiết bị. Một cách để đáp ứng yêu cầu này là chia sẻ cùng một khoá chứng thực,trừ phi bạn sản xuất ít nhất 100.000 đơn vị của một SKU nhất định. Nếu có hơn 100.000 đơn vị của một SKU được sản xuất, thì bạn CÓ THỂ sử dụng một khoá khác cho mỗi 100.000 đơn vị.

Xin lưu ý rằng nếu một quá trình triển khai thiết bị đã được ra mắt trên một phiên bản Android cũ hơn, thì thiết bị đó sẽ được miễn yêu cầu phải có một kho khoá được hỗ trợ bởi một môi trường thực thi riêng biệt và hỗ trợ quy trình chứng thực khoá, trừ phi thiết bị đó khai báo tính năng android.hardware.fingerprint yêu cầu một kho khoá được hỗ trợ bởi một môi trường thực thi riêng biệt.

Khi các thiết bị Cầm tay hỗ trợ màn hình khoá bảo mật, chúng sẽ:

  • [9.11/H-1-1] PHẢI cho phép người dùng chọn thời gian chờ chuyển sang chế độ ngủ ngắn nhất, tức là thời gian chuyển đổi từ trạng thái mở khoá sang trạng thái khoá, là 15 giây trở xuống.
  • [9.11/H-1-2] PHẢI cung cấp cho người dùng khả năng ẩn thông báo và tắt tất cả các hình thức xác thực, ngoại trừ phương thức xác thực chính được mô tả trong 9.11.1 Màn hình khoá an toàn. AOSP đáp ứng yêu cầu này dưới dạng chế độ khoá.

Nếu các hoạt động triển khai Thiết bị cầm tay có nhiều người dùng và không khai báo cờ tính năng android.hardware.telephony, thì:

  • [9.5/H-2-1] PHẢI hỗ trợ hồ sơ bị hạn chế, một tính năng cho phép chủ sở hữu thiết bị quản lý người dùng bổ sung và các chức năng của họ trên thiết bị. Với hồ sơ bị hạn chế, chủ sở hữu thiết bị có thể nhanh chóng thiết lập các môi trường riêng biệt để người dùng khác làm việc, đồng thời có thể quản lý các hạn chế chi tiết hơn trong những ứng dụng có sẵn trong các môi trường đó.

Nếu các hoạt động triển khai Thiết bị cầm tay có nhiều người dùng và khai báo cờ tính năng android.hardware.telephony, thì các hoạt động đó sẽ:

  • [9.5/H-3-1] KHÔNG ĐƯỢC hỗ trợ hồ sơ bị hạn chế nhưng PHẢI phù hợp với cách triển khai các chế độ kiểm soát của AOSP để cho phép /không cho phép người dùng khác truy cập vào cuộc gọi thoại và tin nhắn SMS.

2.2.6. Khả năng tương thích của Công cụ và Tuỳ chọn cho nhà phát triển

Các cách triển khai thiết bị cầm tay (* Không áp dụng cho Máy tính bảng):

  • [6.1/H-0-1]* PHẢI hỗ trợ lệnh shell cmd testharness.

Các cách triển khai thiết bị cầm tay (* Không áp dụng cho Máy tính bảng):

  • Perfetto
    • [6.1/H-0-2]* PHẢI hiển thị một tệp nhị phân /system/bin/perfetto cho người dùng shell mà cmdline tuân thủ tài liệu perfetto.
    • [6.1/H-0-3]* Tệp nhị phân perfetto PHẢI chấp nhận dữ liệu đầu vào dưới dạng một cấu hình protobuf tuân thủ giản đồ được xác định trong tài liệu về perfetto.
    • [6.1/H-0-4]* Tệp nhị phân perfetto PHẢI ghi dưới dạng đầu ra một dấu vết protobuf tuân thủ giản đồ được xác định trong tài liệu về perfetto.
    • [6.1/H-0-5]* PHẢI cung cấp, thông qua tệp nhị phân perfetto, ít nhất là các nguồn dữ liệu được mô tả trong tài liệu về perfetto.
    • [6.1/H-0-6]* Trình nền được theo dõi perfetto PHẢI được bật theo mặc định (thuộc tính hệ thống persist.traced.enable).

2.2.7 Lớp hiệu suất nội dung nghe nhìn trên thiết bị cầm tay

Xem phần 7.11 để biết định nghĩa về lớp hiệu suất nội dung nghe nhìn.

2.2.7.1. Nội dung nghe nhìn

Nếu quá trình triển khai thiết bị cầm tay trả về android.os.Build.VERSION_CODES.R cho android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, thì quá trình này:

  • [5.1/H-1-1] PHẢI quảng cáo số lượng phiên giải mã video phần cứng tối đa có thể chạy đồng thời trong mọi tổ hợp codec thông qua các phương thức CodecCapabilities.getMaxSupportedInstances()VideoCapabilities.getSupportedPerformancePoints().
  • [5.1/H-1-2] PHẢI hỗ trợ 6 phiên bộ giải mã video phần cứng (AVC hoặc HEVC) trong mọi tổ hợp bộ mã hoá và giải mã chạy đồng thời ở độ phân giải 720p@30 khung hình/giây.
  • [5.1/H-1-3] PHẢI quảng cáo số lượng phiên bộ mã hoá video phần cứng tối đa có thể chạy đồng thời trong mọi tổ hợp codec thông qua các phương thức CodecCapabilities.getMaxSupportedInstances()VideoCapabilities.getSupportedPerformancePoints().
  • [5.1/H-1-4] PHẢI hỗ trợ 6 phiên bộ mã hoá video phần cứng (AVC hoặc HEVC) trong mọi tổ hợp bộ mã hoá và giải mã chạy đồng thời ở độ phân giải 720p@30 khung hình/giây.
  • [5.1/H-1-5] PHẢI quảng cáo số lượng phiên bộ mã hoá và giải mã video phần cứng tối đa có thể chạy đồng thời trong mọi tổ hợp codec thông qua các phương thức CodecCapabilities.getMaxSupportedInstances()VideoCapabilities.getSupportedPerformancePoints().
  • [5.1/H-1-6] PHẢI hỗ trợ 6 phiên bộ giải mã video phần cứng và bộ mã hoá video phần cứng (AVC hoặc HEVC) trong mọi tổ hợp bộ mã hoá và giải mã chạy đồng thời ở độ phân giải 720p@30 khung hình/giây.
  • [5.1/H-1-7] PHẢI có độ trễ khởi tạo bộ mã hoá và giải mã là 65 mili giây trở xuống đối với phiên mã hoá video 1080p trở xuống cho tất cả bộ mã hoá video phần cứng (ngoài bộ mã hoá và giải mã Dolby Vision) khi đang tải. Tải ở đây được xác định là một phiên mã hoá đồng thời chỉ video từ 1080p sang 720p bằng cách sử dụng codec video phần cứng cùng với quá trình khởi tạo bản ghi âm thanh và video 1080p.
  • [5.1/H-1-8] PHẢI có độ trễ khởi tạo codec là 50 mili giây trở xuống cho phiên mã hoá âm thanh có tốc độ bit từ 128 kbps trở xuống cho tất cả bộ mã hoá âm thanh khi đang tải.Tải ở đây được xác định là phiên chuyển mã chỉ có video từ 1080p sang 720p đồng thời bằng cách sử dụng codec video phần cứng cùng với quá trình khởi tạo bản ghi âm thanh và video 1080p.
  • [5.3/H-1-1] KHÔNG ĐƯỢC bỏ quá 1 khung hình trong 10 giây (tức là tỷ lệ bỏ khung hình dưới 0,333%) cho phiên video 1080p 30 khung hình/giây khi tải. Tải được xác định là một phiên chuyển mã đồng thời từ video 1080p sang 720p (chỉ video) bằng cách sử dụng bộ mã hoá và giải mã video phần cứng, cũng như một phiên phát âm thanh AAC 128 kbps.
  • [5.3/H-1-2] KHÔNG ĐƯỢC phép giảm hơn 1 khung hình trong 10 giây trong quá trình thay đổi độ phân giải video trong phiên video 30 khung hình/giây khi tải. Tải được xác định là một phiên chuyển mã chỉ video từ 1080p sang 720p đồng thời bằng cách sử dụng bộ mã hoá và giải mã video phần cứng, cũng như một phiên phát âm thanh AAC 128 Kbps.
  • [5.6/H-1-1] PHẢI có độ trễ từ thao tác nhấn đến khi phát ra âm thanh dưới 100 mili giây khi dùng bài kiểm tra từ thao tác nhấn đến khi phát ra âm thanh OboeTester hoặc bài kiểm tra từ thao tác nhấn đến khi phát ra âm thanh CTS Verifier.
2.2.7.2. Camera

Nếu quá trình triển khai thiết bị cầm tay trả về android.os.Build.VERSION_CODES.R cho android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, thì quá trình này:

  • [7.5/H-1-1] PHẢI có camera sau chính với độ phân giải ít nhất 12 megapixel, hỗ trợ quay video ở tốc độ 4k@30 khung hình/giây. Camera sau chính là camera sau có mã nhận dạng camera thấp nhất.
  • [7.5/H-1-2] PHẢI có camera trước chính với độ phân giải tối thiểu 4 megapixel, hỗ trợ quay video ở tốc độ 1080p@30 khung hình/giây. Camera mặt trước chính là camera mặt trước có mã nhận dạng camera thấp nhất.
  • [7.5/H-1-3] PHẢI hỗ trợ thuộc tính android.info.supportedHardwareLevel ở mức FULL trở lên cho camera chính phía sau và LIMITED trở lên cho camera chính phía trước.
  • [7.5/H-1-4] PHẢI hỗ trợ CameraMetadata.SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME cho cả camera chính.
  • [7.5/H-1-5] PHẢI có độ trễ chụp ảnh JPEG của camera2 < 1000 mili giây cho độ phân giải 1080p theo đo lường của CTS camera PerformanceTest trong điều kiện ánh sáng ITS (3000K) cho cả camera chính.
  • [7.5/H-1-6] PHẢI có độ trễ khởi động camera2 (mở camera đến khung hình xem trước đầu tiên) < 600 mili giây theo đo lường của CTS camera PerformanceTest trong điều kiện ánh sáng ITS (3000K) cho cả camera chính.
2.2.7.3. Phần cứng

Nếu các hoạt động triển khai Thiết bị cầm tay trả về android.os.Build.VERSION_CODES.R cho android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, thì các hoạt động đó:

  • [7.1.1.1/H-1-1] PHẢI có độ phân giải màn hình tối thiểu là 1080p.
  • [7.1.1.3/H-1-1] PHẢI có mật độ màn hình ít nhất là 400 dpi.
  • [7.6.1/H-1-1] PHẢI có bộ nhớ thực tối thiểu là 6 GB.
2.2.7.4. Hiệu suất

Nếu các hoạt động triển khai Thiết bị cầm tay trả về android.os.Build.VERSION_CODES.R cho android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, thì các hoạt động đó:

  • [8.2/H-1-1] PHẢI đảm bảo hiệu suất ghi tuần tự tối thiểu là 100 MB/giây.
  • [8.2/H-1-2] PHẢI đảm bảo hiệu suất ghi ngẫu nhiên tối thiểu là 10 MB/giây.
  • [8.2/H-1-3] PHẢI đảm bảo hiệu suất đọc tuần tự tối thiểu là 200 MB/giây.
  • [8.2/H-1-4] PHẢI đảm bảo hiệu suất đọc ngẫu nhiên tối thiểu là 25 MB/giây.

2.3. Yêu cầu đối với TV

Thiết bị Android TV là một cách triển khai thiết bị Android, đóng vai trò là giao diện giải trí để người dùng thưởng thức nội dung đa phương tiện kỹ thuật số, phim, trò chơi, ứng dụng và/hoặc truyền hình trực tiếp khi ngồi cách xa khoảng 10 feet (giao diện người dùng "ngồi tựa lưng" hoặc "10 feet").

Việc triển khai thiết bị Android được phân loại là TV nếu đáp ứng tất cả các tiêu chí sau:

  • Cung cấp một cơ chế để điều khiển từ xa giao diện người dùng được kết xuất trên màn hình có thể cách người dùng 3 mét.
  • Có màn hình hiển thị nhúng với độ dài đường chéo lớn hơn 24 inch HOẶC có cổng đầu ra video, chẳng hạn như VGA, HDMI, DisplayPort hoặc cổng không dây để hiển thị.

Các yêu cầu bổ sung trong phần còn lại của phần này dành riêng cho việc triển khai thiết bị Android Television.

2.3.1. Phần cứng

Triển khai thiết bị truyền hình:

  • [7.2.2/T-0-1] PHẢI hỗ trợ D-pad.
  • [7.2.3/T-0-1] PHẢI cung cấp các chức năng Trang chủ và Quay lại.
  • [7.2.3/T-0-2] PHẢI gửi cả sự kiện nhấn bình thường và nhấn lâu của chức năng Quay lại (KEYCODE_BACK) đến ứng dụng trên nền trước.
  • [7.2.6.1/T-0-1] PHẢI hỗ trợ bộ điều khiển trò chơi và khai báo cờ tính năng android.hardware.gamepad.
  • [7.2.7/T] PHẢI cung cấp một thiết bị điều khiển từ xa để người dùng có thể truy cập vào chế độ điều hướng không cảm ứng và chế độ nhập các phím điều hướng chính.

Nếu các thiết bị triển khai TV có con quay hồi chuyển 3 trục, thì:

  • [7.3.4/T-1-1] PHẢI có khả năng báo cáo các sự kiện với tần suất tối thiểu là 100 Hz.
  • [7.3.4/T-1-2] PHẢI có khả năng đo lường các thay đổi về hướng lên đến 1.000 độ mỗi giây.

Triển khai thiết bị truyền hình:

  • [7.4.3/T-0-1] PHẢI hỗ trợ Bluetooth và Bluetooth LE.
  • [7.6.1/T-0-1] PHẢI có ít nhất 4 GB bộ nhớ không biến động để lưu trữ dữ liệu riêng tư của ứng dụng (còn gọi là phân vùng "/data").

Nếu các thiết bị triển khai TV có cổng USB hỗ trợ chế độ máy chủ, thì:

  • [7.5.3/T-1-1] PHẢI hỗ trợ camera bên ngoài kết nối qua cổng USB này nhưng không nhất thiết phải luôn kết nối.

Nếu các hoạt động triển khai thiết bị TV là 32 bit:

  • [7.6.1/T-1-1] Bộ nhớ có sẵn cho nhân và không gian người dùng PHẢI ít nhất là 896 MB nếu sử dụng bất kỳ mật độ nào sau đây:

    • 400 dpi trở lên trên màn hình nhỏ/màn hình thường
    • xhdpi trở lên trên màn hình lớn
    • tvdpi trở lên trên màn hình cực lớn

Nếu các phương thức triển khai thiết bị TV là 64 bit:

  • [7.6.1/T-2-1] Bộ nhớ mà nhân và không gian người dùng có thể truy cập PHẢI có dung lượng tối thiểu là 1280 MB nếu dùng bất kỳ mật độ nào sau đây:

    • 400 dpi trở lên trên màn hình nhỏ/màn hình thường
    • xhdpi trở lên trên màn hình lớn
    • tvdpi trở lên trên màn hình cực lớn

Xin lưu ý rằng "bộ nhớ có sẵn cho nhân và không gian người dùng" ở trên đề cập đến dung lượng bộ nhớ được cung cấp ngoài mọi bộ nhớ đã được dành riêng cho các thành phần phần cứng như đài, video, v.v. mà không thuộc quyền kiểm soát của nhân trên các hoạt động triển khai thiết bị.

Triển khai thiết bị truyền hình:

  • [7.8.1/T] PHẢI có micrô.
  • [7.8.2/T-0-1] PHẢI có đầu ra âm thanh và khai báo android.hardware.audio.output.

2.3.2. Đa phương tiện

Việc triển khai thiết bị truyền hình PHẢI hỗ trợ các định dạng mã hoá và giải mã âm thanh sau đây, đồng thời cung cấp các định dạng này cho các ứng dụng bên thứ ba:

  • [5.1/T-0-1] Cấu hình AAC MPEG-4 (AAC LC)
  • [5.1/T-0-2] MPEG-4 HE AAC Profile (AAC+)
  • [5.1/T-0-3] AAC ELD (AAC có độ trễ thấp nâng cao)

Các chế độ triển khai thiết bị truyền hình PHẢI hỗ trợ các định dạng mã hoá video sau đây và cung cấp các định dạng này cho các ứng dụng bên thứ ba:

  • [5.2/T-0-1] H.264
  • [5.2/T-0-2] VP8

Triển khai thiết bị truyền hình:

  • [5.2.2/T-SR] RẤT NÊN hỗ trợ mã hoá H.264 cho video có độ phân giải 720p và 1080p ở tốc độ 30 khung hình/giây.

Các chế độ triển khai thiết bị truyền hình PHẢI hỗ trợ các định dạng giải mã video sau đây và cung cấp các định dạng này cho các ứng dụng bên thứ ba:

Các chế độ triển khai thiết bị truyền hình PHẢI hỗ trợ việc giải mã MPEG-2, như được trình bày chi tiết trong Mục 5.3.1, ở tốc độ khung hình video tiêu chuẩn và độ phân giải tối đa là:

  • [5.3.1/T-1-1] HD 1080p ở tốc độ 29,97 khung hình/giây với Cấu hình chính cấp cao.
  • [5.3.1/T-1-2] HD 1080i ở tốc độ 59,94 khung hình/giây với Cấu hình chính cấp cao. Chúng PHẢI khử xen kẽ video MPEG-2 xen kẽ và cung cấp video đó cho các ứng dụng bên thứ ba.

Các thiết bị truyền hình TRIỂN KHAI phải hỗ trợ việc giải mã H.264, như được nêu chi tiết trong Mục 5.3.4, ở tốc độ khung hình video tiêu chuẩn và độ phân giải lên đến và bao gồm:

  • [5.3.4/T-1-1] HD 1080p ở tốc độ 60 khung hình/giây với Cấu hình cơ sở
  • [5.3.4/T-1-2] HD 1080p ở tốc độ 60 khung hình/giây với Cấu hình chính
  • [5.3.4/T-1-3] HD 1080p ở tốc độ 60 khung hình/giây với High Profile Level 4.2

Các thiết bị truyền hình có bộ giải mã phần cứng H.265 PHẢI hỗ trợ việc giải mã H.265, như được nêu chi tiết trong Mục 5.3.5, ở tốc độ khung hình video tiêu chuẩn và độ phân giải lên đến và bao gồm:

  • [5.3.5/T-1-1] HD 1080p ở tốc độ 60 khung hình/giây với Cấu hình chính cấp 4.1

Nếu các thiết bị triển khai TV có bộ giải mã phần cứng H.265 hỗ trợ giải mã H.265 và hồ sơ giải mã UHD, thì:

  • [5.3.5/T-2-1] PHẢI hỗ trợ cấu hình giải mã UHD ở tốc độ 60 khung hình/giây với cấu hình Cấp 5 Main10 Cấp chính

Các hoạt động triển khai thiết bị truyền hình PHẢI hỗ trợ việc giải mã VP8, như được nêu chi tiết trong Mục 5.3.6, ở tốc độ khung hình video tiêu chuẩn và độ phân giải lên đến và bao gồm:

  • [5.3.6/T-1-1] Cấu hình giải mã HD 1080p ở tốc độ 60 khung hình/giây

Việc triển khai thiết bị truyền hình có bộ giải mã phần cứng VP9 PHẢI hỗ trợ việc giải mã VP9, như được nêu chi tiết trong Mục 5.3.7, ở tốc độ khung hình video tiêu chuẩn và độ phân giải lên đến và bao gồm:

  • [5.3.7/T-1-1] HD 1080p ở tốc độ 60 khung hình/giây với hồ sơ 0 (độ sâu màu 8 bit)

Nếu các thiết bị triển khai TV có bộ giải mã phần cứng VP9 hỗ trợ giải mã VP9 và hồ sơ giải mã UHD, thì các thiết bị đó:

  • [5.3.7/T-2-1] PHẢI hỗ trợ cấu hình giải mã UHD ở tốc độ 60 khung hình/giây với cấu hình 0 (độ sâu màu 8 bit).
  • [5.3.7/T-2-1] RẤT NÊN hỗ trợ cấu hình giải mã UHD ở tốc độ 60 khung hình/giây với cấu hình 2 (độ sâu màu 10 bit).

Triển khai thiết bị truyền hình:

  • [5.5/T-0-1] PHẢI hỗ trợ Âm lượng tổng của hệ thống và mức giảm âm lượng đầu ra âm thanh kỹ thuật số trên các đầu ra được hỗ trợ, ngoại trừ đầu ra truyền qua âm thanh nén (trong đó thiết bị không giải mã âm thanh).

Nếu các thiết bị triển khai TV không có màn hình tích hợp mà hỗ trợ màn hình ngoài kết nối qua HDMI, thì:

  • [5.8/T-0-1] PHẢI đặt chế độ đầu ra HDMI để chọn độ phân giải tối đa có thể được hỗ trợ với tốc độ làm mới 50 Hz hoặc 60 Hz.
  • [5.8/T-SR] RẤT NÊN cung cấp một bộ chọn tốc độ làm mới HDMI mà người dùng có thể định cấu hình.
  • [5.8] PHẢI đặt tốc độ làm mới chế độ đầu ra HDMI thành 50 Hz hoặc 60 Hz, tuỳ thuộc vào tốc độ làm mới video của khu vực mà thiết bị được bán.

Nếu các thiết bị triển khai TV không có màn hình tích hợp mà hỗ trợ màn hình ngoài kết nối qua HDMI, thì:

  • [5.8/T-1-1] PHẢI hỗ trợ HDCP 2.2.

Nếu các chế độ triển khai thiết bị truyền hình không hỗ trợ việc giải mã UHD mà hỗ trợ một màn hình ngoài kết nối qua HDMI, thì các chế độ này:

  • [5.8/T-2-1] PHẢI hỗ trợ HDCP 1.4

2.3.3. Phần mềm

Triển khai thiết bị truyền hình:

  • [3/T-0-1] PHẢI khai báo các tính năng android.software.leanbackandroid.hardware.type.television.
  • [3.2.3.1/T-0-1] PHẢI tải trước một hoặc nhiều ứng dụng hoặc thành phần dịch vụ có trình xử lý ý định, cho tất cả các mẫu bộ lọc ý định công khai do các ý định ứng dụng sau đây xác định tại đây.
  • [3.4.1/T-0-1] PHẢI cung cấp một quy trình triển khai hoàn chỉnh của API android.webkit.Webview.

Nếu các hoạt động triển khai thiết bị Android Television hỗ trợ màn hình khoá,thì:

  • [3.8.10/T-1-1] PHẢI hiển thị Thông báo trên màn hình khoá, bao gồm cả Mẫu thông báo về nội dung nghe nhìn.

Triển khai thiết bị truyền hình:

  • [3.8.14/T-SR] RẤT NÊN hỗ trợ chế độ hình trong hình (PIP) nhiều cửa sổ.
  • [3.10/T-0-1] PHẢI hỗ trợ các dịch vụ hỗ trợ tiếp cận của bên thứ ba.
  • [3.10/T-SR] NÊN CỰC KỲ khuyến khích tải trước các dịch vụ hỗ trợ tiếp cận trên thiết bị có chức năng tương đương hoặc vượt quá chức năng của các dịch vụ hỗ trợ tiếp cận Tiếp cận bằng công tắc và TalkBack (đối với các ngôn ngữ được công cụ Chuyển văn bản sang lời nói cài đặt sẵn hỗ trợ) như được cung cấp trong dự án nguồn mở TalkBack.

Nếu các chế độ triển khai thiết bị truyền hình báo cáo tính năng android.hardware.audio.output, thì:

  • [3.11/T-SR] NÊN CÓ một công cụ TTS hỗ trợ các ngôn ngữ có trên thiết bị.
  • [3.11/T-1-1] PHẢI hỗ trợ việc cài đặt các công cụ TTS của bên thứ ba.

Triển khai thiết bị truyền hình:

  • [3.12/T-0-1] PHẢI hỗ trợ TV Input Framework.

2.3.4. Hiệu suất và sức mạnh

  • [8.1/T-0-1] Độ trễ khung hình nhất quán. Độ trễ khung hình không nhất quán hoặc độ trễ khi kết xuất khung hình KHÔNG ĐƯỢC xảy ra thường xuyên hơn 5 khung hình trong một giây và NÊN dưới 1 khung hình trong một giây.
  • [8.2/T-0-1] PHẢI đảm bảo hiệu suất ghi tuần tự tối thiểu là 5 MB/giây.
  • [8.2/T-0-2] PHẢI đảm bảo hiệu suất ghi ngẫu nhiên tối thiểu là 0,5 MB/giây.
  • [8.2/T-0-3] PHẢI đảm bảo hiệu suất đọc tuần tự ít nhất là 15 MB/giây.
  • [8.2/T-0-4] PHẢI đảm bảo hiệu suất đọc ngẫu nhiên tối thiểu là 3,5 MB/giây.

Nếu các hoạt động triển khai thiết bị truyền hình có các tính năng cải thiện khả năng quản lý nguồn của thiết bị có trong AOSP hoặc mở rộng các tính năng có trong AOSP, thì:

  • [8.3/T-1-1] PHẢI cung cấp cho người dùng khả năng bật và tắt tính năng tiết kiệm pin.

Nếu các chế độ triển khai thiết bị truyền hình không có pin, thì:

Nếu các thiết bị truyền hình có pin, thì:

  • [8.3/T-1-3] PHẢI cung cấp cho người dùng khả năng hiển thị tất cả ứng dụng được miễn chế độ chờ của ứng dụng và chế độ tiết kiệm pin khi ở trạng thái không hoạt động.

Triển khai thiết bị truyền hình:

  • [8.4/T-0-1] PHẢI cung cấp một hồ sơ năng lượng cho từng thành phần, xác định giá trị tiêu thụ hiện tại cho từng thành phần phần cứng và mức tiêu hao pin gần đúng do các thành phần gây ra theo thời gian như được ghi lại trong trang web Dự án nguồn mở Android.
  • [8.4/T-0-2] PHẢI báo cáo tất cả các giá trị tiêu thụ điện năng theo đơn vị miliampe giờ (mAh).
  • [8.4/T-0-3] PHẢI báo cáo mức tiêu thụ điện năng của CPU theo UID của từng quy trình. Dự án nguồn mở Android đáp ứng yêu cầu này thông qua việc triển khai mô-đun nhân uid_cputime.
  • [8.4/T] NÊN được gán cho chính thành phần phần cứng nếu không thể gán mức sử dụng điện của thành phần phần cứng cho một ứng dụng.
  • [8.4/T-0-4] PHẢI cung cấp thông tin về mức tiêu thụ điện năng này thông qua lệnh shell adb shell dumpsys batterystats cho nhà phát triển ứng dụng.

2.3.5. Mô hình bảo mật

Triển khai thiết bị truyền hình:

  • [9.11/T-0-1] PHẢI sao lưu việc triển khai kho khoá bằng một môi trường thực thi riêng biệt.
  • [9.11/T-0-2] PHẢI có các phương thức triển khai thuật toán mã hoá RSA, AES, ECDSA và HMAC, cũng như các hàm băm MD5, SHA1 và SHA-2 để hỗ trợ đúng các thuật toán được hệ thống Kho khoá Android hỗ trợ trong một khu vực được cách ly an toàn với mã đang chạy trên nhân và ở trên. Tính năng cách ly an toàn PHẢI chặn tất cả các cơ chế tiềm ẩn mà mã kernel hoặc không gian người dùng có thể truy cập vào trạng thái nội bộ của môi trường biệt lập, bao gồm cả DMA. Dự án nguồn mở Android (AOSP) đáp ứng yêu cầu này bằng cách sử dụng chế độ triển khai Trusty, nhưng một giải pháp khác dựa trên ARM TrustZone hoặc một chế độ triển khai bảo mật đã được bên thứ ba xem xét về khả năng cách ly dựa trên siêu giám sát viên thích hợp cũng là các lựa chọn thay thế.
  • [9.11/T-0-3] PHẢI thực hiện quy trình xác thực màn hình khoá trong môi trường thực thi biệt lập và chỉ khi thành công, mới cho phép sử dụng các khoá liên kết với quy trình xác thực. Thông tin đăng nhập trên màn hình khoá PHẢI được lưu trữ theo cách chỉ cho phép môi trường thực thi biệt lập thực hiện quy trình xác thực trên màn hình khoá. Dự án nguồn mở Android ở nguồn trên cung cấp Lớp trừu tượng phần cứng (HAL) Gatekeeper và Trusty. Bạn có thể dùng các lớp này để đáp ứng yêu cầu này.
  • [9.11/T-0-4] PHẢI hỗ trợ quy trình chứng thực khoá trong đó khoá ký chứng thực được bảo vệ bằng phần cứng bảo mật và quy trình ký được thực hiện trong phần cứng bảo mật. Bạn PHẢI chia sẻ các khoá ký chứng thực trên một số lượng thiết bị đủ lớn để ngăn các khoá này được dùng làm giá trị nhận dạng thiết bị. Một cách để đáp ứng yêu cầu này là chia sẻ cùng một khoá chứng thực,trừ phi bạn sản xuất ít nhất 100.000 đơn vị của một SKU nhất định. Nếu có hơn 100.000 đơn vị của một SKU được sản xuất, thì bạn CÓ THỂ sử dụng một khoá khác cho mỗi 100.000 đơn vị.

Xin lưu ý rằng nếu một quá trình triển khai thiết bị đã được ra mắt trên một phiên bản Android cũ hơn, thì thiết bị đó sẽ được miễn yêu cầu phải có một kho khoá được hỗ trợ bởi một môi trường thực thi riêng biệt và hỗ trợ quy trình chứng thực khoá, trừ phi thiết bị đó khai báo tính năng android.hardware.fingerprint yêu cầu một kho khoá được hỗ trợ bởi một môi trường thực thi riêng biệt.

Nếu các chế độ triển khai thiết bị truyền hình hỗ trợ màn hình khoá bảo mật, thì:

  • [9.11/T-1-1] PHẢI cho phép người dùng chọn Thời gian chờ ở chế độ ngủ để chuyển từ trạng thái mở khoá sang trạng thái khoá, với thời gian chờ tối thiểu được phép là 15 giây trở xuống.

Nếu các hoạt động triển khai thiết bị truyền hình có nhiều người dùng và không khai báo cờ tính năng android.hardware.telephony, thì:

  • [9.5/T-2-1] PHẢI hỗ trợ hồ sơ bị hạn chế, một tính năng cho phép chủ sở hữu thiết bị quản lý người dùng bổ sung và các chức năng của họ trên thiết bị. Với hồ sơ bị hạn chế, chủ sở hữu thiết bị có thể nhanh chóng thiết lập các môi trường riêng biệt để người dùng khác làm việc, đồng thời có thể quản lý các hạn chế chi tiết hơn trong những ứng dụng có sẵn trong các môi trường đó.

Nếu các hoạt động triển khai thiết bị truyền hình có nhiều người dùng và khai báo cờ tính năng android.hardware.telephony, thì các hoạt động đó sẽ:

  • [9.5/T-3-1] KHÔNG ĐƯỢC hỗ trợ hồ sơ bị hạn chế nhưng PHẢI phù hợp với cách triển khai chế độ kiểm soát của AOSP để cho phép /không cho phép người dùng khác truy cập vào cuộc gọi thoại và tin nhắn SMS.

2.3.6. Khả năng tương thích của Công cụ và Tuỳ chọn cho nhà phát triển

Triển khai thiết bị truyền hình:

  • Perfetto
    • [6.1/T-0-1] PHẢI hiển thị một tệp nhị phân /system/bin/perfetto cho người dùng shell mà cmdline tuân thủ tài liệu perfetto.
    • [6.1/T-0-2] Tệp nhị phân perfetto PHẢI chấp nhận dữ liệu đầu vào dưới dạng một cấu hình protobuf tuân thủ giản đồ được xác định trong tài liệu về perfetto.
    • [6.1/T-0-3] Tệp nhị phân perfetto PHẢI ghi dưới dạng đầu ra một dấu vết protobuf tuân thủ giản đồ được xác định trong tài liệu về perfetto.
    • [6.1/T-0-4] PHẢI cung cấp (thông qua tệp nhị phân perfetto) ít nhất các nguồn dữ liệu được mô tả trong tài liệu về perfetto.

2.4. Yêu cầu đối với đồng hồ

Thiết bị Android Watch là một cách triển khai thiết bị Android được thiết kế để đeo trên cơ thể, chẳng hạn như trên cổ tay.

Các hoạt động triển khai thiết bị Android được phân loại là Đồng hồ nếu đáp ứng tất cả các tiêu chí sau:

  • Có màn hình với chiều dài đường chéo thực tế trong khoảng từ 1,1 đến 2,5 inch.
  • Có cơ chế để đeo trên cơ thể.

Các yêu cầu bổ sung trong phần còn lại của phần này dành riêng cho việc triển khai thiết bị Android Watch.

2.4.1. Phần cứng

Triển khai thiết bị xem:

  • [7.1.1.1/W-0-1] PHẢI có màn hình với kích thước đường chéo thực tế trong khoảng từ 1,1 đến 2,5 inch.

  • [7.2.3/W-0-1] PHẢI cung cấp chức năng Trang chủ cho người dùng và chức năng Quay lại, trừ trường hợp ở chế độ UI_MODE_TYPE_WATCH.

  • [7.2.4/W-0-1] PHẢI hỗ trợ phương thức nhập bằng màn hình cảm ứng.

  • [7.3.1/W-SR] RẤT NÊN có gia tốc kế 3 trục.

Nếu các hoạt động triển khai thiết bị Watch có bộ nhận GPS/GNSS và báo cáo khả năng cho các ứng dụng thông qua cờ tính năng android.hardware.location.gps, thì các hoạt động này:

  • [7.3.3/W-1-1] PHẢI báo cáo các phép đo GNSS ngay khi tìm thấy, ngay cả khi vị trí được tính toán từ GPS/GNSS chưa được báo cáo.
  • [7.3.3/W-1-2] PHẢI báo cáo tốc độ giả và phạm vi giả của GNSS. Trong điều kiện không bị che khuất sau khi xác định vị trí, khi đứng yên hoặc di chuyển với gia tốc dưới 0,2 mét trên giây bình phương, các thông tin này phải đủ để tính toán vị trí trong vòng 20 mét và tốc độ trong vòng 0,2 mét trên giây, ít nhất 95% thời gian.

Nếu các thiết bị Watch có con quay hồi chuyển 3 trục, thì:

  • [7.3.4/W-2-1] PHẢI có khả năng đo lường các thay đổi về hướng lên đến 1.000 độ mỗi giây.

Triển khai thiết bị xem:

  • [7.4.3/W-0-1] PHẢI hỗ trợ Bluetooth.

  • [7.6.1/W-0-1] PHẢI có ít nhất 1 GB bộ nhớ không biến động để lưu trữ dữ liệu riêng tư của ứng dụng (còn gọi là phân vùng "/data").

  • [7.6.1/W-0-2] PHẢI có ít nhất 416 MB bộ nhớ dành cho nhân và không gian người dùng.

  • [7.8.1/W-0-1] PHẢI có micrô.

  • [7.8.2/W] CÓ THỂ có đầu ra âm thanh.

2.4.2. Đa phương tiện

Không có yêu cầu bổ sung.

2.4.3. Phần mềm

Triển khai thiết bị xem:

  • [3/W-0-1] PHẢI khai báo tính năng android.hardware.type.watch.
  • [3/W-0-2] PHẢI hỗ trợ uiMode = UI_MODE_TYPE_WATCH.
  • [3.2.3.1/W-0-1] PHẢI tải trước một hoặc nhiều ứng dụng hoặc thành phần dịch vụ bằng một trình xử lý ý định, cho tất cả các mẫu bộ lọc ý định công khai do các ý định ứng dụng sau đây xác định tại đây.

Triển khai thiết bị xem:

Theo dõi quá trình triển khai thiết bị đồng hồ khai báo cờ tính năng android.hardware.audio.output:

  • [3.10/W-1-1] PHẢI hỗ trợ các dịch vụ hỗ trợ tiếp cận của bên thứ ba.
  • [3.10/W-SR] NÊN CỰC KỲ khuyến khích việc tải trước các dịch vụ hỗ trợ tiếp cận trên thiết bị có chức năng tương đương hoặc vượt quá chức năng của các dịch vụ hỗ trợ tiếp cận Tiếp cận bằng công tắc và TalkBack (đối với các ngôn ngữ được công cụ Chuyển văn bản sang lời nói cài đặt sẵn hỗ trợ) như được cung cấp trong dự án nguồn mở talkback.

Nếu các triển khai thiết bị Đồng hồ báo cáo tính năng android.hardware.audio.output, thì:

  • [3.11/W-SR] NÊN CÓ một công cụ TTS hỗ trợ các ngôn ngữ có trên thiết bị.

  • [3.11/W-0-1] PHẢI hỗ trợ việc cài đặt các công cụ TTS của bên thứ ba.

2.4.4. Hiệu suất và sức mạnh

Nếu các hoạt động triển khai thiết bị Watch có các tính năng cải thiện khả năng quản lý nguồn của thiết bị có trong AOSP hoặc mở rộng các tính năng có trong AOSP, thì:

  • [8.3/W-SR] RẤT NÊN cung cấp cho người dùng khả năng hiển thị tất cả ứng dụng được miễn chế độ Chờ của ứng dụng và chế độ tiết kiệm pin Doze.
  • [8.3/W-SR] RẤT NÊN cung cấp cho người dùng khả năng bật và tắt tính năng trình tiết kiệm pin.

Triển khai thiết bị xem:

  • [8.4/W-0-1] PHẢI cung cấp một hồ sơ sử dụng điện cho từng thành phần, xác định giá trị mức tiêu thụ hiện tại cho từng thành phần phần cứng và mức tiêu hao pin ước tính do các thành phần gây ra theo thời gian như được ghi lại trong trang web Dự án nguồn mở Android.
  • [8.4/W-0-2] PHẢI báo cáo tất cả các giá trị mức tiêu thụ điện năng theo đơn vị miliampe giờ (mAh).
  • [8.4/W-0-3] PHẢI báo cáo mức tiêu thụ điện năng của CPU theo UID của từng quy trình. Dự án nguồn mở Android đáp ứng yêu cầu này thông qua việc triển khai mô-đun nhân uid_cputime.
  • [8.4/W-0-4] PHẢI cung cấp thông tin về mức tiêu thụ điện này thông qua câu lệnh shell adb shell dumpsys batterystats cho nhà phát triển ứng dụng.
  • [8.4/W] CẦN được phân bổ cho chính thành phần phần cứng nếu không thể phân bổ mức sử dụng điện của thành phần phần cứng cho một ứng dụng.

2.4.5. Mô hình bảo mật

Nếu các hoạt động triển khai thiết bị Watch có nhiều người dùng và không khai báo cờ tính năng android.hardware.telephony, thì các hoạt động này sẽ:

  • [9.5/W-1-1] PHẢI hỗ trợ hồ sơ bị hạn chế, một tính năng cho phép chủ sở hữu thiết bị quản lý người dùng bổ sung và các chức năng của họ trên thiết bị. Với hồ sơ bị hạn chế, chủ sở hữu thiết bị có thể nhanh chóng thiết lập các môi trường riêng biệt để người dùng khác làm việc, đồng thời có thể quản lý các hạn chế chi tiết hơn trong những ứng dụng có sẵn trong các môi trường đó.

Nếu các hoạt động triển khai thiết bị Watch có nhiều người dùng và khai báo cờ tính năng android.hardware.telephony, thì các hoạt động đó:

  • [9.5/W-2-1] KHÔNG ĐƯỢC hỗ trợ hồ sơ bị hạn chế nhưng PHẢI phù hợp với cách triển khai các chế độ kiểm soát của AOSP để cho phép /không cho phép người dùng khác truy cập vào cuộc gọi thoại và tin nhắn SMS.

2.5. Yêu cầu đối với ô tô

Việc triển khai Android Automotive đề cập đến đầu phát trung tâm của ô tô chạy Android làm hệ điều hành cho một phần hoặc toàn bộ hệ thống và/hoặc chức năng thông tin giải trí.

Việc triển khai thiết bị Android được phân loại là Ô tô nếu chúng khai báo tính năng android.hardware.type.automotive hoặc đáp ứng tất cả các tiêu chí sau.

  • Được nhúng vào hoặc có thể cắm vào một phương tiện di chuyển.
  • Sử dụng màn hình ở hàng ghế lái làm màn hình chính.

Các yêu cầu bổ sung trong phần còn lại của phần này dành riêng cho việc triển khai thiết bị Android Automotive.

2.5.1. Phần cứng

Triển khai thiết bị trên ô tô:

  • [7.1.1.1/A-0-1] PHẢI có màn hình có kích thước đường chéo vật lý ít nhất là 6 inch.
  • [7.1.1.1/A-0-2] PHẢI có bố cục kích thước màn hình tối thiểu là 750 dp x 480 dp.

  • [7.2.3/A-0-1] PHẢI cung cấp chức năng Trang chủ và CÓ THỂ cung cấp chức năng Quay lại và Gần đây.

  • [7.2.3/A-0-2] PHẢI gửi cả sự kiện nhấn bình thường và nhấn lâu của chức năng Quay lại (KEYCODE_BACK) đến ứng dụng trên nền trước.
  • [7.3/A-0-1] PHẢI triển khai và báo cáo GEAR_SELECTION, NIGHT_MODE, PERF_VEHICLE_SPEEDPARKING_BRAKE_ON.
  • [7.3/A-0-2] Giá trị của cờ NIGHT_MODE PHẢI nhất quán với chế độ ngày/đêm của trang tổng quan và NÊN dựa trên dữ liệu đầu vào của cảm biến ánh sáng xung quanh. Cảm biến ánh sáng xung quanh cơ bản CÓ THỂ giống với Máy đo quang.
  • [7.3/A-0-3] PHẢI cung cấp trường thông tin bổ sung về cảm biến TYPE_SENSOR_PLACEMENT trong SensorAdditionalInfo cho mọi cảm biến được cung cấp.
  • [7.3/A-0-1] CÓ THỂ ước tính Vị trí bằng cách kết hợp GPS/GNSS với các cảm biến bổ sung. Nếu Vị trí được tính toán theo phương pháp ước tính vị trí, thì bạn NÊN triển khai và báo cáo các loại Cảm biến và/hoặc Mã nhận dạng thuộc tính của xe tương ứng đã sử dụng.
  • [7.3/A-0-2] Vị trí được yêu cầu thông qua LocationManager#requestLocationUpdates() KHÔNG ĐƯỢC khớp với bản đồ.

Nếu các chế độ triển khai thiết bị ô tô có gia tốc kế 3 trục, thì:

Nếu các chế độ triển khai thiết bị ô tô có con quay hồi chuyển 3 trục, thì:

  • [7.3.4/A-2-1] PHẢI có khả năng báo cáo các sự kiện với tần suất ít nhất là 100 Hz.
  • [7.3.4/A-2-2] CŨNG PHẢI triển khai cảm biến TYPE_GYROSCOPE_UNCALIBRATED.
  • [7.3.4/A-2-3] PHẢI có khả năng đo lường các thay đổi về hướng lên đến 250 độ mỗi giây.
  • [7.3.4/A-SR] RẤT NÊN định cấu hình phạm vi đo của con quay hồi chuyển thành +/-250 dps để tối đa hoá độ phân giải có thể

Nếu các chế độ triển khai thiết bị trên ô tô có bộ nhận GPS/GNSS nhưng không có khả năng kết nối dữ liệu dựa trên mạng di động, thì:

  • [7.3.3/A-3-1] PHẢI xác định vị trí ngay lần đầu tiên bật bộ nhận GPS/GNSS hoặc sau 4 ngày trở lên trong vòng 60 giây.
  • [7.3.3/A-3-2] PHẢI đáp ứng tiêu chí về thời gian xác định vị trí lần đầu tiên như mô tả trong 7.3.3/C-1-27.3.3/C-1-6 cho tất cả các yêu cầu khác về vị trí (tức là những yêu cầu không phải là lần đầu tiên hoặc sau 4 ngày trở lên). Yêu cầu 7.3.3/C-1-2 thường được đáp ứng trong các xe không có khả năng kết nối dữ liệu dựa trên mạng di động, bằng cách sử dụng các dự đoán quỹ đạo GNSS được tính toán trên máy thu, hoặc sử dụng vị trí đã biết gần đây nhất của xe cùng với khả năng tính toán ước chừng trong ít nhất 60 giây với độ chính xác về vị trí đáp ứng 7.3.3/C-1-3, hoặc kết hợp cả hai.

Triển khai thiết bị trên ô tô:

  • [7.4.3/A-0-1] PHẢI hỗ trợ Bluetooth và NÊN hỗ trợ Bluetooth LE.
  • [7.4.3/A-0-2] Các hoạt động triển khai Android Automotive PHẢI hỗ trợ các cấu hình Bluetooth sau:
    • Gọi điện thoại qua Cấu hình rảnh tay (HFP).
    • Phát nội dung nghe nhìn qua Cấu hình phân phối âm thanh (A2DP).
    • Điều khiển chế độ phát nội dung nghe nhìn thông qua Cấu hình điều khiển từ xa (AVRCP).
    • Chia sẻ danh bạ bằng Cấu hình truy cập danh bạ (PBAP).
  • [7.4.3/A-SR] RẤT NÊN hỗ trợ Message Access Profile (MAP).

  • [7.4.5/A] PHẢI hỗ trợ kết nối dữ liệu dựa trên mạng di động.

  • [7.4.5/A] CÓ THỂ sử dụng hằng số NetworkCapabilities#NET_CAPABILITY_OEM_PAID System API cho những mạng mà ứng dụng hệ thống cần có.

Camera quan sát bên ngoài là camera chụp ảnh cảnh vật bên ngoài thiết bị triển khai, chẳng hạn như camera hành trình.

Triển khai thiết bị trên ô tô:

  • NÊN có một hoặc nhiều camera quan sát bên ngoài.

Nếu các chế độ triển khai thiết bị trên ô tô có camera quan sát bên ngoài, thì đối với camera như vậy, các chế độ triển khai này sẽ:

  • [7.5/A-1-1] KHÔNG ĐƯỢC có camera quan sát bên ngoài có thể truy cập thông qua API Camera của Android, trừ phi các camera đó tuân thủ các yêu cầu cốt lõi về camera.
  • [7.5/A-SR] KHÔNG NÊN xoay hoặc phản chiếu theo chiều ngang bản xem trước của camera.
  • [7.5.5/A-SR] NÊN được định hướng sao cho chiều dài của camera phù hợp với đường chân trời.
  • [7.5/A-SR] NÊN CÓ độ phân giải tối thiểu là 1,3 megapixel.
  • NÊN có phần cứng lấy nét cố định hoặc EDOF (trường sâu mở rộng).
  • NÊN hỗ trợ khung đồng bộ hoá Android.
  • CÓ THỂ có tính năng tự động lấy nét bằng phần cứng hoặc phần mềm được triển khai trong trình điều khiển camera.

Triển khai thiết bị trên ô tô:

  • [7.6.1/A-0-1] PHẢI có ít nhất 4 GB bộ nhớ không biến động để lưu trữ dữ liệu riêng tư của ứng dụng (còn gọi là phân vùng "/data").

  • [7.6.1/A] NÊN định dạng phân vùng dữ liệu để cải thiện hiệu suất và tuổi thọ của bộ nhớ flash, chẳng hạn như sử dụng hệ thống tệp f2fs.

Nếu các chế độ triển khai thiết bị ô tô cung cấp bộ nhớ ngoài dùng chung thông qua một phần bộ nhớ trong không tháo rời được, thì các chế độ triển khai đó:

  • [7.6.1/A-SR] RẤT NÊN dùng để giảm mức hao tổn I/O đối với các thao tác được thực hiện trên bộ nhớ ngoài, chẳng hạn như bằng cách sử dụng SDCardFS.

Nếu các hoạt động triển khai thiết bị trên ô tô là 32 bit:

  • [7.6.1/A-1-1] Bộ nhớ mà nhân và không gian người dùng có thể truy cập PHẢI có dung lượng ít nhất là 512 MB nếu dùng bất kỳ mật độ nào sau đây:

    • 280 dpi trở xuống trên màn hình nhỏ/bình thường
    • ldpi hoặc thấp hơn trên màn hình cực lớn
    • mdpi hoặc thấp hơn trên màn hình lớn
  • [7.6.1/A-1-2] Bộ nhớ có sẵn cho nhân và không gian người dùng PHẢI ít nhất là 608 MB nếu dùng bất kỳ mật độ nào sau đây:

    • xhdpi trở lên trên màn hình nhỏ/màn hình thường
    • hdpi trở lên trên màn hình lớn
    • mdpi trở lên trên màn hình cực lớn
  • [7.6.1/A-1-3] Bộ nhớ mà nhân và không gian người dùng có thể truy cập PHẢI có dung lượng ít nhất là 896 MB nếu dùng bất kỳ mật độ nào sau đây:

    • 400 dpi trở lên trên màn hình nhỏ/màn hình thường
    • xhdpi trở lên trên màn hình lớn
    • tvdpi trở lên trên màn hình cực lớn
  • [7.6.1/A-1-4] Bộ nhớ có sẵn cho nhân và không gian người dùng PHẢI ít nhất là 1344 MB nếu dùng bất kỳ mật độ nào sau đây:

    • 560 dpi trở lên trên màn hình nhỏ/bình thường
    • 400 dpi trở lên trên màn hình lớn
    • xhdpi trở lên trên màn hình cực lớn

Nếu các hoạt động triển khai thiết bị ô tô là 64 bit:

  • [7.6.1/A-2-1] Bộ nhớ mà nhân và không gian người dùng có thể truy cập PHẢI ít nhất là 816 MB nếu dùng bất kỳ mật độ nào sau đây:

    • 280 dpi trở xuống trên màn hình nhỏ/bình thường
    • ldpi hoặc thấp hơn trên màn hình cực lớn
    • mdpi hoặc thấp hơn trên màn hình lớn
  • [7.6.1/A-2-2] Bộ nhớ có sẵn cho nhân và không gian người dùng PHẢI ít nhất là 944 MB nếu dùng bất kỳ mật độ nào sau đây:

    • xhdpi trở lên trên màn hình nhỏ/màn hình thường
    • hdpi trở lên trên màn hình lớn
    • mdpi trở lên trên màn hình cực lớn
  • [7.6.1/A-2-3] Bộ nhớ có sẵn cho nhân và không gian người dùng PHẢI ít nhất là 1280 MB nếu sử dụng bất kỳ mật độ nào sau đây:

    • 400 dpi trở lên trên màn hình nhỏ/màn hình thường
    • xhdpi trở lên trên màn hình lớn
    • tvdpi trở lên trên màn hình cực lớn
  • [7.6.1/A-2-4] Bộ nhớ có sẵn cho nhân và không gian người dùng PHẢI ít nhất là 1824 MB nếu dùng bất kỳ mật độ nào sau đây:

    • 560 dpi trở lên trên màn hình nhỏ/bình thường
    • 400 dpi trở lên trên màn hình lớn
    • xhdpi trở lên trên màn hình cực lớn

Xin lưu ý rằng "bộ nhớ có sẵn cho nhân và không gian người dùng" ở trên đề cập đến dung lượng bộ nhớ được cung cấp ngoài mọi bộ nhớ đã được dành riêng cho các thành phần phần cứng như đài, video, v.v. mà không thuộc quyền kiểm soát của nhân trên các hoạt động triển khai thiết bị.

Triển khai thiết bị trên ô tô:

  • [7.7.1/A] PHẢI có một cổng USB hỗ trợ chế độ thiết bị ngoại vi.

Triển khai thiết bị trên ô tô:

  • [7.8.1/A-0-1] PHẢI có micrô.

Triển khai thiết bị trên ô tô:

  • [7.8.2/A-0-1] PHẢI có đầu ra âm thanh và khai báo android.hardware.audio.output.

2.5.2. Đa phương tiện

Việc triển khai thiết bị ô tô PHẢI hỗ trợ các định dạng mã hoá và giải mã âm thanh sau đây, đồng thời cung cấp các định dạng này cho các ứng dụng bên thứ ba:

  • [5.1/A-0-1] Cấu hình AAC MPEG-4 (AAC LC)
  • [5.1/A-0-2] Cấu hình MPEG-4 HE AAC (AAC+)
  • [5.1/A-0-3] AAC ELD (AAC có độ trễ thấp nâng cao)

Việc triển khai thiết bị trên ô tô PHẢI hỗ trợ các định dạng mã hoá video sau đây và cung cấp các định dạng này cho các ứng dụng bên thứ ba:

  • [5.2/A-0-1] H.264 AVC
  • [5.2/A-0-2] VP8

Việc triển khai thiết bị ô tô PHẢI hỗ trợ các định dạng giải mã video sau đây và cung cấp các định dạng này cho các ứng dụng bên thứ ba:

  • [5.3/A-0-1] H.264 AVC
  • [5.3/A-0-2] MPEG-4 SP
  • [5.3/A-0-3] VP8
  • [5.3/A-0-4] VP9

Bạn NÊN hỗ trợ các hoạt động giải mã video sau đây khi triển khai thiết bị ô tô:

  • [5.3/A-SR] H.265 HEVC

2.5.3. Phần mềm

Triển khai thiết bị trên ô tô:

  • [3/A-0-1] PHẢI khai báo tính năng android.hardware.type.automotive.

  • [3/A-0-2] PHẢI hỗ trợ uiMode = UI_MODE_TYPE_CAR.

  • [3/A-0-3] PHẢI hỗ trợ tất cả các API công khai trong không gian tên android.car.*.

Nếu các hoạt động triển khai thiết bị Automotive cung cấp một API độc quyền bằng cách sử dụng android.car.CarPropertyManager với android.car.VehiclePropertyIds, thì các hoạt động triển khai đó:

  • [3/A-1-1] KHÔNG ĐƯỢC gắn đặc quyền cho việc sử dụng các thuộc tính này của ứng dụng hệ thống hoặc ngăn các ứng dụng bên thứ ba sử dụng các thuộc tính này.
  • [3/A-1-2] KHÔNG ĐƯỢC sao chép một thuộc tính của xe đã có trong SDK.

Triển khai thiết bị trên ô tô:

  • [3.2.1/A-0-1] PHẢI hỗ trợ và thực thi tất cả các hằng số quyền theo tài liệu của trang tham chiếu Quyền cho ô tô.

  • [3.2.3.1/A-0-1] PHẢI tải trước một hoặc nhiều ứng dụng hoặc thành phần dịch vụ bằng một trình xử lý ý định, cho tất cả các mẫu bộ lọc ý định công khai do các ý định ứng dụng sau đây xác định tại đây.

  • [3.4.1/A-0-1] PHẢI cung cấp một quy trình triển khai hoàn chỉnh của API android.webkit.Webview.

  • [3.8.3/A-0-1] PHẢI hiển thị những thông báo sử dụng API Notification.CarExtender khi được các ứng dụng bên thứ ba yêu cầu.

  • [3.8.4/A-SR] Rất nên triển khai một trợ lý trên thiết bị để xử lý thao tác Trợ lý.

Nếu các thiết bị triển khai trong ngành ô tô có nút nhấn để nói, thì:

  • [3.8.4/A-1-1] PHẢI sử dụng thao tác nhấn nhanh nút nhấn để nói làm thao tác tương tác được chỉ định để khởi chạy ứng dụng hỗ trợ do người dùng chọn, tức là ứng dụng triển khai VoiceInteractionService.

Triển khai thiết bị trên ô tô:

  • [3.8.3.1/A-0-1] PHẢI hiển thị chính xác các tài nguyên theo mô tả trong tài liệu về SDK Notifications on Automotive OS.
  • [3.8.3.1/A-0-2] PHẢI hiển thị các thao tác PLAY (PHÁT) và MUTE (TẮT TIẾNG) cho thông báo thay vì các thao tác được cung cấp thông qua Notification.Builder.addAction()
  • [3.8.3.1/A] NÊN hạn chế việc sử dụng các tác vụ quản lý đa dạng như chế độ kiểm soát theo từng kênh thông báo. CÓ THỂ sử dụng thành phần hỗ trợ giao diện người dùng cho mỗi ứng dụng để giảm số lượng chế độ kiểm soát.

Triển khai thiết bị trên ô tô:

Nếu các chế độ triển khai thiết bị Ô tô có một ứng dụng trình chạy mặc định, thì:

Triển khai thiết bị trên ô tô:

  • [3.8/A] CÓ THỂ hạn chế các yêu cầu của ứng dụng để chuyển sang chế độ toàn màn hình như mô tả trong immersive documentation.
  • [3.8/A] CÓ THỂ luôn hiển thị thanh trạng thái và thanh điều hướng.
  • [3.8/A] CÓ THỂ hạn chế các yêu cầu của ứng dụng thay đổi màu sắc phía sau các phần tử giao diện người dùng hệ thống để đảm bảo các phần tử đó luôn hiển thị rõ ràng.

2.5.4. Hiệu suất và sức mạnh

Triển khai thiết bị trên ô tô:

  • [8.2/A-0-1] PHẢI báo cáo số byte đã đọc và ghi vào bộ nhớ không biến đổi theo UID của mỗi quy trình để nhà phát triển có thể xem được số liệu thống kê thông qua System API android.car.storagemonitoring.CarStorageMonitoringManager. Dự án nguồn mở Android đáp ứng yêu cầu này thông qua mô-đun nhân uid_sys_stats.
  • [8.3/A-1-3] PHẢI hỗ trợ Chế độ nhà để xe.
  • [8.3/A] PHẢI ở Chế độ gara ít nhất 15 phút sau mỗi lần lái xe, trừ phi:
    • Pin đã hết.
    • Không có công việc nào ở trạng thái rảnh được lên lịch.
    • Người lái xe thoát khỏi Chế độ nhà để xe.
  • [8.4/A-0-1] PHẢI cung cấp một hồ sơ sử dụng điện cho từng thành phần, xác định giá trị mức tiêu thụ hiện tại cho từng thành phần phần cứng và mức tiêu hao pin ước tính do các thành phần gây ra theo thời gian như được ghi lại trong trang web Dự án nguồn mở Android.
  • [8.4/A-0-2] PHẢI báo cáo tất cả các giá trị tiêu thụ điện năng theo đơn vị miliampe giờ (mAh).
  • [8.4/A-0-3] PHẢI báo cáo mức tiêu thụ điện năng của CPU theo UID của từng quy trình. Dự án nguồn mở Android đáp ứng yêu cầu này thông qua việc triển khai mô-đun nhân uid_cputime.
  • [8.4/A] NÊN được gán cho chính thành phần phần cứng nếu không thể gán mức sử dụng điện của thành phần phần cứng cho một ứng dụng.
  • [8.4/A-0-4] PHẢI cung cấp thông tin về mức tiêu thụ điện này thông qua lệnh shell adb shell dumpsys batterystats cho nhà phát triển ứng dụng.

2.5.5. Mô hình bảo mật

Nếu các chế độ triển khai thiết bị ô tô hỗ trợ nhiều người dùng, thì:

Triển khai thiết bị trên ô tô:

  • [9.11/A-0-1] PHẢI sao lưu việc triển khai kho khoá bằng một môi trường thực thi riêng biệt.
  • [9.11/A-0-2] PHẢI triển khai các thuật toán mã hoá RSA, AES, ECDSA và HMAC cũng như các hàm băm MD5, SHA1 và SHA-2 để hỗ trợ đúng các thuật toán được hệ thống Kho khoá Android hỗ trợ trong một khu vực được cách ly an toàn với mã đang chạy trên nhân trở lên. Tính năng cách ly an toàn PHẢI chặn tất cả các cơ chế tiềm ẩn mà mã kernel hoặc không gian người dùng có thể truy cập vào trạng thái nội bộ của môi trường biệt lập, bao gồm cả DMA. Dự án nguồn mở Android (AOSP) đáp ứng yêu cầu này bằng cách sử dụng chế độ triển khai Trusty, nhưng một giải pháp khác dựa trên ARM TrustZone hoặc một chế độ triển khai bảo mật đã được bên thứ ba xem xét về khả năng cách ly dựa trên siêu giám sát viên thích hợp cũng là các lựa chọn thay thế.
  • [9.11/A-0-3] PHẢI thực hiện quy trình xác thực màn hình khoá trong môi trường thực thi biệt lập và chỉ khi thành công, mới cho phép sử dụng các khoá liên kết với quy trình xác thực. Thông tin đăng nhập trên màn hình khoá PHẢI được lưu trữ theo cách chỉ cho phép môi trường thực thi biệt lập thực hiện quy trình xác thực trên màn hình khoá. Dự án nguồn mở Android ở nguồn trên cung cấp Lớp trừu tượng phần cứng (HAL) Gatekeeper và Trusty. Bạn có thể dùng các lớp này để đáp ứng yêu cầu này.
  • [9.11/A-0-4] PHẢI hỗ trợ quy trình chứng thực khoá trong đó khoá ký chứng thực được bảo vệ bằng phần cứng bảo mật và quy trình ký được thực hiện trong phần cứng bảo mật. Bạn PHẢI chia sẻ các khoá ký chứng thực trên một số lượng thiết bị đủ lớn để ngăn các khoá này được dùng làm giá trị nhận dạng thiết bị. Một cách để đáp ứng yêu cầu này là chia sẻ cùng một khoá chứng thực,trừ phi bạn sản xuất ít nhất 100.000 đơn vị của một SKU nhất định. Nếu có hơn 100.000 đơn vị của một SKU được sản xuất, thì bạn CÓ THỂ sử dụng một khoá khác cho mỗi 100.000 đơn vị.

Xin lưu ý rằng nếu một quá trình triển khai thiết bị đã được ra mắt trên một phiên bản Android cũ hơn, thì thiết bị đó sẽ được miễn yêu cầu phải có một kho khoá được hỗ trợ bởi một môi trường thực thi biệt lập và hỗ trợ quy trình chứng thực khoá, trừ phi thiết bị đó khai báo tính năng android.hardware.fingerprint yêu cầu một kho khoá được hỗ trợ bởi một môi trường thực thi biệt lập.

Triển khai thiết bị trên ô tô:

  • [9.14/A-0-1] PHẢI kiểm soát các thông báo từ các hệ thống con của khung Android trong xe, ví dụ: thêm các loại thông báo và nguồn thông báo được phép vào danh sách cho phép.
  • [9.14/A-0-2] PHẢI giám sát để chống lại các cuộc tấn công từ chối dịch vụ từ khung Android hoặc các ứng dụng bên thứ ba. Điều này giúp ngăn chặn phần mềm độc hại làm tràn lưu lượng truy cập trên mạng lưới xe, có thể dẫn đến các hệ thống con của xe bị trục trặc.

2.5.6. Khả năng tương thích của Công cụ và Tuỳ chọn cho nhà phát triển

Triển khai thiết bị trên ô tô:

  • Perfetto
    • [6.1/A-0-1] PHẢI cung cấp một tệp nhị phân /system/bin/perfetto cho người dùng shell mà cmdline tuân thủ tài liệu về perfetto.
    • [6.1/A-0-2] Tệp nhị phân perfetto PHẢI chấp nhận dữ liệu đầu vào dưới dạng một cấu hình protobuf tuân thủ giản đồ được xác định trong tài liệu về perfetto.
    • [6.1/A-0-3] Tệp nhị phân perfetto PHẢI ghi dưới dạng đầu ra một dấu vết protobuf tuân thủ giản đồ được xác định trong tài liệu về perfetto.
    • [6.1/A-0-4] PHẢI cung cấp, thông qua tệp nhị phân perfetto, ít nhất là các nguồn dữ liệu được mô tả trong tài liệu về perfetto.

2.6. Yêu cầu đối với máy tính bảng

Thiết bị Máy tính bảng Android là một cách triển khai thiết bị Android thường đáp ứng tất cả các tiêu chí sau:

  • Được sử dụng bằng cách cầm bằng cả hai tay.
  • Không có cấu hình dạng gập hoặc có thể chuyển đổi.
  • Các chế độ triển khai bàn phím thực được dùng với thiết bị kết nối bằng một phương thức kết nối tiêu chuẩn (ví dụ: USB, Bluetooth).
  • Có nguồn điện giúp di chuyển, chẳng hạn như pin.
  • Có kích thước màn hình đường chéo thực từ 7 đến 18 inch.

Việc triển khai thiết bị máy tính bảng có các yêu cầu tương tự như việc triển khai thiết bị cầm tay. Các trường hợp ngoại lệ được biểu thị bằng dấu * trong phần đó và được ghi chú để tham khảo trong phần này.

2.6.1. Phần cứng

Kích thước màn hình

  • [7.1.1.1/Tab-0-1] PHẢI có màn hình từ 7 đến 18 inch.

Con quay hồi chuyển

Nếu các hoạt động triển khai thiết bị Máy tính bảng có con quay hồi chuyển 3 trục, thì:

  • [7.3.4/Bảng 1-1] PHẢI có khả năng đo lường các thay đổi về hướng lên đến 1.000 độ mỗi giây.

Bộ nhớ và dung lượng lưu trữ tối thiểu (Mục 7.6.1)

Mật độ màn hình được liệt kê cho màn hình nhỏ/màn hình thường trong các yêu cầu đối với thiết bị cầm tay không áp dụng cho máy tính bảng.

Chế độ thiết bị ngoại vi USB (Mục 7.7.1)

Nếu các hoạt động triển khai thiết bị máy tính bảng có cổng USB hỗ trợ chế độ thiết bị ngoại vi, thì:

  • [7.7.1/Tab] CÓ THỂ triển khai API Phụ kiện mở Android (AOA).

Chế độ thực tế ảo (Mục 7.9.1)

Thực tế ảo hiệu suất cao (Mục 7.9.2)

Các yêu cầu về thực tế ảo không áp dụng cho máy tính bảng.

2.6.2. Mô hình bảo mật

Khoá và thông tin xác thực (Mục 9.11)

Tham khảo Mục [9.11].

Nếu các hoạt động triển khai thiết bị Máy tính bảng có nhiều người dùng và không khai báo cờ tính năng android.hardware.telephony, thì các hoạt động này sẽ:

  • [9.5/T-1-1] PHẢI hỗ trợ hồ sơ bị hạn chế, một tính năng cho phép chủ sở hữu thiết bị quản lý người dùng bổ sung và các chức năng của họ trên thiết bị. Với hồ sơ bị hạn chế, chủ sở hữu thiết bị có thể nhanh chóng thiết lập các môi trường riêng biệt để người dùng khác làm việc, đồng thời có thể quản lý các hạn chế chi tiết hơn trong những ứng dụng có sẵn trong các môi trường đó.

Nếu các hoạt động triển khai thiết bị Máy tính bảng có nhiều người dùng và khai báo cờ tính năng android.hardware.telephony, thì các hoạt động này sẽ:

  • [9.5/T-2-1] KHÔNG ĐƯỢC hỗ trợ hồ sơ bị hạn chế nhưng PHẢI phù hợp với cách triển khai các chế độ kiểm soát của AOSP để cho phép /không cho phép người dùng khác truy cập vào cuộc gọi thoại và tin nhắn SMS.

2.6.2. Phần mềm

  • [3.2.3.1/Tab-0-1] PHẢI tải trước một hoặc nhiều ứng dụng hoặc thành phần dịch vụ bằng một trình xử lý ý định, cho tất cả các mẫu bộ lọc ý định công khai do các ý định ứng dụng sau đây xác định tại đây.

3. Phần mềm

3.1. Khả năng tương thích của API được quản lý

Môi trường thực thi mã byte Dalvik được quản lý là phương tiện chính cho các ứng dụng Android. Giao diện lập trình ứng dụng (API) Android là tập hợp các giao diện nền tảng Android được cung cấp cho các ứng dụng chạy trong môi trường thời gian chạy được quản lý.

Cách triển khai thiết bị:

  • [C-0-1] PHẢI cung cấp các phương thức triển khai hoàn chỉnh (bao gồm cả mọi hành vi được ghi lại) của mọi API được ghi lại do Android SDK hoặc mọi API được trang trí bằng điểm đánh dấu "@SystemApi" trong mã nguồn Android ngược dòng cung cấp.

  • [C-0-2] PHẢI hỗ trợ/giữ lại tất cả các lớp, phương thức và phần tử được liên kết được đánh dấu bằng chú thích TestApi (@TestApi).

  • [C-0-3] KHÔNG ĐƯỢC bỏ qua bất kỳ API được quản lý nào, thay đổi giao diện hoặc chữ ký API, đi lệch khỏi hành vi được ghi lại hoặc không bao gồm các thao tác không có hiệu lực, trừ phi được phép cụ thể theo Định nghĩa về khả năng tương thích này.

  • [C-0-4] VẪN PHẢI giữ các API hiện có và hoạt động theo cách hợp lý, ngay cả khi một số tính năng phần cứng mà Android có API bị bỏ qua. Hãy xem mục 7 để biết các yêu cầu cụ thể cho trường hợp này.

  • [C-0-5] KHÔNG ĐƯỢC cho phép các ứng dụng bên thứ ba sử dụng giao diện không phải SDK. Đây là những giao diện được xác định là phương thức và trường trong các gói ngôn ngữ Java nằm trong đường dẫn lớp khởi động trong AOSP và không thuộc SDK công khai. Điều này bao gồm các API được trang trí bằng chú giải @hide nhưng không có @SystemAPI, như mô tả trong tài liệu SDK và các thành phần lớp riêng tư và chỉ dành cho gói.

  • [C-0-6] PHẢI đi kèm với từng giao diện không phải SDK trong cùng danh sách bị hạn chế như được cung cấp thông qua các cờ danh sách tạm thời và danh sách chặn trong đường dẫn prebuilts/runtime/appcompat/hiddenapi-flags.csv cho nhánh cấp độ API thích hợp trong AOSP.

  • [C-0-7] PHẢI hỗ trợ cơ chế cập nhật động cấu hình đã ký để xoá các giao diện không phải SDK khỏi danh sách bị hạn chế bằng cách nhúng cấu hình đã ký vào mọi APK, sử dụng các khoá công khai hiện có trong AOSP.

    Tuy nhiên, họ:

    • CÓ THỂ, nếu một API ẩn không có hoặc được triển khai khác trên quá trình triển khai thiết bị, hãy di chuyển API ẩn đó vào danh sách từ chối hoặc bỏ qua API đó trong tất cả các danh sách bị hạn chế (tức là xám nhạt, xám đậm, đen).
    • CÓ THỂ, nếu một API ẩn chưa có trong AOSP, hãy thêm API ẩn đó vào bất kỳ danh sách bị hạn chế nào (tức là danh sách màu xám nhạt, xám đậm, đen).

3.1.1. Tiện ích Android

Android hỗ trợ việc mở rộng khu vực API được quản lý của một cấp độ API cụ thể bằng cách cập nhật phiên bản tiện ích cho cấp độ API đó. API android.os.ext.SdkExtensions.getExtensionVersion(int apiLevel) sẽ trả về phiên bản tiện ích của apiLevel đã cung cấp, nếu có tiện ích cho cấp độ API đó.

Cách triển khai thiết bị Android:

  • [C-0-1] PHẢI tải trước việc triển khai AOSP của cả thư viện dùng chung ExtShared và dịch vụ ExtServices có phiên bản lớn hơn hoặc bằng phiên bản tối thiểu được phép cho mỗi cấp độ API. Ví dụ: Các thiết bị triển khai Android 7.0, chạy API cấp 24 PHẢI có ít nhất phiên bản 1.

  • [C-0-2] CHỈ ĐƯỢC PHÉP trả về số phiên bản tiện ích hợp lệ do AOSP xác định.

  • [C-0-3] PHẢI hỗ trợ tất cả các API do các phiên bản tiện ích mà android.os.ext.SdkExtensions.getExtensionVersion(int apiLevel) trả về theo cách tương tự như các API được quản lý khác được hỗ trợ, tuân theo các yêu cầu trong mục 3.1.

3.1.2. Thư viện Android

Do Apache HTTP client không được dùng nữa, nên các phương thức triển khai thiết bị:

  • [C-0-1] KHÔNG ĐƯỢC đặt thư viện org.apache.http.legacy trong bootclasspath.
  • [C-0-2] PHẢI thêm thư viện org.apache.http.legacy vào đường dẫn lớp ứng dụng chỉ khi ứng dụng đáp ứng một trong các điều kiện sau:
    • Nhắm đến API cấp 28 trở xuống.
    • Khai báo trong tệp kê khai rằng ứng dụng cần thư viện này bằng cách đặt thuộc tính android:name của <uses-library> thành org.apache.http.legacy.

Việc triển khai AOSP đáp ứng các yêu cầu này.

3.2. Khả năng tương thích API linh hoạt

Ngoài các API được quản lý trong mục 3.1, Android cũng bao gồm một API "mềm" chỉ dành cho thời gian chạy quan trọng, dưới dạng những thứ như ý định, quyền và các khía cạnh tương tự của ứng dụng Android không thể thực thi tại thời điểm biên dịch ứng dụng.

3.2.1. Quyền

  • [C-0-1] Nhà triển khai thiết bị PHẢI hỗ trợ và thực thi tất cả các hằng số quyền theo tài liệu của Trang tham chiếu về quyền. Xin lưu ý rằng mục 9 liệt kê các yêu cầu bổ sung liên quan đến mô hình bảo mật của Android.

3.2.2. Tham số bản dựng

Các API Android bao gồm một số hằng số trên lớp android.os.Build nhằm mô tả thiết bị hiện tại.

  • [C-0-1] Để cung cấp các giá trị nhất quán, có ý nghĩa trên các quy trình triển khai thiết bị, bảng bên dưới bao gồm các hạn chế bổ sung về định dạng của những giá trị mà các quy trình triển khai thiết bị PHẢI tuân thủ.
Tham số Chi tiết
VERSION.RELEASE Phiên bản của hệ thống Android hiện đang thực thi, ở định dạng dễ đọc. Trường này PHẢI có một trong các giá trị chuỗi được xác định trong 11.
VERSION.SDK Phiên bản của hệ thống Android hiện đang thực thi, ở định dạng mà mã ứng dụng bên thứ ba có thể truy cập. Đối với Android 11, trường này PHẢI có giá trị số nguyên là 11_INT.
VERSION.SDK_INT Phiên bản của hệ thống Android hiện đang thực thi, ở định dạng mà mã ứng dụng bên thứ ba có thể truy cập. Đối với Android 11, trường này PHẢI có giá trị số nguyên là 11_INT.
VERSION.INCREMENTAL Giá trị do người triển khai thiết bị chọn, chỉ định bản dựng cụ thể của hệ thống Android hiện đang thực thi, ở định dạng mà con người có thể đọc được. Bạn KHÔNG ĐƯỢC PHÉP sử dụng lại giá trị này cho các bản dựng khác nhau được cung cấp cho người dùng cuối. Một trường hợp sử dụng điển hình của trường này là cho biết số bản dựng hoặc giá trị nhận dạng thay đổi kiểm soát nguồn nào được dùng để tạo bản dựng. Giá trị của trường này PHẢI mã hoá được dưới dạng ASCII 7 bit có thể in và khớp với biểu thức chính quy "^[^ :\/~]+$".
BẢNG Giá trị do người triển khai thiết bị chọn để xác định phần cứng nội bộ cụ thể mà thiết bị sử dụng, ở định dạng mà con người có thể đọc được. Một trường hợp có thể sử dụng trường này là để cho biết phiên bản cụ thể của bảng mạch cấp nguồn cho thiết bị. Giá trị của trường này PHẢI được mã hoá dưới dạng ASCII 7 bit và khớp với biểu thức chính quy "^[a-zA-Z0-9_-]+$".
THƯƠNG HIỆU Giá trị phản ánh tên thương hiệu được liên kết với thiết bị mà người dùng cuối biết đến. PHẢI ở định dạng mà con người có thể đọc được và NÊN đại diện cho nhà sản xuất thiết bị hoặc thương hiệu của công ty mà thiết bị được tiếp thị. Giá trị của trường này PHẢI được mã hoá dưới dạng ASCII 7 bit và khớp với biểu thức chính quy "^[a-zA-Z0-9_-]+$".
SUPPORTED_ABIS Tên của tập lệnh (loại CPU + quy ước ABI) của mã gốc. Xem mục 3.3. Khả năng tương thích của API gốc.
SUPPORTED_32_BIT_ABIS Tên của tập lệnh (loại CPU + quy ước ABI) của mã gốc. Xem mục 3.3. Khả năng tương thích của API gốc.
SUPPORTED_64_BIT_ABIS Tên của tập lệnh thứ hai (loại CPU + quy ước ABI) của mã gốc. Xem mục 3.3. Khả năng tương thích của API gốc.
CPU_ABI Tên của tập lệnh (loại CPU + quy ước ABI) của mã gốc. Xem mục 3.3. Khả năng tương thích của API gốc.
CPU_ABI2 Tên của tập lệnh thứ hai (loại CPU + quy ước ABI) của mã gốc. Xem mục 3.3. Khả năng tương thích của API gốc.
THIẾT BỊ Giá trị do nhà triển khai thiết bị chọn, chứa tên phát triển hoặc tên mã xác định cấu hình của các tính năng phần cứng và thiết kế công nghiệp của thiết bị. Giá trị của trường này PHẢI mã hoá được dưới dạng ASCII 7 bit và khớp với biểu thức chính quy "^[a-zA-Z0-9_-]+$". Tên thiết bị này KHÔNG ĐƯỢC thay đổi trong suốt thời gian sử dụng sản phẩm.
FINGERPRINT Một chuỗi xác định duy nhất bản dựng này. Nội dung này PHẢI ở dạng mà con người có thể đọc được. Bạn PHẢI tuân theo mẫu này:

$(BRAND)/$(PRODUCT)/
    $(DEVICE):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)

Ví dụ:

acme/myproduct/
    mydevice:11/LMYXX/3359:userdebug/test-keys

Dấu vân tay KHÔNG ĐƯỢC chứa ký tự khoảng trắng. Giá trị của trường này PHẢI mã hoá được dưới dạng ASCII 7 bit.

PHẦN CỨNG Tên của phần cứng (từ dòng lệnh của nhân hoặc /proc). Nội dung này PHẢI ở dạng mà con người có thể đọc được. Giá trị của trường này PHẢI được mã hoá dưới dạng ASCII 7 bit và khớp với biểu thức chính quy "^[a-zA-Z0-9_-]+$".
HOST Một chuỗi nhận dạng duy nhất máy chủ mà bản dựng được tạo trên đó, ở định dạng mà con người có thể đọc được. Không có yêu cầu về định dạng cụ thể của trường này, ngoại trừ việc trường này KHÔNG ĐƯỢC là giá trị rỗng hoặc chuỗi trống ("").
ID Giá trị nhận dạng do nhà triển khai thiết bị chọn để tham chiếu đến một bản phát hành cụ thể, ở định dạng mà con người có thể đọc được. Trường này có thể giống với android.os.Build.VERSION.INCREMENTAL, nhưng PHẢI là một giá trị đủ ý nghĩa để người dùng cuối phân biệt giữa các bản dựng phần mềm. Giá trị của trường này PHẢI được mã hoá dưới dạng ASCII 7 bit và khớp với biểu thức chính quy "^[a-zA-Z0-9._-]+$".
NHÀ SẢN XUẤT Tên thương mại của Nhà sản xuất thiết bị gốc (OEM) của sản phẩm. Không có yêu cầu nào về định dạng cụ thể của trường này, ngoại trừ việc trường này KHÔNG ĐƯỢC là giá trị rỗng hoặc chuỗi trống (""). Trường này KHÔNG ĐƯỢC thay đổi trong suốt thời gian tồn tại của sản phẩm.
KIỂU MÁY Giá trị do người triển khai thiết bị chọn, chứa tên của thiết bị mà người dùng cuối biết. Đây PHẢI là tên mà thiết bị được tiếp thị và bán cho người dùng cuối. Không có yêu cầu nào về định dạng cụ thể của trường này, ngoại trừ việc trường này KHÔNG ĐƯỢC là giá trị rỗng hoặc chuỗi trống (""). Trường này KHÔNG ĐƯỢC thay đổi trong suốt thời gian tồn tại của sản phẩm.
SẢN PHẨM Giá trị do nhà triển khai thiết bị chọn, chứa tên phát triển hoặc tên mã của sản phẩm cụ thể (SKU) PHẢI là duy nhất trong cùng một thương hiệu. PHẢI là nội dung mà con người có thể đọc được, nhưng không nhất thiết phải dành cho người dùng cuối xem. Giá trị của trường này PHẢI được mã hoá dưới dạng ASCII 7 bit và khớp với biểu thức chính quy "^[a-zA-Z0-9_-]+$". Tên sản phẩm này KHÔNG ĐƯỢC thay đổi trong suốt thời gian tồn tại của sản phẩm.
SERIAL PHẢI trả về "UNKNOWN".
THẺ TỪ KHOÁ Danh sách các thẻ do người triển khai thiết bị chọn, được phân tách bằng dấu phẩy để phân biệt rõ hơn bản dựng. Các thẻ PHẢI mã hoá được dưới dạng ASCII 7 bit và khớp với biểu thức chính quy "^[a-zA-Z0-9._-]+" và PHẢI có một trong các giá trị tương ứng với 3 cấu hình ký điển hình của nền tảng Android: release-keys, dev-keys và test-keys.
THỜI GIAN Giá trị biểu thị dấu thời gian của thời điểm bản dựng xảy ra.
LOẠI Giá trị do người triển khai thiết bị chọn, chỉ định cấu hình thời gian chạy của bản dựng. Trường này PHẢI có một trong các giá trị tương ứng với 3 cấu hình thời gian chạy Android điển hình: user, userdebug hoặc eng.
NGƯỜI DÙNG Tên hoặc mã nhận dạng người dùng của người dùng (hoặc người dùng tự động) đã tạo bản dựng. Không có yêu cầu về định dạng cụ thể của trường này, ngoại trừ việc trường này KHÔNG ĐƯỢC là giá trị rỗng hoặc chuỗi trống ("").
VERSION.SECURITY_PATCH Giá trị cho biết cấp bản vá bảo mật của bản dựng. Bạn PHẢI cho biết rằng bản dựng không gặp phải bất kỳ vấn đề nào được mô tả trong Bản tin công khai về bảo mật Android được chỉ định. Giá trị này PHẢI ở định dạng [YYYY-MM-DD], khớp với một chuỗi được xác định trong Bản tin công khai về bảo mật Android hoặc trong Thông báo bảo mật của Android, ví dụ: "2015-11-01".
VERSION.BASE_OS Một giá trị đại diện cho tham số FINGERPRINT của bản dựng. Bản dựng này giống hệt bản dựng khác, ngoại trừ các bản vá được cung cấp trong Bản tin bảo mật công khai của Android. Ứng dụng PHẢI báo cáo giá trị chính xác và nếu không có bản dựng nào như vậy, hãy báo cáo một chuỗi trống ("").
BOOTLOADER Giá trị do người triển khai thiết bị chọn để xác định phiên bản trình tải khởi động nội bộ cụ thể được dùng trong thiết bị, ở định dạng mà con người có thể đọc được. Giá trị của trường này PHẢI được mã hoá dưới dạng ASCII 7 bit và khớp với biểu thức chính quy "^[a-zA-Z0-9._-]+$".
getRadioVersion() PHẢI (là hoặc trả về) một giá trị do nhà triển khai thiết bị chọn để xác định phiên bản đài/modem nội bộ cụ thể được dùng trong thiết bị, ở định dạng đọc được bằng mắt thường. Nếu không có đài/modem nội bộ, thiết bị PHẢI trả về giá trị NULL. Giá trị của trường này PHẢI được mã hoá dưới dạng ASCII 7 bit và khớp với biểu thức chính quy "^[a-zA-Z0-9._-,]+$".
getSerial() PHẢI (là hoặc trả về) một số sê-ri phần cứng. Số này PHẢI có sẵn và là duy nhất trên các thiết bị có cùng MODEL và MANUFACTURER. Giá trị của trường này PHẢI được mã hoá dưới dạng ASCII 7 bit và khớp với biểu thức chính quy "^[a-zA-Z0-9._-,]+$".

3.2.3. Khả năng tương thích về ý định

3.2.3.1. Ý định phổ biến của ứng dụng

Ý định của Android cho phép các thành phần ứng dụng yêu cầu chức năng từ các thành phần khác của Android. Dự án nguồn mở Android bao gồm một danh sách các ứng dụng triển khai một số mẫu ý định để thực hiện các thao tác phổ biến.

Cách triển khai thiết bị:

  • [C-SR] RẤT NÊN tải trước một hoặc nhiều ứng dụng hoặc thành phần dịch vụ bằng một trình xử lý ý định, cho tất cả các mẫu bộ lọc ý định công khai do các ý định ứng dụng sau đây xác định tại đây và cung cấp khả năng thực hiện, tức là đáp ứng kỳ vọng của nhà phát triển đối với các ý định ứng dụng phổ biến này như mô tả trong SDK.

Vui lòng tham khảo Mục 2 để biết các ý định bắt buộc của ứng dụng cho từng loại thiết bị.

3.2.3.2. Giải quyết ý định
  • [C-0-1] Vì Android là một nền tảng có thể mở rộng, nên các hoạt động triển khai thiết bị PHẢI cho phép các ứng dụng bên thứ ba ghi đè từng mẫu ý định được tham chiếu trong mục 3.2.3.1, ngoại trừ phần Cài đặt. Theo mặc định, phương thức triển khai nguồn mở Android ở thượng nguồn cho phép điều này.

  • [C-0-2] Nhà triển khai thiết bị KHÔNG ĐƯỢC gắn các đặc quyền đặc biệt cho việc sử dụng các mẫu ý định này của ứng dụng hệ thống, hoặc ngăn các ứng dụng bên thứ ba liên kết và kiểm soát các mẫu này. Quy định cấm này bao gồm nhưng không giới hạn ở việc tắt giao diện người dùng "Chooser" (Trình chọn). Giao diện này cho phép người dùng chọn giữa nhiều ứng dụng xử lý cùng một mẫu ý định.

  • [C-0-3] Các hoạt động triển khai thiết bị PHẢI cung cấp giao diện người dùng để người dùng sửa đổi hoạt động mặc định cho các ý định.

  • Tuy nhiên, các hoạt động triển khai thiết bị CÓ THỂ cung cấp các hoạt động mặc định cho các mẫu URI cụ thể (ví dụ: http://play.google.com) khi hoạt động mặc định cung cấp một thuộc tính cụ thể hơn cho URI dữ liệu. Ví dụ: mẫu bộ lọc ý định chỉ định URI dữ liệu "http://www.android.com" cụ thể hơn mẫu ý định cốt lõi của trình duyệt cho "http://".

Android cũng có một cơ chế để các ứng dụng bên thứ ba khai báo hành vi liên kết ứng dụng mặc định có thẩm quyền cho một số loại ý định URI web. Khi các khai báo có thẩm quyền như vậy được xác định trong các mẫu bộ lọc ý định của ứng dụng, việc triển khai thiết bị sẽ:

  • [C-0-4] PHẢI cố gắng xác thực mọi bộ lọc ý định bằng cách thực hiện các bước xác thực được xác định trong quy cách Digital Asset Links (Đường liên kết đến tài sản kỹ thuật số) do Trình quản lý gói triển khai trong Dự án nguồn mở Android ngược dòng.
  • [C-0-5] PHẢI cố gắng xác thực các bộ lọc ý định trong quá trình cài đặt ứng dụng và đặt tất cả các bộ lọc ý định URI đã xác thực thành công làm trình xử lý ứng dụng mặc định cho URI của chúng.
  • CÓ THỂ đặt các bộ lọc ý định URI cụ thể làm trình xử lý ứng dụng mặc định cho URI của chúng, nếu được xác minh thành công nhưng các bộ lọc URI đề xuất khác không xác minh được. Nếu một quy trình triển khai thiết bị thực hiện việc này, thì quy trình đó PHẢI cung cấp cho người dùng các chế độ ghi đè mẫu thích hợp cho mỗi URI trong trình đơn cài đặt.
  • PHẢI cung cấp cho người dùng chế độ kiểm soát Đường liên kết đến ứng dụng cho từng ứng dụng trong phần Cài đặt như sau:
    • [C-0-6] Người dùng PHẢI có thể ghi đè toàn bộ hành vi mặc định của đường liên kết đến ứng dụng để ứng dụng: luôn mở, luôn hỏi hoặc không bao giờ mở, hành vi này phải áp dụng cho tất cả các bộ lọc ý định URI đề xuất một cách bình đẳng.
    • [C-0-7] Người dùng PHẢI có thể xem danh sách các bộ lọc ý định URI đề xuất.
    • Quá trình triển khai thiết bị CÓ THỂ cho phép người dùng ghi đè các bộ lọc ý định URI ứng cử viên cụ thể đã được xác minh thành công, trên cơ sở từng bộ lọc ý định.
    • [C-0-8] Việc triển khai thiết bị PHẢI cho phép người dùng xem và ghi đè các bộ lọc ý định URI đề xuất cụ thể nếu việc triển khai thiết bị cho phép một số bộ lọc ý định URI đề xuất vượt qua quy trình xác minh trong khi một số bộ lọc khác có thể không vượt qua được.
3.2.3.3. Không gian tên của ý định
  • [C-0-1] Các cách triển khai thiết bị KHÔNG ĐƯỢC chứa bất kỳ thành phần Android nào tuân theo bất kỳ mẫu ý định mới hoặc mẫu ý định truyền tin nào bằng cách sử dụng ACTION, CATEGORY hoặc chuỗi khoá khác trong không gian tên android. hoặc com.android..
  • [C-0-2] Nhà triển khai thiết bị KHÔNG ĐƯỢC đưa bất kỳ thành phần Android nào tuân theo ý định mới hoặc mẫu ý định truyền tin nào bằng cách sử dụng ACTION, CATEGORY hoặc chuỗi khoá khác trong không gian gói thuộc về một tổ chức khác.
  • [C-0-3] Nhà triển khai thiết bị KHÔNG ĐƯỢC sửa đổi hoặc mở rộng bất kỳ mẫu ý định nào được liệt kê trong mục 3.2.3.1.
  • Các hoạt động triển khai thiết bị CÓ THỂ bao gồm các mẫu ý định bằng cách sử dụng không gian tên được liên kết rõ ràng và hiển nhiên với tổ chức của riêng chúng. Lệnh cấm này tương tự như lệnh cấm được quy định cho các lớp ngôn ngữ Java trong mục 3.6.
3.2.3.4. Ý định truyền tin

Các ứng dụng bên thứ ba dựa vào nền tảng này để truyền một số ý định nhất định nhằm thông báo cho chúng về những thay đổi trong môi trường phần cứng hoặc phần mềm.

Cách triển khai thiết bị:

  • [C-0-1] PHẢI truyền các ý định truyền tin công khai được liệt kê tại đây để phản hồi các sự kiện hệ thống thích hợp như mô tả trong tài liệu SDK. Xin lưu ý rằng yêu cầu này không mâu thuẫn với mục 3.5 vì hạn chế đối với các ứng dụng chạy ở chế độ nền cũng được mô tả trong tài liệu về SDK. Ngoài ra, một số ý định truyền tin nhất định phụ thuộc vào sự hỗ trợ của phần cứng. Nếu thiết bị hỗ trợ phần cứng cần thiết, thì thiết bị PHẢI truyền tin các ý định và cung cấp hành vi phù hợp với tài liệu về SDK.
3.2.3.5. Ý định có điều kiện của ứng dụng

Android có các chế độ cài đặt giúp người dùng dễ dàng chọn ứng dụng mặc định, chẳng hạn như cho Màn hình chính hoặc SMS.

Nếu có thể, các hoạt động triển khai thiết bị PHẢI cung cấp một trình đơn cài đặt tương tự và tương thích với mẫu bộ lọc ý định cũng như các phương thức API được mô tả trong tài liệu SDK như bên dưới.

Nếu các hoạt động triển khai thiết bị báo cáo android.software.home_screen, thì:

  • [C-1-1] PHẢI tuân thủ ý định android.settings.HOME_SETTINGS để hiện trình đơn cài đặt ứng dụng mặc định cho Màn hình chính.

Nếu các hoạt động triển khai thiết bị báo cáo android.hardware.telephony, thì:

Nếu các hoạt động triển khai thiết bị báo cáo android.hardware.nfc.hce, thì:

  • [C-3-1] PHẢI tuân theo ý định android.settings.NFC_PAYMENT_SETTINGS để hiện một trình đơn cài đặt ứng dụng mặc định cho tính năng Thanh toán không tiếp xúc.
  • [C-3-2] PHẢI tuân theo ý định android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT để hiện một hoạt động mở hộp thoại yêu cầu người dùng thay đổi dịch vụ mô phỏng thẻ mặc định cho một danh mục nhất định như mô tả trong SDK.

Nếu các hoạt động triển khai thiết bị báo cáo android.hardware.nfc, thì:

Nếu các phương thức triển khai thiết bị hỗ trợ VoiceInteractionService và có nhiều ứng dụng sử dụng API này được cài đặt cùng một lúc, thì:

Nếu các hoạt động triển khai thiết bị báo cáo android.hardware.bluetooth, thì:

Nếu các hoạt động triển khai thiết bị hỗ trợ tính năng Không làm phiền, thì:

  • [C-6-1] PHẢI triển khai một hoạt động phản hồi ý định ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS. Đối với các hoạt động triển khai có UI_MODE_TYPE_NORMAL, đây PHẢI là một hoạt động mà người dùng có thể cấp hoặc từ chối quyền truy cập của ứng dụng vào các cấu hình chính sách Không làm phiền.

Nếu các chế độ triển khai thiết bị cho phép người dùng sử dụng phương thức nhập của bên thứ ba trên thiết bị, thì:

  • [C-7-1] PHẢI cung cấp một cơ chế mà người dùng có thể truy cập để thêm và định cấu hình phương thức nhập của bên thứ ba để phản hồi ý định android.settings.INPUT_METHOD_SETTINGS.

Nếu các chế độ triển khai thiết bị hỗ trợ dịch vụ trợ năng của bên thứ ba, thì:

  • [C-8-1] PHẢI tuân thủ ý định android.settings.ACCESSIBILITY_SETTINGS để cung cấp một cơ chế mà người dùng có thể truy cập để bật và tắt các dịch vụ hỗ trợ tiếp cận của bên thứ ba cùng với các dịch vụ hỗ trợ tiếp cận được tải sẵn.

Nếu các hoạt động triển khai thiết bị có hỗ trợ Wi-Fi Easy Connect và cung cấp chức năng này cho các ứng dụng bên thứ ba, thì các hoạt động triển khai đó:

Nếu triển khai chế độ tiết kiệm dữ liệu, thì các thiết bị: * [C-10-1] PHẢI cung cấp một giao diện người dùng trong phần cài đặt, xử lý ý định Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS, cho phép người dùng thêm hoặc xoá ứng dụng khỏi danh sách cho phép.

Nếu các hoạt động triển khai thiết bị không cung cấp chế độ trình tiết kiệm dữ liệu, thì:

Nếu các hoạt động triển khai thiết bị khai báo việc hỗ trợ camera thông qua android.hardware.camera.any, thì:

Nếu các hoạt động triển khai thiết bị báo cáo android.software.device_admin, thì:

Nếu các chế độ triển khai thiết bị khai báo cờ tính năng android.software.autofill, thì các chế độ này:

  • [C-14-1] PHẢI triển khai đầy đủ các API AutofillServiceAutofillManager, đồng thời tuân thủ ý định android.settings.REQUEST_SET_AUTOFILL_SERVICE để hiện trình đơn cài đặt ứng dụng mặc định nhằm bật và tắt tính năng tự động điền, cũng như thay đổi dịch vụ tự động điền mặc định cho người dùng.

Nếu các hoạt động triển khai thiết bị có một ứng dụng được cài đặt sẵn hoặc muốn cho phép các ứng dụng bên thứ ba truy cập vào số liệu thống kê về mức sử dụng, thì các hoạt động triển khai đó:

  • [C-SR] RẤT NÊN cung cấp cơ chế mà người dùng có thể truy cập để cấp hoặc thu hồi quyền truy cập vào số liệu thống kê về việc sử dụng nhằm phản hồi ý định android.settings.ACTION_USAGE_ACCESS_SETTINGS cho những ứng dụng khai báo quyền android.permission.PACKAGE_USAGE_STATS.

Nếu các hoạt động triển khai thiết bị dự định không cho phép bất kỳ ứng dụng nào (kể cả ứng dụng cài đặt sẵn) truy cập vào số liệu thống kê về mức sử dụng, thì các hoạt động triển khai đó:

  • [C-15-1] VẪN PHẢI có một hoạt động xử lý mẫu ý định android.settings.ACTION_USAGE_ACCESS_SETTINGS nhưng PHẢI triển khai hoạt động đó dưới dạng một thao tác không có hiệu lực, tức là có hành vi tương đương như khi người dùng bị từ chối quyền truy cập.

Nếu các hoạt động triển khai thiết bị báo cáo tính năng android.hardware.audio.output, thì:

  • [C-SR] Bạn nên tuân thủ các ý định android.intent.action.TTS_SERVICE, android.speech.tts.engine.INSTALL_TTS_DATA và android.speech.tts.engine.GET_SAMPLE_TEXT. Các ý định này có một hoạt động để cung cấp thông tin thực hiện cho các ý định này như mô tả trong SDK tại đây.

Android hỗ trợ trình bảo vệ màn hình tương tác, trước đây được gọi là Chế độ hiển thị. Trình bảo vệ màn hình cho phép người dùng tương tác với các ứng dụng khi một thiết bị được kết nối với nguồn điện ở trạng thái rảnh hoặc được cắm vào đế sạc trên bàn. Triển khai thiết bị:

  • NÊN hỗ trợ trình bảo vệ màn hình và cung cấp một lựa chọn cài đặt để người dùng định cấu hình trình bảo vệ màn hình để phản hồi ý định android.settings.DREAM_SETTINGS.

3.2.4. Hoạt động trên màn hình phụ/nhiều màn hình

Nếu các hoạt động triển khai thiết bị cho phép chạy Hoạt động Android thông thường trên nhiều màn hình, thì các hoạt động này:

  • [C-1-1] PHẢI đặt cờ tính năng android.software.activities_on_secondary_displays.
  • [C-1-2] PHẢI đảm bảo khả năng tương thích API tương tự như một hoạt động đang chạy trên màn hình chính.
  • [C-1-3] PHẢI đặt hoạt động mới trên cùng một màn hình với hoạt động đã khởi chạy hoạt động đó, khi hoạt động mới được khởi chạy mà không chỉ định màn hình mục tiêu thông qua API ActivityOptions.setLaunchDisplayId().
  • [C-1-4] PHẢI huỷ tất cả các hoạt động khi một màn hình có cờ Display.FLAG_PRIVATE bị xoá.
  • [C-1-5] PHẢI ẩn nội dung một cách an toàn trên tất cả các màn hình khi thiết bị bị khoá bằng màn hình khoá bảo mật, trừ phi ứng dụng chọn hiển thị trên màn hình khoá bằng API Activity#setShowWhenLocked().
  • PHẢI có android.content.res.Configuration tương ứng với màn hình đó để hiển thị, hoạt động chính xác và duy trì khả năng tương thích nếu một hoạt động được khởi chạy trên màn hình phụ.

Nếu các phương thức triển khai thiết bị cho phép khởi chạy Hoạt động Android thông thường trên màn hình phụ và màn hình phụ có cờ android.view.Display.FLAG_PRIVATE:

  • [C-3-1] Chỉ chủ sở hữu của màn hình, hệ thống và các hoạt động đã có trên màn hình đó MỚI có thể khởi chạy màn hình đó. Mọi người đều có thể khởi chạy vào một màn hình có cờ android.view.Display.FLAG_PUBLIC.

3.3. Khả năng tương thích của API gốc

Khả năng tương thích của mã gốc là một thách thức. Vì lý do này, các nhà triển khai thiết bị:

  • [SR] BẠN NÊN SỬ DỤNG các phương thức triển khai của các thư viện được liệt kê bên dưới từ Dự án nguồn mở Android thượng nguồn.

3.3.1. Giao diện nhị phân của ứng dụng

Mã byte Dalvik được quản lý có thể gọi vào mã gốc có trong tệp .apk của ứng dụng dưới dạng tệp .so ELF được biên dịch cho cấu trúc phần cứng thiết bị thích hợp. Vì mã gốc phụ thuộc nhiều vào công nghệ xử lý cơ bản, nên Android xác định một số Giao diện nhị phân của ứng dụng (ABI) trong Android NDK.

Cách triển khai thiết bị:

  • [C-0-1] PHẢI tương thích với một hoặc nhiều ABI NDK Android đã xác định.
  • [C-0-2] PHẢI hỗ trợ mã chạy trong môi trường được quản lý để gọi vào mã gốc, sử dụng ngữ nghĩa tiêu chuẩn của Giao diện gốc Java (JNI).
  • [C-0-3] PHẢI tương thích với nguồn (tức là tương thích với tiêu đề) và tương thích với tệp nhị phân (đối với ABI) với từng thư viện bắt buộc trong danh sách bên dưới.
  • [C-0-5] PHẢI báo cáo chính xác Giao diện nhị phân của ứng dụng (ABI) gốc mà thiết bị hỗ trợ, thông qua các tham số android.os.Build.SUPPORTED_ABIS, android.os.Build.SUPPORTED_32_BIT_ABISandroid.os.Build.SUPPORTED_64_BIT_ABIS. Mỗi tham số là một danh sách ABI được phân tách bằng dấu phẩy, sắp xếp theo thứ tự từ ABI được ưu tiên nhất đến ít được ưu tiên nhất.
  • [C-0-6] PHẢI báo cáo một nhóm nhỏ trong danh sách ABI sau đây thông qua các tham số nêu trên và KHÔNG ĐƯỢC báo cáo bất kỳ ABI nào không có trong danh sách.

  • [C-0-7] PHẢI cung cấp tất cả các thư viện sau đây (cung cấp API gốc) cho những ứng dụng có chứa mã gốc:

    • libaaudio.so (Hỗ trợ âm thanh gốc AAudio)
    • libamidi.so (hỗ trợ MIDI gốc, nếu tính năng android.software.midi được xác nhận quyền sở hữu như mô tả trong Phần 5.9)
    • libandroid.so (hỗ trợ hoạt động gốc trên Android)
    • libc (thư viện C)
    • libcamera2ndk.so
    • libdl (trình liên kết động)
    • libEGL.so (quản lý nền tảng OpenGL gốc)
    • libGLESv1_CM.so (OpenGL ES 1.x)
    • libGLESv2.so (OpenGL ES 2.0)
    • libGLESv3.so (OpenGL ES 3.x)
    • libicui18n.so
    • libicuuc.so
    • libjnigraphics.so
    • liblog (Ghi nhật ký trên Android)
    • libmediandk.so (hỗ trợ API đa phương tiện gốc)
    • libm (thư viện toán học)
    • libneuralnetworks.so (Neural Networks API)
    • libOpenMAXAL.so (hỗ trợ OpenMAX AL 1.0.1)
    • libOpenSLES.so (hỗ trợ âm thanh OpenSL ES 1.0.1)
    • libRS.so
    • libstdc++ (Hỗ trợ tối thiểu cho C++)
    • libvulkan.so (Vulkan)
    • libz (Nén bằng thuật toán Zlib)
    • Giao diện JNI
  • [C-0-8] KHÔNG ĐƯỢC thêm hoặc xoá các hàm công khai cho các thư viện gốc được liệt kê ở trên.

  • [C-0-9] PHẢI liệt kê các thư viện bổ sung không phải AOSP được cung cấp trực tiếp cho các ứng dụng bên thứ ba trong /vendor/etc/public.libraries.txt.
  • [C-0-10] KHÔNG ĐƯỢC hiển thị bất kỳ thư viện gốc nào khác, được triển khai và cung cấp trong AOSP dưới dạng thư viện hệ thống, cho các ứng dụng bên thứ ba nhắm đến API cấp 24 trở lên vì các thư viện này được dành riêng.
  • [C-0-11] PHẢI xuất tất cả các biểu tượng hàm OpenGL ES 3.1 và Android Extension Pack (Gói tiện ích Android), như được xác định trong NDK, thông qua thư viện libGLESv3.so. Xin lưu ý rằng mặc dù TẤT CẢ các biểu tượng đều PHẢI xuất hiện, nhưng phần 7.1.4.1 mô tả chi tiết hơn các yêu cầu về thời điểm dự kiến triển khai đầy đủ từng chức năng tương ứng.
  • [C-0-12] PHẢI xuất các biểu tượng hàm cho các biểu tượng hàm Vulkan 1.0 cốt lõi, cũng như các tiện ích VK_KHR_surface, VK_KHR_android_surface, VK_KHR_swapchain, VK_KHR_maintenance1VK_KHR_get_physical_device_properties2 thông qua thư viện libvulkan.so. Xin lưu ý rằng mặc dù tất cả các biểu tượng ĐỀU PHẢI xuất hiện, nhưng phần 7.1.4.2 mô tả chi tiết hơn các yêu cầu về thời điểm dự kiến triển khai đầy đủ từng chức năng tương ứng.
  • CẦN được tạo bằng mã nguồn và tệp tiêu đề có trong Dự án nguồn mở Android thượng nguồn

Xin lưu ý rằng các bản phát hành Android trong tương lai có thể hỗ trợ thêm các ABI.

3.3.2. Khả năng tương thích của mã gốc ARM 32 bit

Nếu quá trình triển khai thiết bị báo cáo việc hỗ trợ ABI armeabi, thì:

  • [C-3-1] CŨNG PHẢI hỗ trợ armeabi-v7a và báo cáo khả năng hỗ trợ của nó, vì armeabi chỉ dùng để tương thích ngược với các ứng dụng cũ.

Nếu các phương thức triển khai thiết bị báo cáo việc hỗ trợ ABI armeabi-v7a, thì đối với các ứng dụng sử dụng ABI này, các phương thức triển khai đó sẽ:

  • [C-2-1] PHẢI có các dòng sau trong /proc/cpuinfo và KHÔNG ĐƯỢC thay đổi các giá trị trên cùng một thiết bị, ngay cả khi các giá trị đó được đọc bởi các ABI khác.

    • Features:, theo sau là danh sách các tính năng CPU ARMv7 không bắt buộc mà thiết bị hỗ trợ.
    • CPU architecture:, theo sau là một số nguyên mô tả cấu trúc ARM được thiết bị hỗ trợ cao nhất (ví dụ: "8" cho thiết bị ARMv8).
  • [C-2-2] PHẢI luôn duy trì các thao tác sau, ngay cả trong trường hợp ABI được triển khai trên kiến trúc ARMv8, thông qua tính năng hỗ trợ CPU gốc hoặc thông qua hoạt động mô phỏng phần mềm:

    • Hướng dẫn SWP và SWPB.
    • Lệnh SETEND.
    • Hoạt động của rào chắn CP15ISB, CP15DSB và CP15DMB.
  • [C-2-3] PHẢI hỗ trợ tiện ích Advanced SIMD (còn gọi là NEON).

3.4. Khả năng tương thích với web

3.4.1. Khả năng tương thích của WebView

Nếu các phương thức triển khai thiết bị cung cấp một phương thức triển khai hoàn chỉnh của API android.webkit.Webview, thì:

  • [C-1-1] PHẢI báo cáo android.software.webview.
  • [C-1-2] PHẢI sử dụng bản dựng Dự án Chromium từ Dự án nguồn mở Android ở nhánh Android 11 để triển khai API android.webkit.WebView.
  • [C-1-3] Chuỗi tác nhân người dùng do WebView báo cáo PHẢI có định dạng sau:

    Mozilla/5.0 (Linux; Android $(VERSION); [$(MODEL)] [Build/$(BUILD)]; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safari/537.36

    • Giá trị của chuỗi $(VERSION) PHẢI giống với giá trị của android.os.Build.VERSION.RELEASE.
    • Chuỗi $(MODEL) CÓ THỂ trống, nhưng nếu không trống thì PHẢI có cùng giá trị với android.os.Build.MODEL.
    • Bạn CÓ THỂ bỏ qua "Build/$(BUILD)", nhưng nếu có thì chuỗi $(BUILD) PHẢI giống với giá trị của android.os.Build.ID.
    • Giá trị của chuỗi $(CHROMIUM_VER) PHẢI là phiên bản Chromium trong Dự án nguồn mở Android ngược dòng.
    • Các thiết bị triển khai CÓ THỂ bỏ qua Thiết bị di động trong chuỗi tác nhân người dùng.
  • Thành phần WebView PHẢI hỗ trợ càng nhiều tính năng HTML5 càng tốt và nếu hỗ trợ tính năng này thì PHẢI tuân thủ quy cách HTML5.

  • [C-1-3] PHẢI hiển thị nội dung được cung cấp hoặc nội dung URL từ xa trong một quy trình riêng biệt với ứng dụng khởi tạo WebView. Cụ thể, quy trình kết xuất riêng BIỆT LẬP phải có đặc quyền thấp hơn, chạy dưới dạng mã nhận dạng người dùng riêng biệt, không có quyền truy cập vào thư mục dữ liệu của ứng dụng, không có quyền truy cập trực tiếp vào mạng và chỉ có quyền truy cập vào các dịch vụ hệ thống tối thiểu cần thiết thông qua Binder. Việc triển khai WebView trên AOSP đáp ứng yêu cầu này.

Xin lưu ý rằng nếu các hoạt động triển khai thiết bị là 32 bit hoặc khai báo cờ tính năng android.hardware.ram.low, thì các hoạt động này sẽ được miễn C-1-3.

3.4.2. Khả năng tương thích với trình duyệt

Nếu các hoạt động triển khai thiết bị bao gồm một ứng dụng Trình duyệt độc lập để duyệt web nói chung, thì các hoạt động triển khai đó:

  • [C-1-1] PHẢI hỗ trợ từng API trong số này được liên kết với HTML5:
  • [C-1-2] PHẢI hỗ trợ webstorage API của HTML5/W3C và NÊN hỗ trợ IndexedDB API của HTML5/W3C. Xin lưu ý rằng khi các tổ chức tiêu chuẩn phát triển web đang chuyển sang sử dụng IndexedDB thay vì webstorage, IndexedDB dự kiến sẽ trở thành một thành phần bắt buộc trong phiên bản Android sau này.
  • CÓ THỂ gửi một chuỗi tác nhân người dùng tuỳ chỉnh trong ứng dụng Trình duyệt độc lập.
  • CẦN triển khai hỗ trợ càng nhiều HTML5 càng tốt trên ứng dụng Trình duyệt độc lập (cho dù dựa trên ứng dụng Trình duyệt WebKit nguồn hay một ứng dụng thay thế của bên thứ ba).

Tuy nhiên, nếu các hoạt động triển khai thiết bị không bao gồm một ứng dụng Trình duyệt độc lập, thì các hoạt động triển khai đó:

  • [C-2-1] VẪN PHẢI hỗ trợ các mẫu ý định công khai như mô tả trong mục 3.2.3.1.

3.5. Khả năng tương thích về hành vi của API

Cách triển khai thiết bị:

  • [C-0-9] PHẢI đảm bảo rằng khả năng tương thích về hành vi của API được áp dụng cho tất cả các ứng dụng đã cài đặt, trừ phi các ứng dụng đó bị hạn chế như mô tả trong Mục 3.5.1.
  • [C-0-10] KHÔNG ĐƯỢC triển khai phương pháp đưa vào danh sách cho phép để đảm bảo khả năng tương thích về hành vi của API chỉ dành cho những ứng dụng do nhà triển khai thiết bị chọn.

Hành vi của từng loại API (được quản lý, mềm, gốc và web) phải nhất quán với cách triển khai ưu tiên của Dự án nguồn mở Android. Một số khía cạnh cụ thể về khả năng tương thích là:

  • [C-0-1] Các thiết bị KHÔNG ĐƯỢC thay đổi hành vi hoặc ngữ nghĩa của một ý định tiêu chuẩn.
  • [C-0-2] Thiết bị KHÔNG ĐƯỢC thay đổi vòng đời hoặc ngữ nghĩa vòng đời của một loại thành phần hệ thống cụ thể (chẳng hạn như Dịch vụ, Hoạt động, ContentProvider, v.v.).
  • [C-0-3] Các thiết bị KHÔNG ĐƯỢC thay đổi ngữ nghĩa của một quyền tiêu chuẩn.
  • Các thiết bị KHÔNG ĐƯỢC PHÉP thay đổi các giới hạn được thực thi trên các ứng dụng chạy ở chế độ nền. Cụ thể hơn, đối với các ứng dụng chạy ở chế độ nền:
    • [C-0-4] chúng PHẢI dừng thực thi các lệnh gọi lại do ứng dụng đăng ký để nhận đầu ra từ GnssMeasurementGnssNavigationMessage.
    • [C-0-5] chúng PHẢI giới hạn tần suất cập nhật được cung cấp cho ứng dụng thông qua lớp API LocationManager hoặc phương thức WifiManager.startScan().
    • [C-0-6] nếu ứng dụng nhắm đến API cấp 25 trở lên, thì ứng dụng KHÔNG ĐƯỢC phép đăng ký trình nhận truyền phát cho các thông báo truyền phát ngầm ý của ý định Android tiêu chuẩn trong tệp kê khai của ứng dụng, trừ phi ý định truyền phát yêu cầu quyền "signature" hoặc "signatureOrSystem" protectionLevel hoặc nằm trong danh sách miễn trừ.
    • [C-0-7] nếu ứng dụng nhắm đến API cấp 25 trở lên, thì ứng dụng ĐƯỢC YÊU CẦU phải dừng các dịch vụ nền của ứng dụng, giống như thể ứng dụng đã gọi phương thức stopSelf() của dịch vụ, trừ phi ứng dụng được đưa vào danh sách cho phép tạm thời để xử lý một tác vụ mà người dùng nhìn thấy.
    • [C-0-8] nếu ứng dụng nhắm đến API cấp 25 trở lên, thì ứng dụng ĐƯỢC YÊU CẦU phải giải phóng các wakelock mà ứng dụng giữ.
  • [C-0-9] Các thiết bị PHẢI trả về các trình cung cấp dịch vụ bảo mật sau đây dưới dạng 7 giá trị mảng đầu tiên từ phương thức Security.getProviders(), theo thứ tự đã cho và có tên đã cho (do Provider.getName() trả về) và các lớp, trừ phi ứng dụng đã sửa đổi danh sách thông qua insertProviderAt() hoặc removeProvider(). Các thiết bị CÓ THỂ trả về các nhà cung cấp bổ sung sau danh sách nhà cung cấp được chỉ định bên dưới.
    1. AndroidNSSPandroid.security.net.config.NetworkSecurityConfigProvider
    2. AndroidOpenSSLcom.android.org.conscrypt.OpenSSLProvider
    3. CertPathProvidersun.security.provider.CertPathProvider
    4. AndroidKeyStoreBCWorkaroundandroid.security.keystore.AndroidKeyStoreBCWorkaroundProvider
    5. BCcom.android.org.bouncycastle.jce.provider.BouncyCastleProvider
    6. HarmonyJSSEcom.android.org.conscrypt.JSSEProvider
    7. AndroidKeyStoreandroid.security.keystore.AndroidKeyStoreProvider

Danh sách bên trên chưa đầy đủ. Bộ kiểm tra tính tương thích (CTS) kiểm thử các phần quan trọng của nền tảng để đảm bảo khả năng tương thích về hành vi, nhưng không phải tất cả. Người triển khai có trách nhiệm đảm bảo khả năng tương thích về hành vi với Dự án nguồn mở Android. Vì lý do này, nhà triển khai thiết bị NÊN sử dụng mã nguồn có sẵn thông qua Dự án nguồn mở Android (nếu có thể), thay vì triển khai lại các phần quan trọng của hệ thống.

3.5.1. Hạn chế ứng dụng

Nếu các hoạt động triển khai thiết bị triển khai một cơ chế độc quyền để hạn chế ứng dụng và cơ chế đó hạn chế hơn Bộ chứa chế độ chờ ứng dụng hiếm, thì các hoạt động triển khai đó:

  • [C-1-1] PHẢI cung cấp cho người dùng khả năng xem danh sách các ứng dụng bị hạn chế.
  • [C-1-2] PHẢI cung cấp cho người dùng khả năng bật / tắt các quy định hạn chế đối với từng ứng dụng.
  • [C-1-3] KHÔNG ĐƯỢC tự động áp dụng các hạn chế mà không có bằng chứng về hành vi ảnh hưởng đến tình trạng hệ thống, nhưng CÓ THỂ áp dụng các hạn chế đối với ứng dụng khi phát hiện hành vi ảnh hưởng đến tình trạng hệ thống, chẳng hạn như wakelock bị kẹt, dịch vụ chạy trong thời gian dài và các tiêu chí khác. Các tiêu chí NÊN được xác định bởi những người triển khai thiết bị nhưng PHẢI liên quan đến tác động của ứng dụng đối với tình trạng của hệ thống. Bạn KHÔNG ĐƯỢC sử dụng các tiêu chí khác không liên quan hoàn toàn đến tình trạng của hệ thống, chẳng hạn như việc ứng dụng không phổ biến trên thị trường.
  • [C-1-4] KHÔNG ĐƯỢC tự động áp dụng chế độ hạn chế sử dụng ứng dụng cho các ứng dụng khi người dùng đã tắt chế độ này theo cách thủ công và CÓ THỂ đề xuất người dùng áp dụng chế độ hạn chế sử dụng ứng dụng.
  • [C-1-5] PHẢI thông báo cho người dùng nếu các chế độ hạn chế ứng dụng được tự động áp dụng cho một ứng dụng. Bạn PHẢI cung cấp thông tin đó trong vòng 24 giờ kể từ khi các hạn chế được áp dụng.
  • [C-1-6] PHẢI trả về true cho ActivityManager.isBackgroundRestricted() khi ứng dụng bị hạn chế gọi API này.
  • [C-1-7] KHÔNG ĐƯỢC hạn chế ứng dụng hàng đầu ở chế độ nền trước mà người dùng sử dụng một cách rõ ràng.
  • [C-1-8] PHẢI tạm ngưng các hạn chế đối với một ứng dụng trở thành ứng dụng trên nền trước hàng đầu khi người dùng bắt đầu sử dụng một cách rõ ràng ứng dụng từng bị hạn chế.

3.6. Không gian tên API

Android tuân theo các quy ước về không gian tên của gói và lớp do ngôn ngữ lập trình Java xác định. Để đảm bảo khả năng tương thích với các ứng dụng bên thứ ba, nhà triển khai thiết bị KHÔNG ĐƯỢC phép thực hiện bất kỳ sửa đổi bị cấm nào (xem bên dưới) đối với các không gian tên gói sau:

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

Tức là:

  • [C-0-1] KHÔNG ĐƯỢC sửa đổi các API được công khai trên nền tảng Android bằng cách thay đổi chữ ký của bất kỳ phương thức hoặc lớp nào, hoặc bằng cách xoá các lớp hoặc trường lớp.
  • [C-0-2] KHÔNG ĐƯỢC thêm bất kỳ phần tử nào được công khai (chẳng hạn như các lớp hoặc giao diện, hoặc các trường hoặc phương thức vào các lớp hoặc giao diện hiện có) hoặc API Kiểm thử hoặc API Hệ thống vào các API trong không gian tên ở trên. "Phần tử công khai" là bất kỳ cấu trúc nào không được trang trí bằng dấu "@hide" như được dùng trong mã nguồn Android ngược dòng.

Các đơn vị triển khai thiết bị CÓ THỂ sửa đổi phương thức triển khai cơ bản của API, nhưng những sửa đổi đó:

  • [C-0-3] KHÔNG ĐƯỢC ảnh hưởng đến hành vi đã nêu và chữ ký bằng ngôn ngữ Java của mọi API được công khai.
  • [C-0-4] KHÔNG ĐƯỢC quảng cáo hoặc tiết lộ cho nhà phát triển.

Tuy nhiên, nhà triển khai thiết bị CÓ THỂ thêm các API tuỳ chỉnh bên ngoài không gian tên Android tiêu chuẩn, nhưng các API tuỳ chỉnh này:

  • [C-0-5] KHÔNG ĐƯỢC nằm trong một không gian tên thuộc sở hữu của hoặc đề cập đến một tổ chức khác. Ví dụ: nhà triển khai thiết bị KHÔNG ĐƯỢC thêm API vào com.google.* hoặc không gian tên tương tự: chỉ Google mới có thể làm như vậy. Tương tự, Google KHÔNG ĐƯỢC thêm API vào không gian tên của các công ty khác.
  • [C-0-6] PHẢI được đóng gói trong một thư viện dùng chung của Android để chỉ những ứng dụng sử dụng rõ ràng các thư viện này (thông qua cơ chế <uses-library>) mới bị ảnh hưởng bởi mức sử dụng bộ nhớ tăng lên của các API như vậy.

Nếu nhà triển khai thiết bị đề xuất cải thiện một trong các không gian tên gói ở trên (chẳng hạn như bằng cách thêm chức năng mới hữu ích vào một API hiện có hoặc thêm một API mới), thì nhà triển khai NÊN truy cập vào source.android.com và bắt đầu quy trình đóng góp các thay đổi và mã, theo thông tin trên trang web đó.

Xin lưu ý rằng các hạn chế nêu trên tương ứng với các quy ước tiêu chuẩn để đặt tên API trong ngôn ngữ lập trình Java; phần này chỉ nhằm mục đích củng cố các quy ước đó và ràng buộc chúng thông qua việc đưa vào Định nghĩa về khả năng tương thích này.

3.7. Khả năng tương thích trong thời gian chạy

Cách triển khai thiết bị:

  • [C-0-1] PHẢI hỗ trợ toàn bộ định dạng có thể thực thi Dalvik (DEX) và quy cách và ngữ nghĩa mã byte Dalvik.

  • [C-0-2] PHẢI định cấu hình thời gian chạy Dalvik để phân bổ bộ nhớ theo nền tảng Android nguồn và theo quy định trong bảng sau. (Xem mục 7.1.1 để biết định nghĩa về kích thước và mật độ màn hình.)

  • NÊN sử dụng Android RunTime (ART), quá trình triển khai tham chiếu ở thượng nguồn của Định dạng có thể thực thi Dalvik và hệ thống quản lý gói của quá trình triển khai tham chiếu.

  • NÊN chạy kiểm thử fuzz trong nhiều chế độ thực thi và kiến trúc mục tiêu để đảm bảo tính ổn định của thời gian chạy. Tham khảo JFuzzDexFuzz trong trang web Dự án nguồn mở Android.

Xin lưu ý rằng các giá trị bộ nhớ được chỉ định dưới đây được coi là giá trị tối thiểu và các hoạt động triển khai thiết bị CÓ THỂ phân bổ thêm bộ nhớ cho mỗi ứng dụng.

Bố cục màn hình Mật độ màn hình Bộ nhớ ứng dụng tối thiểu
Đồng hồ Android 120 dpi (ldpi) 32MB
140 dpi (140dpi)
160 dpi (mdpi)
180 dpi (180dpi)
200 dpi (200dpi)
213 dpi (tvdpi)
220 dpi (220dpi) 36MB
240 dpi (hdpi)
280 dpi (280dpi)
320 dpi (xhdpi) 48MB
360 dpi (360dpi)
400 dpi (400dpi) 56MB
420 dpi (420dpi) 64MB
480 dpi (xxhdpi) 88MB
560 dpi (560dpi) 112MB
640 dpi (xxxhdpi) 154MB
nhỏ/bình thường 120 dpi (ldpi) 32MB
140 dpi (140dpi)
160 dpi (mdpi)
180 dpi (180dpi) 48MB
200 dpi (200dpi)
213 dpi (tvdpi)
220 dpi (220dpi)
240 dpi (hdpi)
280 dpi (280dpi)
320 dpi (xhdpi) 80MB
360 dpi (360dpi)
400 dpi (400dpi) 96MB
420 dpi (420dpi) 112MB
480 dpi (xxhdpi) 128MB
560 dpi (560dpi) 192MB
640 dpi (xxxhdpi) 256MB
lớn 120 dpi (ldpi) 32MB
140 dpi (140dpi) 48MB
160 dpi (mdpi)
180 dpi (180dpi) 80MB
200 dpi (200dpi)
213 dpi (tvdpi)
220 dpi (220dpi)
240 dpi (hdpi)
280 dpi (280dpi) 96MB
320 dpi (xhdpi) 128MB
360 dpi (360dpi) 160MB
400 dpi (400dpi) 192MB
420 dpi (420dpi) 228MB
480 dpi (xxhdpi) 256MB
560 dpi (560dpi) 384MB
640 dpi (xxxhdpi) 512 MB
xlarge 120 dpi (ldpi) 48MB
140 dpi (140dpi) 80MB
160 dpi (mdpi)
180 dpi (180dpi) 96MB
200 dpi (200dpi)
213 dpi (tvdpi)
220 dpi (220dpi)
240 dpi (hdpi)
280 dpi (280dpi) 144MB
320 dpi (xhdpi) 192MB
360 dpi (360dpi) 240MB
400 dpi (400dpi) 288 MB
420 dpi (420dpi) 336MB
480 dpi (xxhdpi) 384MB
560 dpi (560dpi) 576MB
640 dpi (xxxhdpi) 768MB

3.8. Khả năng tương thích của giao diện người dùng

3.8.1. Trình chạy (Màn hình chính)

Android có một ứng dụng trình chạy (màn hình chính) và hỗ trợ các ứng dụng bên thứ ba thay thế trình chạy thiết bị (màn hình chính).

Nếu các hoạt động triển khai thiết bị cho phép các ứng dụng bên thứ ba thay thế màn hình chính của thiết bị, thì:

  • [C-1-1] PHẢI khai báo tính năng nền tảng android.software.home_screen.
  • [C-1-2] PHẢI trả về đối tượng AdaptiveIconDrawable khi ứng dụng bên thứ ba sử dụng thẻ <adaptive-icon> để cung cấp biểu tượng của họ và các phương thức PackageManager để truy xuất biểu tượng được gọi.

Nếu các hoạt động triển khai thiết bị có trình chạy mặc định hỗ trợ tính năng ghim lối tắt trong ứng dụng, thì các hoạt động đó:

Ngược lại, nếu các hoạt động triển khai trên thiết bị không hỗ trợ việc ghim lối tắt trong ứng dụng, thì:

Nếu các phương thức triển khai thiết bị triển khai một trình chạy mặc định giúp truy cập nhanh vào các lối tắt bổ sung do ứng dụng bên thứ ba cung cấp thông qua API ShortcutManager, thì các phương thức triển khai đó:

  • [C-4-1] PHẢI hỗ trợ tất cả các tính năng lối tắt được ghi lại (ví dụ: lối tắt tĩnh và động, ghim lối tắt) và triển khai đầy đủ các API của lớp API ShortcutManager.

Nếu các hoạt động triển khai thiết bị có một ứng dụng trình chạy mặc định hiển thị huy hiệu cho biểu tượng ứng dụng, thì:

  • [C-5-1] PHẢI tuân thủ phương thức API NotificationChannel.setShowBadge(). Nói cách khác, hãy hiện một dấu hiệu trực quan liên kết với biểu tượng ứng dụng nếu giá trị được đặt là true và không hiện bất kỳ lược đồ huy hiệu biểu tượng ứng dụng nào khi tất cả các kênh thông báo của ứng dụng đều đặt giá trị là false.
  • CÓ THỂ ghi đè huy hiệu biểu tượng ứng dụng bằng chương trình gắn huy hiệu độc quyền của họ khi các ứng dụng bên thứ ba cho biết có hỗ trợ chương trình gắn huy hiệu độc quyền thông qua việc sử dụng các API độc quyền, nhưng NÊN sử dụng các tài nguyên và giá trị được cung cấp thông qua các API huy hiệu thông báo được mô tả trong SDK , chẳng hạn như API Notification.Builder.setNumber()Notification.Builder.setBadgeIconType().

3.8.2. Tiện ích

Android hỗ trợ các tiện ích ứng dụng của bên thứ ba bằng cách xác định một loại thành phần và API cũng như vòng đời tương ứng cho phép các ứng dụng hiển thị một "AppWidget" cho người dùng cuối.

Nếu các hoạt động triển khai thiết bị hỗ trợ các tiện ích ứng dụng của bên thứ ba, thì:

  • [C-1-1] PHẢI khai báo hỗ trợ cho tính năng nền tảng android.software.app_widgets.
  • [C-1-2] PHẢI có hỗ trợ tích hợp cho AppWidget và cung cấp các thành phần giao diện người dùng để thêm, định cấu hình, xem và xoá AppWidget ngay trong Trình chạy.
  • [C-1-3] PHẢI có khả năng hiển thị các tiện ích có kích thước 4 x 4 trong kích thước lưới tiêu chuẩn. Hãy xem Nguyên tắc thiết kế tiện ích ứng dụng trong tài liệu về Android SDK để biết thông tin chi tiết.
  • CÓ THỂ hỗ trợ các tiện ích ứng dụng trên màn hình khoá.

Nếu các hoạt động triển khai thiết bị hỗ trợ tiện ích ứng dụng bên thứ ba và tính năng ghim lối tắt trong ứng dụng, thì:

3.8.3. Thông báo

Android có các API NotificationNotificationManager cho phép nhà phát triển ứng dụng bên thứ ba thông báo cho người dùng về các sự kiện đáng chú ý và thu hút sự chú ý của người dùng bằng các thành phần phần cứng (ví dụ: âm thanh, chế độ rung và ánh sáng) và các tính năng phần mềm (ví dụ: bảng thông báo, thanh hệ thống) của thiết bị.

3.8.3.1. Cách trình bày thông báo

Nếu các hoạt động triển khai thiết bị cho phép ứng dụng bên thứ ba thông báo cho người dùng về các sự kiện đáng chú ý, thì các hoạt động triển khai đó:

  • [C-1-1] PHẢI hỗ trợ các thông báo sử dụng các tính năng phần cứng, như mô tả trong tài liệu SDK và trong phạm vi có thể với phần cứng triển khai thiết bị. Ví dụ: nếu một phương thức triển khai thiết bị có bộ rung, thì phương thức đó PHẢI triển khai chính xác các API rung. Nếu một phương thức triển khai thiết bị thiếu phần cứng, thì các API tương ứng PHẢI được triển khai dưới dạng các thao tác không. Hành vi này được trình bày chi tiết hơn trong mục 7.
  • [C-1-2] PHẢI hiển thị chính xác tất cả tài nguyên (biểu tượng, tệp ảnh động, v.v.) được cung cấp trong API hoặc trong hướng dẫn về kiểu biểu tượng của Thanh trạng thái/Thanh hệ thống, mặc dù CÓ THỂ cung cấp trải nghiệm người dùng thay thế cho thông báo so với trải nghiệm do quá trình triển khai Android nguồn mở tham chiếu cung cấp.
  • [C-1-3] PHẢI tuân thủ và triển khai đúng cách các hành vi được mô tả cho các API để cập nhật, xoá và nhóm thông báo.
  • [C-1-4] PHẢI cung cấp đầy đủ hành vi của API NotificationChannel được ghi lại trong SDK.
  • [C-1-5] PHẢI cung cấp cho người dùng một phương thức để chặn và sửa đổi thông báo của một ứng dụng bên thứ ba cụ thể theo từng kênh và cấp gói ứng dụng.
  • [C-1-6] CŨNG PHẢI cung cấp cho người dùng một cách thức để hiển thị các kênh thông báo đã bị xoá.
  • [C-1-7] PHẢI hiển thị chính xác tất cả tài nguyên (hình ảnh, hình dán, biểu tượng, v.v.) được cung cấp thông qua Notification.MessagingStyle cùng với văn bản thông báo mà không cần người dùng tương tác thêm. Ví dụ: PHẢI cho thấy tất cả tài nguyên, bao gồm cả biểu tượng được cung cấp thông qua android.app.Person trong cuộc trò chuyện nhóm được thiết lập thông qua setGroupConversation.
  • [C-SR] NÊN TỰ ĐỘNG HIỂN THỊ cho người dùng một lựa chọn để chặn thông báo của một ứng dụng bên thứ ba nhất định theo từng kênh và cấp gói ứng dụng sau khi người dùng nhiều lần bỏ qua thông báo đó.
  • NÊN hỗ trợ thông báo chi tiết.
  • NÊN trình bày một số thông báo có mức độ ưu tiên cao hơn dưới dạng thông báo quan trọng.
  • NÊN có một cơ chế tương tác để người dùng tạm ẩn thông báo.
  • MAY chỉ quản lý khả năng hiển thị và thời gian mà các ứng dụng bên thứ ba có thể thông báo cho người dùng về các sự kiện đáng chú ý để giảm thiểu các vấn đề về an toàn, chẳng hạn như tình trạng lái xe mất tập trung.

Android 11 hỗ trợ thông báo cuộc trò chuyện. Đây là những thông báo sử dụng MessagingStyle và cung cấp một mã nhận dạng People Shortcut đã xuất bản.

Cách triển khai thiết bị:

  • [C-SR] NÊN NHẤT là nhóm và hiển thị conversation notifications trước các thông báo không phải là thông báo về cuộc trò chuyện, ngoại trừ các thông báo liên tục về dịch vụ trên nền trước và thông báo importance:high.

Nếu các hoạt động triển khai thiết bị hỗ trợ conversation notifications và ứng dụng cung cấp dữ liệu cần thiết cho bubbles, thì:

  • [C-SR] RẤT NÊN hiển thị cuộc trò chuyện này dưới dạng bong bóng trò chuyện. Việc triển khai AOSP đáp ứng các yêu cầu này bằng Giao diện người dùng hệ thống, Cài đặt và Trình chạy mặc định.

Nếu các hoạt động triển khai thiết bị hỗ trợ thông báo đa dạng, thì:

  • [C-2-1] PHẢI sử dụng chính xác các tài nguyên được cung cấp thông qua lớp API Notification.Style và các lớp con của lớp này cho các phần tử tài nguyên được trình bày.
  • NÊN trình bày từng phần tử tài nguyên (ví dụ: biểu tượng, tiêu đề và văn bản tóm tắt) được xác định trong lớp API Notification.Style và các lớp con của lớp này.

Nếu các chế độ triển khai thiết bị hỗ trợ thông báo quan trọng, thì các chế độ này:

  • [C-3-1] PHẢI sử dụng khung hiển thị thông báo quan trọng và các tài nguyên như mô tả trong lớp API Notification.Builder khi thông báo quan trọng xuất hiện.
  • [C-3-2] PHẢI hiển thị các thao tác được cung cấp thông qua Notification.Builder.addAction() cùng với nội dung thông báo mà không cần người dùng tương tác thêm như mô tả trong SDK.
3.8.3.2. Dịch vụ trình nghe thông báo

Android có các API NotificationListenerService cho phép ứng dụng (sau khi người dùng bật một cách rõ ràng) nhận bản sao của tất cả thông báo khi chúng được đăng hoặc cập nhật.

Cách triển khai thiết bị:

  • [C-0-1] PHẢI cập nhật chính xác và kịp thời toàn bộ thông báo cho tất cả các dịch vụ trình nghe đã cài đặt và do người dùng bật, bao gồm cả mọi siêu dữ liệu được đính kèm vào đối tượng Thông báo.
  • [C-0-2] PHẢI tuân thủ lệnh gọi API snoozeNotification(), đồng thời loại bỏ thông báo và thực hiện lệnh gọi lại sau khoảng thời gian tạm ngưng được đặt trong lệnh gọi API.

Nếu các hoạt động triển khai thiết bị có một cơ chế cho phép người dùng tạm ẩn thông báo, thì:

  • [C-1-1] PHẢI phản ánh đúng trạng thái thông báo bị tạm ẩn thông qua các API chuẩn như NotificationListenerService.getSnoozedNotifications().
  • [C-1-2] PHẢI cung cấp cho người dùng khả năng tạm ngưng thông báo của từng ứng dụng bên thứ ba đã cài đặt, trừ phi đó là thông báo từ các dịch vụ liên tục/trên nền trước.
3.8.3.3. DND (Không làm phiền)

Nếu các hoạt động triển khai thiết bị hỗ trợ tính năng Không làm phiền, thì:

  • [C-1-1] PHẢI, khi quá trình triển khai thiết bị đã cung cấp cho người dùng một phương thức để cấp hoặc từ chối quyền truy cập của ứng dụng bên thứ ba vào cấu hình chính sách Không làm phiền, hãy hiển thị Các quy tắc tự động của chế độ Không làm phiền do các ứng dụng tạo cùng với các quy tắc do người dùng tạo và được xác định trước.
  • [C-1-3] PHẢI tuân thủ các giá trị suppressedVisualEffects được truyền cùng với NotificationManager.Policy và nếu một ứng dụng đã đặt bất kỳ cờ nào trong số SUPPRESSED_EFFECT_SCREEN_OFF hoặc SUPPRESSED_EFFECT_SCREEN_ON, thì ứng dụng ĐƯỢC PHÉP cho người dùng biết rằng các hiệu ứng hình ảnh bị tắt trong trình đơn cài đặt chế độ Không làm phiền.

Android có các API cho phép nhà phát triển kết hợp tính năng tìm kiếm vào ứng dụng của họ và đưa dữ liệu của ứng dụng vào tính năng tìm kiếm toàn hệ thống. Nhìn chung, chức năng này bao gồm một giao diện người dùng duy nhất trên toàn hệ thống, cho phép người dùng nhập cụm từ tìm kiếm, hiển thị các đề xuất khi người dùng nhập và hiển thị kết quả. Các API Android cho phép nhà phát triển sử dụng lại giao diện này để cung cấp tính năng tìm kiếm trong các ứng dụng của riêng họ và cho phép nhà phát triển cung cấp kết quả cho giao diện người dùng tìm kiếm chung trên toàn cầu.

  • Các hoạt động triển khai thiết bị Android PHẢI bao gồm tính năng tìm kiếm toàn cầu, một giao diện người dùng tìm kiếm duy nhất, dùng chung trên toàn hệ thống, có khả năng đưa ra đề xuất theo thời gian thực để phản hồi thông tin đầu vào của người dùng.

Nếu các hoạt động triển khai thiết bị triển khai giao diện tìm kiếm chung, thì:

  • [C-1-1] PHẢI triển khai các API cho phép ứng dụng bên thứ ba thêm đề xuất vào hộp tìm kiếm khi chạy ở chế độ tìm kiếm toàn cầu.

Nếu không có ứng dụng bên thứ ba nào được cài đặt để sử dụng tính năng tìm kiếm toàn cầu:

  • Hành vi mặc định PHẢI là hiển thị kết quả và đề xuất của công cụ tìm kiếm trên web.

Android cũng bao gồm Assist API để cho phép các ứng dụng chọn lượng thông tin về bối cảnh hiện tại được chia sẻ với trợ lý trên thiết bị.

Nếu các hoạt động triển khai thiết bị hỗ trợ thao tác Trợ lý, thì:

  • [C-2-1] PHẢI cho người dùng cuối biết rõ khi nào bối cảnh được chia sẻ, bằng một trong hai cách sau:
    • Mỗi khi ứng dụng trợ lý truy cập vào ngữ cảnh, ứng dụng sẽ hiển thị ánh sáng trắng xung quanh các cạnh của màn hình đáp ứng hoặc vượt quá thời lượng và độ sáng của quá trình triển khai Dự án nguồn mở Android.
    • Đối với ứng dụng trợ lý được cài đặt sẵn, hãy cung cấp cho người dùng một lựa chọn cách trình đơn cài đặt ứng dụng trợ lý và chế độ cài đặt mặc định cho tính năng nhập bằng giọng nói chưa đến 2 thao tác điều hướng, đồng thời chỉ chia sẻ ngữ cảnh khi người dùng gọi rõ ràng ứng dụng trợ lý thông qua một từ khoá kích hoạt hoặc chế độ nhập bằng phím điều hướng trợ lý.
  • [C-2-2] Tương tác được chỉ định để chạy ứng dụng hỗ trợ như mô tả trong mục 7.2.3 PHẢI chạy ứng dụng hỗ trợ do người dùng chọn, tức là ứng dụng triển khai VoiceInteractionService hoặc một hoạt động xử lý ý định ACTION_ASSIST.

3.8.5. Cảnh báo và thông báo dạng nổi

Các ứng dụng có thể sử dụng API Toast để hiển thị các chuỗi ngắn không theo phương thức cho người dùng cuối và các chuỗi này sẽ biến mất sau một khoảng thời gian ngắn. Ngoài ra, các ứng dụng cũng có thể sử dụng API loại cửa sổ TYPE_APPLICATION_OVERLAY để hiển thị cửa sổ cảnh báo dưới dạng lớp phủ trên các ứng dụng khác.

Nếu các hoạt động triển khai thiết bị có màn hình hoặc đầu ra video, thì:

  • [C-1-1] PHẢI cung cấp cho người dùng một phương thức để chặn ứng dụng hiển thị cửa sổ cảnh báo bằng TYPE_APPLICATION_OVERLAY . Việc triển khai AOSP đáp ứng yêu cầu này bằng cách có các chế độ kiểm soát trong bảng thông báo.

  • [C-1-2] PHẢI tuân thủ Toast API và hiển thị Toast từ các ứng dụng cho người dùng cuối theo cách dễ thấy.

3.8.6. Chủ đề

Android cung cấp "giao diện" như một cơ chế để các ứng dụng áp dụng kiểu trên toàn bộ Hoạt động hoặc ứng dụng.

Android có một họ giao diện "Holo" và "Material" dưới dạng một tập hợp các kiểu được xác định để nhà phát triển ứng dụng sử dụng nếu họ muốn có giao diện và cảm giác của giao diện Holo như được xác định bởi SDK Android.

Nếu các hoạt động triển khai thiết bị có màn hình hoặc đầu ra video, thì:

  • [C-1-1] KHÔNG ĐƯỢC thay đổi bất kỳ thuộc tính nào của giao diện Holo được hiển thị cho các ứng dụng.
  • [C-1-2] PHẢI hỗ trợ họ giao diện "Material" và KHÔNG ĐƯỢC thay đổi bất kỳ thuộc tính nào của giao diện Material hoặc các thành phần của giao diện này được cung cấp cho các ứng dụng.
  • [C-1-3] PHẢI đặt họ phông chữ "sans-serif" thành Roboto phiên bản 2.x cho những ngôn ngữ mà Roboto hỗ trợ, hoặc cung cấp cho người dùng một cách để thay đổi phông chữ được dùng cho họ phông chữ "sans-serif" thành Roboto phiên bản 2.x cho những ngôn ngữ mà Roboto hỗ trợ.

Android cũng bao gồm một họ giao diện "Mặc định của thiết bị" dưới dạng một tập hợp các kiểu được xác định để nhà phát triển ứng dụng sử dụng nếu họ muốn giao diện và cảm nhận của giao diện thiết bị khớp với giao diện do nhà triển khai thiết bị xác định.

Android hỗ trợ một biến thể của giao diện có các thanh hệ thống mờ, cho phép nhà phát triển ứng dụng điền nội dung ứng dụng vào khu vực phía sau thanh trạng thái và thanh điều hướng. Để mang lại trải nghiệm nhất quán cho nhà phát triển trong cấu hình này, điều quan trọng là bạn phải duy trì kiểu biểu tượng trên thanh trạng thái trong nhiều cách triển khai trên thiết bị.

Nếu các hoạt động triển khai thiết bị có thanh trạng thái hệ thống, thì:

  • [C-2-1] PHẢI sử dụng màu trắng cho các biểu tượng trạng thái hệ thống (chẳng hạn như cường độ tín hiệu và mức pin) và thông báo do hệ thống phát hành, trừ phi biểu tượng đó cho biết trạng thái có vấn đề hoặc ứng dụng yêu cầu thanh trạng thái sáng bằng cờ SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.
  • [C-2-2] Các hoạt động triển khai thiết bị Android PHẢI thay đổi màu của biểu tượng trạng thái hệ thống thành màu đen (để biết thông tin chi tiết, hãy tham khảo R.style) khi một ứng dụng yêu cầu thanh trạng thái sáng.

3.8.7. Hình nền động (Live Wallpaper)

Android xác định một loại thành phần, API và vòng đời tương ứng cho phép các ứng dụng hiển thị một hoặc nhiều "Hình nền động" cho người dùng cuối. Hình nền động là ảnh động, mẫu hoặc hình ảnh tương tự có khả năng nhập liệu hạn chế, hiển thị dưới dạng hình nền, phía sau các ứng dụng khác.

Phần cứng được coi là có khả năng chạy hình nền động một cách đáng tin cậy nếu có thể chạy tất cả hình nền động mà không có giới hạn về chức năng, ở tốc độ khung hình hợp lý mà không ảnh hưởng xấu đến các ứng dụng khác. Nếu những hạn chế về phần cứng khiến hình nền và/hoặc ứng dụng gặp sự cố, hoạt động không đúng cách, tiêu thụ quá nhiều CPU hoặc pin, hoặc chạy ở tốc độ khung hình quá thấp, thì phần cứng đó được coi là không thể chạy hình nền động. Ví dụ: một số hình nền động có thể sử dụng ngữ cảnh OpenGL 2.0 hoặc 3.x để kết xuất nội dung. Hình nền động sẽ không chạy ổn định trên phần cứng không hỗ trợ nhiều ngữ cảnh OpenGL vì việc sử dụng ngữ cảnh OpenGL của hình nền động có thể xung đột với các ứng dụng khác cũng sử dụng ngữ cảnh OpenGL.

  • Các chế độ triển khai thiết bị có khả năng chạy hình nền động một cách đáng tin cậy như mô tả ở trên NÊN triển khai hình nền động.

Nếu triển khai hình nền động, các thiết bị sẽ:

  • [C-1-1] PHẢI báo cáo cờ tính năng nền tảng android.software.live_wallpaper.

3.8.8. Chuyển đổi hoạt động

Mã nguồn Android ở nguồn trên bao gồm màn hình tổng quan, một giao diện người dùng cấp hệ thống để chuyển đổi tác vụ và hiển thị các hoạt động và tác vụ được truy cập gần đây bằng hình thu nhỏ về trạng thái đồ hoạ của ứng dụng tại thời điểm người dùng rời khỏi ứng dụng gần đây nhất.

Các hoạt động triển khai thiết bị, bao gồm cả khoá điều hướng chức năng gần đây như được nêu chi tiết trong mục 7.2.3 CÓ THỂ thay đổi giao diện.

Nếu các hoạt động triển khai thiết bị (bao gồm cả khoá điều hướng chức năng gần đây) như được nêu chi tiết trong mục 7.2.3 làm thay đổi giao diện, thì:

  • [C-1-1] PHẢI hỗ trợ ít nhất 7 hoạt động hiển thị.
  • NÊN hiển thị tiêu đề của ít nhất 4 hoạt động cùng một lúc.
  • [C-1-2] PHẢI triển khai hành vi ghim màn hình và cung cấp cho người dùng một trình đơn cài đặt để bật/tắt tính năng này.
  • NÊN hiển thị màu làm nổi bật, biểu tượng, tiêu đề màn hình trong phần gần đây.
  • NÊN hiển thị một thành phần cho phép đóng ("x") nhưng CÓ THỂ trì hoãn việc này cho đến khi người dùng tương tác với màn hình.
  • NÊN triển khai một lối tắt để dễ dàng chuyển sang hoạt động trước đó.
  • NÊN kích hoạt thao tác chuyển đổi nhanh giữa hai ứng dụng được dùng gần đây nhất khi người dùng nhấn phím chức năng gần đây hai lần.
  • NÊN kích hoạt chế độ nhiều cửa sổ chia đôi màn hình (nếu được hỗ trợ) khi người dùng nhấn và giữ phím chức năng gần đây.
  • CÓ THỂ hiển thị các nội dung gần đây có liên kết dưới dạng một nhóm di chuyển cùng nhau.
  • [SR] RẤT NÊN sử dụng giao diện người dùng Android nguồn (hoặc giao diện tương tự dựa trên hình thu nhỏ) cho màn hình tổng quan.

3.8.9. Quản lý dữ liệu đầu vào

Android hỗ trợ Quản lý dữ liệu đầu vào và hỗ trợ trình chỉnh sửa phương thức nhập của bên thứ ba.

Nếu các chế độ triển khai thiết bị cho phép người dùng sử dụng phương thức nhập của bên thứ ba trên thiết bị, thì:

  • [C-1-1] PHẢI khai báo tính năng nền tảng android.software.input_methods và hỗ trợ các API IME như được xác định trong tài liệu SDK Android.

3.8.10. Chế độ điều khiển nội dung nghe nhìn trên màn hình khoá

Remote Control Client API (API ứng dụng điều khiển từ xa) không được dùng nữa kể từ Android 5.0 để chuyển sang Mẫu thông báo về nội dung nghe nhìn. Mẫu này cho phép các ứng dụng nội dung nghe nhìn tích hợp với các nút điều khiển phát xuất hiện trên màn hình khoá.

3.8.11. Trình bảo vệ màn hình (trước đây là Phông trong mơ)

Xem mục 3.2.3.5 để biết ý định cài đặt nhằm định cấu hình trình bảo vệ màn hình.

3.8.12. Vị trí

Nếu các hoạt động triển khai thiết bị bao gồm một cảm biến phần cứng (ví dụ: GPS) có khả năng cung cấp toạ độ vị trí, thì các hoạt động triển khai đó

3.8.13. Unicode và phông chữ

Android có hỗ trợ cho các ký tự biểu tượng cảm xúc được xác định trong Unicode 10.0.

Nếu các hoạt động triển khai thiết bị có màn hình hoặc đầu ra video, thì:

  • [C-1-1] PHẢI có khả năng hiển thị các ký tự biểu tượng cảm xúc này dưới dạng glyph màu.
  • [C-1-2] PHẢI hỗ trợ:
    • Phông chữ Roboto 2 với nhiều độ đậm khác nhau: sans-serif-thin, sans-serif-light, sans-serif-medium, sans-serif-black, sans-serif-condensed, sans-serif-condensed-light cho các ngôn ngữ có trên thiết bị.
    • Hỗ trợ đầy đủ Unicode 7.0 cho các bảng chữ cái Latinh, Hy Lạp và Kirin, bao gồm các dải Latinh mở rộng A, B, C và D, cũng như tất cả các glyph trong khối ký hiệu tiền tệ của Unicode 7.0.
  • NÊN hỗ trợ các biểu tượng cảm xúc về màu da và gia đình đa dạng như được chỉ định trong Báo cáo kỹ thuật số 51 của Unicode.

Nếu các hoạt động triển khai thiết bị có một IME, thì các hoạt động này:

  • NÊN cung cấp cho người dùng một phương thức nhập cho các ký tự biểu tượng cảm xúc này.

Android có hỗ trợ hiển thị phông chữ tiếng Myanmar. Myanmar có một số phông chữ không tuân thủ Unicode, thường được gọi là "Zawgyi", để hiển thị các ngôn ngữ của Myanmar.

Nếu các hoạt động triển khai thiết bị có hỗ trợ tiếng Miến Điện, thì:

* [C-2-1] MUST render text with Unicode compliant font as default;
  non-Unicode compliant font MUST NOT be set as default font unless the user
  chooses it in the language picker.
* [C-2-2] MUST support a Unicode font and a non-Unicode compliant font if a
  non-Unicode compliant font is supported on the device.  Non-Unicode
  compliant font MUST NOT remove or overwrite the Unicode font.
* [C-2-3] MUST render text with non-Unicode compliant font ONLY IF a
  language code with [script code Qaag](
  http://unicode.org/reports/tr35/#unicode_script_subtag_validity) is
  specified (e.g. my-Qaag). No other ISO language or region codes (whether
  assigned, unassigned, or reserved) can be used to refer to non-Unicode
  compliant font for Myanmar. App developers and web page authors can
  specify my-Qaag as the designated language code as they would for any
  other language.

3.8.14. Nhiều cửa sổ

Nếu có khả năng hiển thị nhiều hoạt động cùng một lúc, thì các hoạt động triển khai thiết bị sẽ:

  • [C-1-1] PHẢI triển khai(các) chế độ nhiều cửa sổ như vậy theo hành vi ứng dụng và API được mô tả trong tài liệu hỗ trợ chế độ nhiều cửa sổ của Android SDK và đáp ứng các yêu cầu sau:
  • [C-1-2] PHẢI tuân thủ android:resizeableActivity do một ứng dụng đặt trong tệp AndroidManifest.xml như mô tả trong SDK này.
  • [C-1-3] KHÔNG ĐƯỢC cung cấp chế độ chia đôi màn hình hoặc chế độ hình dáng tuỳ ý nếu chiều cao màn hình nhỏ hơn 440 dp và chiều rộng màn hình nhỏ hơn 440 dp.
  • [C-1-4] Một hoạt động KHÔNG ĐƯỢC đổi kích thước thành kích thước nhỏ hơn 220 dp trong các chế độ nhiều cửa sổ, ngoại trừ chế độ hình trong hình.
  • Các thiết bị có kích thước màn hình xlarge PHẢI hỗ trợ chế độ hình dạng tuỳ ý.

Nếu các hoạt động triển khai thiết bị hỗ trợ(các) chế độ nhiều cửa sổ và chế độ chia đôi màn hình, thì:

  • [C-2-1] PHẢI tải trước một trình chạy có thể đổi kích thước làm trình chạy mặc định.
  • [C-2-2] PHẢI cắt hoạt động được gắn của chế độ nhiều cửa sổ chia đôi màn hình nhưng NÊN cho thấy một số nội dung của hoạt động đó, nếu ứng dụng Trình chạy là cửa sổ được lấy làm tiêu điểm.
  • [C-2-3] PHẢI tuân thủ các giá trị AndroidManifestLayout_minWidthAndroidManifestLayout_minHeight đã khai báo của ứng dụng trình chạy của bên thứ ba và không được ghi đè các giá trị này trong quá trình hiển thị một số nội dung của hoạt động được gắn.

Nếu các chế độ triển khai thiết bị hỗ trợ(các) chế độ nhiều cửa sổ và chế độ nhiều cửa sổ Hình trong hình, thì các chế độ này:

  • [C-3-1] PHẢI chạy các hoạt động ở chế độ nhiều cửa sổ hình trong hình khi ứng dụng: * Nhắm đến API cấp 26 trở lên và khai báo android:supportsPictureInPicture * Nhắm đến API cấp 25 trở xuống và khai báo cả android:resizeableActivityandroid:supportsPictureInPicture.
  • [C-3-2] PHẢI hiển thị các thao tác trong SystemUI theo quy định của hoạt động PIP hiện tại thông qua API setActions().
  • [C-3-3] PHẢI hỗ trợ tỷ lệ khung hình lớn hơn hoặc bằng 1:2,39 và nhỏ hơn hoặc bằng 2,39:1, theo quy định của hoạt động PIP thông qua API setAspectRatio().
  • [C-3-4] PHẢI sử dụng KeyEvent.KEYCODE_WINDOW để điều khiển cửa sổ PiP; nếu không triển khai chế độ PiP, thì khoá PHẢI có sẵn cho hoạt động ở nền trước.
  • [C-3-5] PHẢI cung cấp cho người dùng một thành phần để chặn ứng dụng hiển thị ở chế độ PIP; chế độ triển khai AOSP đáp ứng yêu cầu này bằng cách có các chế độ kiểm soát trong ngăn thông báo.
  • [C-3-6] PHẢI phân bổ chiều rộng và chiều cao tối thiểu sau đây cho cửa sổ PIP khi ứng dụng không khai báo bất kỳ giá trị nào cho AndroidManifestLayout_minWidthAndroidManifestLayout_minHeight:

    • Các thiết bị có Configuration.uiMode được đặt khác với UI_MODE_TYPE_TELEVISION PHẢI phân bổ chiều rộng và chiều cao tối thiểu là 108 dp.
    • Các thiết bị có Configuration.uiMode được đặt thành UI_MODE_TYPE_TELEVISION PHẢI phân bổ chiều rộng tối thiểu là 240 dp và chiều cao tối thiểu là 135 dp.

3.8.15. Vết cắt trên màn hình

Android hỗ trợ phần cắt trên màn hình như mô tả trong tài liệu SDK. API DisplayCutout xác định một vùng ở cạnh màn hình mà ứng dụng có thể không hoạt động được do vết cắt trên màn hình hoặc màn hình cong ở(các) cạnh.

Nếu các hoạt động triển khai thiết bị có(các) vết cắt trên màn hình, thì:

  • [C-1-5] KHÔNG ĐƯỢC có vết cắt nếu tỷ lệ khung hình của thiết bị là 1.0 (1:1).
  • [C-1-2] KHÔNG ĐƯỢC có nhiều hơn một vết cắt trên mỗi cạnh.
  • [C-1-3] PHẢI tuân thủ các cờ vết cắt trên màn hình do ứng dụng đặt thông qua API WindowManager.LayoutParams như mô tả trong SDK.
  • [C-1-4] PHẢI báo cáo các giá trị chính xác cho tất cả chỉ số về vết cắt được xác định trong API DisplayCutout.

3.8.16. Điều khiển thiết bị

Android có các API ControlsProviderServiceControl để cho phép các ứng dụng bên thứ ba xuất bản chế độ điều khiển thiết bị để người dùng xem nhanh trạng thái và thực hiện hành động.

Hãy xem phần 2_2_3 để biết các yêu cầu cụ thể theo từng thiết bị.

3.9. Quản trị thiết bị

Android có các tính năng cho phép những ứng dụng có tính năng bảo mật thực hiện các chức năng quản trị thiết bị ở cấp hệ thống, chẳng hạn như thực thi chính sách mật khẩu hoặc thực hiện thao tác xoá dữ liệu từ xa, thông qua Android Device Administration API.

Nếu các hoạt động triển khai thiết bị triển khai đầy đủ các chính sách quản trị thiết bị được xác định trong tài liệu SDK Android, thì các hoạt động này sẽ:

  • [C-1-1] PHẢI khai báo android.software.device_admin.
  • [C-1-2] PHẢI hỗ trợ hoạt động cung cấp của chủ sở hữu thiết bị như mô tả trong mục 3.9.1mục 3.9.1.1.

3.9.1 Cấp phép thiết bị

3.9.1.1 Cấp phép cho chủ sở hữu thiết bị

Nếu các quy trình triển khai thiết bị khai báo android.software.device_admin, thì các quy trình này sẽ:

  • [C-1-1] PHẢI hỗ trợ đăng ký một Device Policy Client (DPC) làm ứng dụng Chủ sở hữu thiết bị như mô tả dưới đây:
  • [C-1-2] PHẢI yêu cầu người dùng thực hiện một số hành động khẳng định trước hoặc trong quá trình cung cấp để đồng ý đặt ứng dụng làm Chủ sở hữu thiết bị. Sự đồng ý có thể thông qua hành động của người dùng hoặc bằng một số phương tiện theo chương trình, nhưng bạn PHẢI hiển thị thông báo công bố thích hợp (như được tham chiếu trong AOSP) trước khi bắt đầu quy trình cấp phép cho chủ sở hữu thiết bị. Ngoài ra, cơ chế đồng ý của chủ sở hữu thiết bị có lập trình mà (các doanh nghiệp) sử dụng để cung cấp cho chủ sở hữu thiết bị KHÔNG ĐƯỢC gây trở ngại cho Trải nghiệm sử dụng lần đầu đối với mục đích sử dụng không phải của doanh nghiệp.
  • [C-1-3] KHÔNG ĐƯỢC mã hoá cứng trạng thái đồng ý hoặc ngăn người dùng sử dụng các ứng dụng khác của chủ sở hữu thiết bị.

Nếu các quy trình triển khai thiết bị khai báo android.software.device_admin, nhưng cũng bao gồm một giải pháp quản lý Chủ sở hữu thiết bị độc quyền và cung cấp một cơ chế để quảng bá một ứng dụng được định cấu hình trong giải pháp của họ dưới dạng "tương đương với Chủ sở hữu thiết bị" cho "Chủ sở hữu thiết bị" tiêu chuẩn theo cách mà các API DevicePolicyManager tiêu chuẩn của Android nhận dạng, thì các quy trình triển khai đó:

  • [C-2-1] PHẢI có quy trình xác minh rằng ứng dụng cụ thể đang được quảng bá thuộc về một giải pháp quản lý thiết bị doanh nghiệp hợp pháp và ứng dụng đó đã được định cấu hình trong giải pháp độc quyền để có các quyền tương đương với "Chủ sở hữu thiết bị".
  • [C-2-2] PHẢI cho thấy thông tin công bố tương tự về sự đồng ý của Chủ sở hữu thiết bị AOSP như quy trình do android.app.action.PROVISION_MANAGED_DEVICE khởi tạo trước khi đăng ký ứng dụng DPC làm "Chủ sở hữu thiết bị".
  • CÓ THỂ có dữ liệu người dùng trên thiết bị trước khi đăng ký ứng dụng DPC làm "Chủ sở hữu thiết bị".
3.9.1.2 Cấp phép hồ sơ được quản lý

Nếu các quy trình triển khai thiết bị khai báo android.software.managed_users, thì các quy trình này sẽ:

  • [C-1-1] PHẢI triển khai API cho phép ứng dụng Trình kiểm soát chính sách thiết bị (DPC) trở thành chủ sở hữu của một Hồ sơ được quản lý mới.

  • [C-1-2] Quy trình cung cấp hồ sơ được quản lý (quy trình do android.app.action.PROVISION_MANAGED_PROFILE khởi tạo) mà người dùng trải nghiệm PHẢI phù hợp với cách triển khai AOSP.

  • [C-1-3] PHẢI cung cấp các tiện ích sau cho người dùng trong phần Cài đặt để cho người dùng biết khi một chức năng hệ thống cụ thể bị Trình kiểm soát chính sách thiết bị (DPC) vô hiệu hoá:

    • Một biểu tượng nhất quán hoặc các chỉ dẫn khác cho người dùng (ví dụ: biểu tượng thông tin AOSP ở nguồn trên) để biểu thị thời điểm một chế độ cài đặt cụ thể bị Quản trị viên thiết bị hạn chế.
    • Một thông báo giải thích ngắn gọn, do Quản trị viên thiết bị cung cấp thông qua setShortSupportMessage.
    • Biểu tượng của ứng dụng DPC.

3.9.2 Hỗ trợ hồ sơ được quản lý

Nếu các quy trình triển khai thiết bị khai báo android.software.managed_users, thì các quy trình này sẽ:

  • [C-1-1] PHẢI hỗ trợ hồ sơ được quản lý thông qua API android.app.admin.DevicePolicyManager.
  • [C-1-2] PHẢI cho phép tạo một và chỉ một hồ sơ được quản lý.
  • [C-1-3] PHẢI sử dụng huy hiệu biểu tượng (tương tự như huy hiệu công việc nguồn mở AOSP) để biểu thị các ứng dụng và tiện ích được quản lý cũng như các thành phần giao diện người dùng có huy hiệu khác như mục Gần đây và Thông báo.
  • [C-1-4] PHẢI hiển thị một biểu tượng thông báo (tương tự như huy hiệu công việc ngược dòng AOSP) để cho biết thời điểm người dùng đang ở trong một ứng dụng hồ sơ được quản lý.
  • [C-1-5] PHẢI hiển thị thông báo dạng nổi cho biết người dùng đang ở trong hồ sơ được quản lý nếu và khi thiết bị chuyển sang trạng thái hoạt động (ACTION_USER_PRESENT) và ứng dụng ở nền trước nằm trong hồ sơ được quản lý.
  • [C-1-6] Khi có hồ sơ được quản lý, bạn PHẢI hiển thị một chỉ báo trực quan trong "Bộ chọn" Intent để cho phép người dùng chuyển tiếp ý định từ hồ sơ được quản lý sang người dùng chính hoặc ngược lại, nếu Bộ điều khiển chính sách thiết bị bật tính năng này.
  • [C-1-7] Khi có hồ sơ được quản lý, PHẢI cung cấp các lựa chọn sau cho cả người dùng chính và hồ sơ được quản lý:
    • Kế toán riêng cho mức sử dụng pin, vị trí, dữ liệu di động và bộ nhớ của người dùng chính và hồ sơ được quản lý.
    • Quản lý độc lập các ứng dụng VPN được cài đặt trong người dùng chính hoặc hồ sơ được quản lý.
    • Quản lý độc lập các ứng dụng được cài đặt trong hồ sơ người dùng chính hoặc hồ sơ được quản lý.
    • Quản lý độc lập các tài khoản trong hồ sơ người dùng chính hoặc hồ sơ được quản lý.
  • [C-1-8] PHẢI đảm bảo rằng các ứng dụng quay số, danh bạ và nhắn tin được cài đặt sẵn có thể tìm kiếm và tra cứu thông tin người gọi trong hồ sơ được quản lý (nếu có) cùng với thông tin trong hồ sơ chính, nếu Bộ kiểm soát chính sách thiết bị cho phép.
  • [C-1-9] PHẢI đảm bảo rằng thiết bị đáp ứng tất cả các yêu cầu bảo mật áp dụng cho thiết bị có nhiều người dùng (xem mục 9.5), ngay cả khi hồ sơ được quản lý không được tính là một người dùng khác ngoài người dùng chính.

Nếu các phương thức triển khai thiết bị khai báo android.software.managed_usersandroid.software.secure_lock_screen, thì chúng sẽ:

  • [C-2-1] PHẢI hỗ trợ khả năng chỉ định một màn hình khoá riêng biệt đáp ứng các yêu cầu sau để cấp quyền truy cập chỉ cho các ứng dụng chạy trong một hồ sơ được quản lý.
    • Các hoạt động triển khai thiết bị PHẢI tuân thủ ý định DevicePolicyManager.ACTION_SET_NEW_PASSWORD và hiển thị một giao diện để định cấu hình thông tin đăng nhập riêng cho màn hình khoá của hồ sơ được quản lý.
    • Thông tin đăng nhập trên màn hình khoá của hồ sơ được quản lý PHẢI sử dụng cùng cơ chế quản lý và lưu trữ thông tin đăng nhập như hồ sơ chính, theo tài liệu trên Trang web Dự án nguồn mở Android.
    • Chính sách mật khẩu của DPC CHỈ được áp dụng cho thông tin đăng nhập trên màn hình khoá của hồ sơ được quản lý, trừ phi được gọi trên phiên bản DevicePolicyManager do getParentProfileInstance trả về.
  • Khi danh bạ trong hồ sơ được quản lý xuất hiện trong nhật ký cuộc gọi được cài đặt sẵn, giao diện người dùng trong cuộc gọi, thông báo về cuộc gọi đang diễn ra và cuộc gọi nhỡ, ứng dụng danh bạ và ứng dụng nhắn tin PHẢI được gắn huy hiệu bằng cùng một huy hiệu dùng để cho biết các ứng dụng trong hồ sơ được quản lý.

3.9.3 Hỗ trợ người dùng được quản lý

Nếu các quy trình triển khai thiết bị khai báo android.software.managed_users, thì các quy trình này sẽ:

  • [C-1-1] PHẢI cung cấp cho người dùng một cách thức để đăng xuất người dùng hiện tại và chuyển về người dùng chính trong phiên nhiều người dùng khi isLogoutEnabled trả về true. Người dùng PHẢI có thể truy cập vào thành phần tương tác này từ màn hình khoá mà không cần mở khoá thiết bị.

3.10. Hỗ trợ tiếp cận

Android cung cấp một lớp hỗ trợ tiếp cận giúp người dùng khuyết tật dễ dàng thao tác trên thiết bị của họ hơn. Ngoài ra, Android cung cấp các API nền tảng cho phép các hoạt động triển khai dịch vụ hỗ trợ tiếp cận nhận lệnh gọi lại cho các sự kiện của người dùng và hệ thống, đồng thời tạo các cơ chế phản hồi thay thế, chẳng hạn như chuyển văn bản sang lời nói, phản hồi xúc giác và điều hướng bằng bi xoay/d-pad.

Nếu các chế độ triển khai thiết bị hỗ trợ dịch vụ trợ năng của bên thứ ba, thì:

  • [C-1-1] PHẢI triển khai khung hỗ trợ tiếp cận của Android như mô tả trong tài liệu SDK về các API hỗ trợ tiếp cận.
  • [C-1-2] PHẢI tạo sự kiện hỗ trợ tiếp cận và phân phối AccessibilityEvent thích hợp cho tất cả các phương thức triển khai AccessibilityService đã đăng ký như được ghi lại trong SDK.
  • [C-1-4] PHẢI thêm một nút vào thanh điều hướng của hệ thống để cho phép người dùng kiểm soát dịch vụ hỗ trợ tiếp cận khi các dịch vụ hỗ trợ tiếp cận đã bật khai báo AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON . Xin lưu ý rằng yêu cầu này không áp dụng cho những thiết bị triển khai không có thanh thao tác hệ thống, nhưng các thiết bị triển khai NÊN cung cấp một cơ chế cho người dùng để kiểm soát các dịch vụ hỗ trợ tiếp cận này.

Nếu các hoạt động triển khai thiết bị có các dịch vụ hỗ trợ tiếp cận được cài đặt sẵn, thì các dịch vụ đó:

  • [C-2-1] PHẢI triển khai các dịch vụ hỗ trợ tiếp cận được cài đặt sẵn này dưới dạng ứng dụng Hỗ trợ chế độ Khởi động trực tiếp khi bộ nhớ dữ liệu được mã hoá bằng phương thức Mã hoá dựa trên tệp (FBE).
  • NÊN cung cấp một cơ chế trong quy trình thiết lập ban đầu để người dùng bật các dịch vụ hỗ trợ tiếp cận có liên quan, cũng như các lựa chọn điều chỉnh cỡ chữ, kích thước hiển thị và cử chỉ phóng to.

3.11. Chuyển văn bản sang lời nói

Android có các API cho phép ứng dụng sử dụng dịch vụ chuyển văn bản sang lời nói (TTS) và cho phép nhà cung cấp dịch vụ triển khai các dịch vụ TTS.

Nếu các phương thức triển khai thiết bị báo cáo tính năng android.hardware.audio.output, thì:

Nếu các hoạt động triển khai thiết bị hỗ trợ việc cài đặt công cụ TTS của bên thứ ba, thì các hoạt động này:

  • [C-2-1] PHẢI cung cấp cho người dùng khả năng chọn một công cụ TTS để sử dụng ở cấp hệ thống.

3.12. Khung đầu vào TV

Khung đầu vào của Android Television (TIF) giúp đơn giản hoá việc phân phối nội dung phát trực tiếp đến các thiết bị Android Television. TIF cung cấp một API tiêu chuẩn để tạo các mô-đun đầu vào kiểm soát các thiết bị Android TV.

Nếu các hoạt động triển khai thiết bị hỗ trợ TIF, thì:

  • [C-1-1] PHẢI khai báo tính năng nền tảng android.software.live_tv.
  • [C-1-2] PHẢI hỗ trợ tất cả các API TIF để có thể cài đặt và sử dụng trên thiết bị một ứng dụng dùng các API này và dịch vụ đầu vào dựa trên TIF của bên thứ ba.

3.13. Cài đặt nhanh

Android cung cấp một thành phần giao diện người dùng Cài đặt nhanh, cho phép truy cập nhanh vào các thao tác thường dùng hoặc cần thiết ngay lập tức.

Nếu các hoạt động triển khai thiết bị có thành phần giao diện người dùng Cài đặt nhanh và hỗ trợ chế độ Cài đặt nhanh của bên thứ ba, thì:

  • [C-1-1] PHẢI cho phép người dùng thêm hoặc xoá các ô được cung cấp thông qua API quicksettings khỏi ứng dụng bên thứ ba.
  • [C-1-2] KHÔNG ĐƯỢC tự động thêm một ô từ ứng dụng bên thứ ba trực tiếp vào trình đơn Cài đặt nhanh.
  • [C-1-3] PHẢI hiển thị tất cả các ô do người dùng thêm từ ứng dụng bên thứ ba cùng với các ô cài đặt nhanh do hệ thống cung cấp.

3.14. Giao diện người dùng đa phương tiện

Nếu các ứng dụng được triển khai trên thiết bị bao gồm những ứng dụng không kích hoạt bằng giọng nói (Các ứng dụng) tương tác với các ứng dụng bên thứ ba thông qua MediaBrowser hoặc MediaSession, thì Các ứng dụng:

  • [C-1-2] PHẢI hiển thị rõ ràng các biểu tượng thu được thông qua getIconBitmap() hoặc getIconUri() và tiêu đề thu được thông qua getTitle() như mô tả trong MediaDescription. Có thể rút ngắn tiêu đề để tuân thủ các quy định về an toàn (ví dụ: sự mất tập trung của người lái xe).

  • [C-1-3] PHẢI hiển thị biểu tượng ứng dụng bên thứ ba bất cứ khi nào hiển thị nội dung do ứng dụng bên thứ ba này cung cấp.

  • [C-1-4] PHẢI cho phép người dùng tương tác với toàn bộ hệ thống phân cấp MediaBrowser. CÓ THỂ hạn chế quyền truy cập vào một phần của hệ thống phân cấp để tuân thủ các quy định an toàn (ví dụ: sự mất tập trung của người lái xe), nhưng KHÔNG ĐƯỢC ưu tiên dựa trên nội dung hoặc nhà cung cấp nội dung.

  • [C-1-5] PHẢI coi thao tác nhấn đúp vào KEYCODE_HEADSETHOOK hoặc KEYCODE_MEDIA_PLAY_PAUSEKEYCODE_MEDIA_NEXT đối với MediaSession.Callback#onMediaButtonEvent.

3.15. Ứng dụng tức thì

Các hoạt động triển khai thiết bị PHẢI đáp ứng các yêu cầu sau:

  • [C-0-1] Ứng dụng tức thì CHỈ được cấp các quyền có android:protectionLevel được đặt thành "instant".
  • [C-0-2] Ứng dụng tức thì KHÔNG ĐƯỢC tương tác với các ứng dụng đã cài đặt thông qua intent ngầm, trừ phi một trong các trường hợp sau đây xảy ra:
    • Bộ lọc mẫu ý định của thành phần được hiển thị và có CATEGORY_BROWSABLE
    • Thao tác này là một trong các thao tác ACTION_SEND, ACTION_SENDTO, ACTION_SEND_MULTIPLE
    • Mục tiêu được hiển thị rõ ràng bằng android:visibleToInstantApps
  • [C-0-3] Ứng dụng tức thì KHÔNG ĐƯỢC tương tác một cách rõ ràng với các ứng dụng đã cài đặt, trừ phi thành phần đó được hiển thị thông qua android:visibleToInstantApps.
  • [C-0-4] Các ứng dụng đã cài đặt KHÔNG ĐƯỢC xem thông tin chi tiết về Ứng dụng tức thì trên thiết bị, trừ phi Ứng dụng tức thì kết nối rõ ràng với ứng dụng đã cài đặt.

Nếu các hoạt động triển khai thiết bị hỗ trợ ứng dụng tức thì, thì các hoạt động này sẽ:

  • [C-1-1] PHẢI cung cấp những lựa chọn sau đây cho người dùng để tương tác với Ứng dụng tức thì. AOSP đáp ứng các yêu cầu bằng Giao diện người dùng hệ thống, Cài đặt và Trình chạy mặc định.
  • [C-1-2] PHẢI cung cấp cho người dùng một cách thức để xem và xoá các Ứng dụng tức thì được lưu vào bộ nhớ đệm cục bộ cho từng gói ứng dụng riêng lẻ.
  • [C-1-3] PHẢI cung cấp một thông báo liên tục cho người dùng có thể thu gọn trong khi Ứng dụng tức thì đang chạy ở nền trước. Thông báo này CHO NGƯỜI DÙNG PHẢI cho biết rằng Ứng dụng tức thì không yêu cầu cài đặt và cung cấp cho người dùng một thành phần điều hướng để chuyển người dùng đến màn hình thông tin ứng dụng trong phần Cài đặt. Đối với Ứng dụng tức thì được khởi chạy thông qua ý định trên web (được xác định bằng cách sử dụng một ý định có thao tác được đặt thành Intent.ACTION_VIEW và có lược đồ là "http" hoặc "https"), một cơ chế bổ sung cho người dùng NÊN cho phép người dùng không khởi chạy Ứng dụng tức thì và khởi chạy đường liên kết được liên kết bằng trình duyệt web đã định cấu hình (nếu có trình duyệt trên thiết bị).
  • [C-1-4] PHẢI cho phép truy cập vào các ứng dụng Instant từ chức năng Gần đây nếu chức năng này có trên thiết bị.
  • [C-1-5] PHẢI tải trước một hoặc nhiều ứng dụng hoặc thành phần dịch vụ bằng một trình xử lý ý định cho các ý định được liệt kê trong SDK tại đây và hiển thị các ý định cho Ứng dụng tức thì.

3.16. Ghép nối thiết bị đồng hành

Android hỗ trợ tính năng ghép nối thiết bị đồng hành để quản lý hiệu quả hơn mối liên kết với thiết bị đồng hành và cung cấp API CompanionDeviceManager để các ứng dụng truy cập vào tính năng này.

Nếu các hoạt động triển khai thiết bị hỗ trợ tính năng ghép nối thiết bị đồng hành, thì:

  • [C-1-1] PHẢI khai báo cờ tính năng FEATURE_COMPANION_DEVICE_SETUP .
  • [C-1-2] PHẢI đảm bảo triển khai đầy đủ các API trong gói android.companion.
  • [C-1-3] PHẢI cung cấp cho người dùng các lựa chọn để chọn/xác nhận rằng thiết bị đồng hành đang hoạt động.

3.17. Ứng dụng có kích thước lớn

Nếu các phương thức triển khai thiết bị khai báo tính năng FEATURE_CANT_SAVE_STATE, thì các phương thức triển khai đó sẽ:

  • [C-1-1] CHỈ ĐƯỢC có một ứng dụng đã cài đặt chỉ định cantSaveState đang chạy trong hệ thống tại một thời điểm. Nếu người dùng rời khỏi một ứng dụng như vậy mà không thoát rõ ràng (ví dụ: bằng cách nhấn vào nút trang chủ trong khi rời khỏi một hoạt động đang hoạt động của hệ thống, thay vì nhấn vào nút quay lại khi không còn hoạt động nào đang hoạt động trong hệ thống), thì các hoạt động triển khai thiết bị PHẢI ưu tiên ứng dụng đó trong RAM như đối với những thứ khác dự kiến sẽ tiếp tục chạy, chẳng hạn như các dịch vụ trên nền trước. Khi ứng dụng như vậy chạy ở chế độ nền, hệ thống vẫn có thể áp dụng các tính năng quản lý nguồn điện cho ứng dụng đó, chẳng hạn như hạn chế quyền truy cập vào CPU và mạng.
  • [C-1-2] PHẢI cung cấp một giao diện người dùng để chọn ứng dụng sẽ không tham gia vào cơ chế lưu/khôi phục trạng thái bình thường sau khi người dùng chạy một ứng dụng thứ hai được khai báo bằng thuộc tính cantSaveState.
  • [C-1-3] KHÔNG ĐƯỢC áp dụng các thay đổi khác trong chính sách đối với những ứng dụng chỉ định cantSaveState, chẳng hạn như thay đổi hiệu suất CPU hoặc thay đổi mức độ ưu tiên lập lịch.

Nếu các hoạt động triển khai thiết bị không khai báo tính năng FEATURE_CANT_SAVE_STATE, thì các hoạt động này sẽ:

  • [C-1-1] PHẢI bỏ qua bộ thuộc tính cantSaveState do các ứng dụng đặt và KHÔNG ĐƯỢC thay đổi hành vi của ứng dụng dựa trên thuộc tính đó.

3.18. Danh bạ

Android có các API Contacts Provider để cho phép các ứng dụng quản lý thông tin liên hệ được lưu trữ trên thiết bị. Dữ liệu liên hệ được nhập trực tiếp vào thiết bị thường được đồng bộ hoá với một dịch vụ web, nhưng dữ liệu CŨNG CÓ THỂ chỉ lưu trữ cục bộ trên thiết bị. Những người liên hệ chỉ được lưu trữ trên thiết bị được gọi là người liên hệ cục bộ.

RawContacts được "liên kết với" hoặc "lưu trữ trong" một Account khi các cột ACCOUNT_NAMEACCOUNT_TYPE cho các số điện thoại không trùng lặp khớp với các trường Account.nameAccount.type tương ứng của tài khoản.

Tài khoản cục bộ mặc định: tài khoản cho các số liên lạc thô chỉ được lưu trữ trên thiết bị và không được liên kết với Tài khoản trong AccountManager, được tạo bằng các giá trị null cho các cột ACCOUNT_NAMEACCOUNT_TYPE.

Tài khoản cục bộ tuỳ chỉnh: tài khoản cho các số liên hệ thô chỉ được lưu trữ trên thiết bị và không được liên kết với Tài khoản trong AccountManager, được tạo bằng ít nhất một giá trị không rỗng cho các cột ACCOUNT_NAMEACCOUNT_TYPE.

Cách triển khai thiết bị:

  • [C-SR] KHÔNG NÊN tạo tài khoản cục bộ tuỳ chỉnh.

Nếu các chế độ triển khai thiết bị sử dụng tài khoản cục bộ tuỳ chỉnh:

  • [C-1-1] ACCOUNT_NAME của tài khoản cục bộ tuỳ chỉnh PHẢI được ContactsContract.RawContacts.getLocalAccountName trả về
  • [C-1-2] ACCOUNT_TYPE của tài khoản cục bộ tuỳ chỉnh PHẢI được trả về theo ContactsContract.RawContacts.getLocalAccountType
  • [C-1-3] Các ứng dụng bên thứ ba chèn danh bạ thô bằng tài khoản cục bộ mặc định (tức là bằng cách đặt giá trị rỗng cho ACCOUNT_NAMEACCOUNT_TYPE) PHẢI được chèn vào tài khoản cục bộ tuỳ chỉnh.
  • [C-1-4] Các số điện thoại liên hệ thô được chèn vào tài khoản tuỳ chỉnh trên thiết bị KHÔNG được xoá khi tài khoản được thêm hoặc xoá.
  • [C-1-5] Các thao tác xoá được thực hiện đối với tài khoản cục bộ tuỳ chỉnh PHẢI dẫn đến việc các danh bạ thô bị xoá ngay lập tức (như thể tham số CALLER_IS_SYNCADAPTER được đặt thành true), ngay cả khi tham số CALLER\_IS\_SYNCADAPTER được đặt thành false hoặc không được chỉ định.

4. Khả năng tương thích của việc đóng gói ứng dụng

Các cách triển khai thiết bị:

  • [C-0-1] PHẢI có khả năng cài đặt và chạy các tệp ".apk" của Android do công cụ "aapt" tạo ra trong SDK Android chính thức.
  • Vì yêu cầu nêu trên có thể gây khó khăn, nên các hoạt động triển khai thiết bị NÊN sử dụng hệ thống quản lý gói của chế độ triển khai tham chiếu AOSP.

Cách triển khai thiết bị:

  • [C-0-2] PHẢI hỗ trợ xác minh các tệp ".apk" bằng Lược đồ chữ ký APK phiên bản 3 , Lược đồ chữ ký APK phiên bản 2Tính năng ký JAR.
  • [C-0-3] KHÔNG ĐƯỢC mở rộng định dạng .apk, Tệp kê khai Android, mã byte Dalvik hoặc mã byte RenderScript theo cách ngăn các tệp đó cài đặt và chạy đúng cách trên các thiết bị tương thích khác.
  • [C-0-4] KHÔNG ĐƯỢC phép các ứng dụng khác ngoài "trình cài đặt mặc định" hiện tại của gói tự động gỡ cài đặt ứng dụng mà không cần người dùng xác nhận, như được ghi lại trong SDK cho quyền DELETE_PACKAGE. Ngoại lệ duy nhất là ứng dụng trình xác minh gói hệ thống xử lý ý định PACKAGE_NEEDS_VERIFICATION và ứng dụng trình quản lý bộ nhớ xử lý ý định ACTION_MANAGE_STORAGE.

  • [C-0-5] PHẢI có một hoạt động xử lý ý định android.settings.MANAGE_UNKNOWN_APP_SOURCES.

  • [C-0-6] KHÔNG ĐƯỢC cài đặt các gói ứng dụng từ nguồn không xác định, trừ phi ứng dụng yêu cầu cài đặt đáp ứng tất cả các yêu cầu sau:

    • Bạn PHẢI khai báo quyền REQUEST_INSTALL_PACKAGES hoặc đặt android:targetSdkVersion ở mức 24 trở xuống.
    • Người dùng PHẢI cấp quyền cài đặt ứng dụng từ các nguồn không xác định.
  • NÊN cung cấp cho người dùng một phương thức để cấp/thu hồi quyền cài đặt ứng dụng từ các nguồn không xác định cho mỗi ứng dụng, nhưng CÓ THỂ chọn triển khai phương thức này dưới dạng một thao tác không có hiệu lực và trả về RESULT_CANCELED cho startActivityForResult(), nếu quá trình triển khai trên thiết bị không muốn cho phép người dùng có lựa chọn này. Tuy nhiên, ngay cả trong những trường hợp như vậy, họ CẦN cho người dùng biết lý do không có lựa chọn đó.

  • [C-0-7] PHẢI hiển thị một hộp thoại cảnh báo có chuỗi cảnh báo được cung cấp thông qua API hệ thống PackageManager.setHarmfulAppWarning cho người dùng trước khi chạy một hoạt động trong ứng dụng đã được API hệ thống PackageManager.setHarmfulAppWarning đánh dấu là có khả năng gây hại.

  • NÊN cung cấp cho người dùng một lựa chọn để chọn gỡ cài đặt hoặc chạy một ứng dụng trên hộp thoại cảnh báo.

  • [C-0-8] PHẢI triển khai tính năng hỗ trợ Hệ thống tệp gia tăng như được ghi lại tại đây.

  • [C-0-9] PHẢI hỗ trợ xác minh các tệp .apk bằng Lược đồ chữ ký APK v4.

  • Nếu các hoạt động triển khai thiết bị đã được ra mắt trên một phiên bản Android cũ hơn và không thể đáp ứng các yêu cầu [C-0-8] và [C-0-9] thông qua bản cập nhật phần mềm hệ thống, thì các hoạt động triển khai đó CÓ THỂ được miễn các yêu cầu này.

5. Khả năng tương thích với nội dung đa phương tiện

Cách triển khai thiết bị:

  • [C-0-1] PHẢI hỗ trợ các định dạng nội dung nghe nhìn, bộ mã hoá, bộ giải mã, loại tệp và định dạng vùng chứa được xác định trong mục 5.1 cho từng bộ mã hoá và giải mã mà MediaCodecList khai báo.
  • [C-0-2] PHẢI khai báo và báo cáo việc hỗ trợ các bộ mã hoá, bộ giải mã mà các ứng dụng bên thứ ba có thể sử dụng thông qua MediaCodecList.
  • [C-0-3] PHẢI có khả năng giải mã đúng cách và cung cấp cho các ứng dụng bên thứ ba tất cả các định dạng mà ứng dụng có thể mã hoá. Điều này bao gồm tất cả các luồng bit mà bộ mã hoá của nó tạo ra và các hồ sơ được báo cáo trong CamcorderProfile.

Cách triển khai thiết bị:

  • NÊN hướng đến độ trễ tối thiểu của bộ mã hoá và giải mã, nói cách khác, các bộ mã hoá và giải mã này
    • KHÔNG ĐƯỢC sử dụng và lưu trữ các vùng đệm đầu vào, đồng thời chỉ trả về các vùng đệm đầu vào sau khi xử lý.
    • KHÔNG NÊN giữ lại các vùng đệm đã giải mã lâu hơn thời gian được chỉ định theo tiêu chuẩn (ví dụ: SPS).
    • KHÔNG ĐƯỢC giữ lại các vùng đệm được mã hoá lâu hơn thời gian cần thiết theo cấu trúc GOP.

Tất cả các bộ mã hoá và giải mã được liệt kê trong phần bên dưới đều được cung cấp dưới dạng các hoạt động triển khai phần mềm trong hoạt động triển khai Android ưu tiên từ Dự án nguồn mở Android.

Xin lưu ý rằng cả Google lẫn Open Handset Alliance đều không tuyên bố rằng các bộ mã hoá và giải mã này không vi phạm bằng sáng chế của bên thứ ba. Những người dự định sử dụng mã nguồn này trong các sản phẩm phần cứng hoặc phần mềm nên lưu ý rằng việc triển khai mã này (kể cả trong phần mềm nguồn mở hoặc phần mềm chia sẻ) có thể yêu cầu giấy phép bằng sáng chế của chủ sở hữu bằng sáng chế có liên quan.

5.1. Bộ mã hoá và giải mã nội dung nghe nhìn

5.1.1. Mã hoá âm thanh

Xem thêm thông tin chi tiết trong phần 5.1.3. Thông tin chi tiết về bộ mã hoá và giải mã âm thanh.

Nếu các chế độ triển khai thiết bị khai báo android.hardware.microphone, thì các chế độ này PHẢI hỗ trợ mã hoá các định dạng âm thanh sau và cung cấp các định dạng này cho ứng dụng bên thứ ba:

  • [C-1-1] PCM/WAVE
  • [C-1-2] FLAC
  • [C-1-3] Opus

Tất cả bộ mã hoá âm thanh PHẢI hỗ trợ:

5.1.2. Giải mã âm thanh

Xem thêm thông tin chi tiết trong phần 5.1.3. Thông tin chi tiết về bộ mã hoá và giải mã âm thanh.

Nếu các hoạt động triển khai thiết bị khai báo hỗ trợ tính năng android.hardware.audio.output, thì các hoạt động này phải hỗ trợ việc giải mã các định dạng âm thanh sau:

  • [C-1-1] Cấu hình AAC MPEG-4 (AAC LC)
  • [C-1-2] Cấu hình HE AAC MPEG-4 (AAC+)
  • [C-1-3] Cấu hình MPEG-4 HE AACv2 (AAC+ nâng cao)
  • [C-1-4] AAC ELD (AAC có độ trễ thấp nâng cao)
  • [C-1-11] xHE-AAC (Hồ sơ HE AAC mở rộng theo tiêu chuẩn ISO/IEC 23003-3, bao gồm Hồ sơ cơ sở USAC và Hồ sơ kiểm soát dải động theo tiêu chuẩn ISO/IEC 23003-4)
  • [C-1-5] FLAC
  • [C-1-6] MP3
  • [C-1-7] MIDI
  • [C-1-8] Vorbis
  • [C-1-9] PCM/WAVE, bao gồm cả các định dạng âm thanh có độ phân giải cao lên đến 24 bit, tốc độ lấy mẫu 192 kHz và 8 kênh. Xin lưu ý rằng yêu cầu này chỉ dành cho việc giải mã và thiết bị được phép giảm mẫu và giảm số kênh trong giai đoạn phát.
  • [C-1-10] Opus

Nếu các hoạt động triển khai thiết bị hỗ trợ việc giải mã các vùng đệm đầu vào AAC của luồng đa kênh (tức là có nhiều hơn 2 kênh) thành PCM thông qua bộ giải mã âm thanh AAC mặc định trong API android.media.MediaCodec, thì các hoạt động triển khai đó PHẢI hỗ trợ những điều sau:

  • [C-2-1] Bạn PHẢI giải mã mà không cần trộn âm thanh (ví dụ: luồng AAC 5.0 phải được giải mã thành 5 kênh PCM, luồng AAC 5.1 phải được giải mã thành 6 kênh PCM).
  • [C-2-2] Siêu dữ liệu dải động PHẢI được xác định trong phần "Kiểm soát dải động (DRC)" trong ISO/IEC 14496-3 và các khoá DRC android.media.MediaFormat để định cấu hình các hành vi liên quan đến dải động của bộ giải mã âm thanh. Các khoá AAC DRC được giới thiệu trong API 21 và là: KEY_AAC_DRC_ATTENUATION_FACTOR, KEY_AAC_DRC_BOOST_FACTOR, KEY_AAC_DRC_HEAVY_COMPRESSION, KEY_AAC_DRC_TARGET_REFERENCE_LEVELKEY_AAC_ENCODED_TARGET_LEVEL.
  • [SR] TẤT CẢ bộ giải mã âm thanh AAC đều NÊN đáp ứng các yêu cầu C-2-1 và C-2-2 nêu trên.

Khi giải mã âm thanh USAC, MPEG-D (ISO/IEC 23003-4):

  • [C-3-1] Siêu dữ liệu về độ lớn và DRC PHẢI được diễn giải và áp dụng theo Cấu hình kiểm soát dải động cấp 1 của MPEG-D DRC.
  • [C-3-2] Bộ giải mã PHẢI hoạt động theo cấu hình được đặt bằng các khoá android.media.MediaFormat sau đây: KEY_AAC_DRC_TARGET_REFERENCE_LEVELKEY_AAC_DRC_EFFECT_TYPE.

Bộ giải mã hồ sơ MPEG-4 AAC, HE AAC và HE AACv2:

  • CÓ THỂ hỗ trợ kiểm soát độ lớn và dải động bằng cách sử dụng Cấu hình kiểm soát dải động ISO/IEC 23003-4.

Nếu ISO/IEC 23003-4 được hỗ trợ và cả siêu dữ liệu ISO/IEC 23003-4 và ISO/IEC 14496-3 đều có trong một luồng bit đã giải mã, thì:

  • Siêu dữ liệu ISO/IEC 23003-4 PHẢI được ưu tiên.

Tất cả bộ giải mã âm thanh PHẢI hỗ trợ đầu ra:

5.1.3. Thông tin chi tiết về bộ mã hoá và giải mã âm thanh

Định dạng/Bộ mã hoá và giải mã Chi tiết Các loại tệp/định dạng vùng chứa được hỗ trợ
Hồ sơ AAC MPEG-4
(AAC LC)
Hỗ trợ nội dung đơn âm/âm thanh nổi/5.0/5.1 với tốc độ lấy mẫu tiêu chuẩn từ 8 đến 48 kHz.
  • 3GPP (.3gp)
  • MPEG-4 (.mp4, .m4a)
  • ADTS raw AAC (.aac, không hỗ trợ ADIF)
  • MPEG-TS (.ts, không tìm kiếm được, chỉ giải mã)
  • Matroska (.mkv, chỉ giải mã)
Hồ sơ MPEG-4 HE AAC (AAC+) Hỗ trợ nội dung đơn âm/âm thanh nổi/5.0/5.1 với tốc độ lấy mẫu tiêu chuẩn từ 16 đến 48 kHz.
  • 3GPP (.3gp)
  • MPEG-4 (.mp4, .m4a)
Hồ sơ MPEG-4 HE AACv2
(AAC+ nâng cao)
Hỗ trợ nội dung đơn âm/âm thanh nổi/5.0/5.1 với tốc độ lấy mẫu tiêu chuẩn từ 16 đến 48 kHz.
  • 3GPP (.3gp)
  • MPEG-4 (.mp4, .m4a)
AAC ELD (AAC có độ trễ thấp nâng cao) Hỗ trợ nội dung đơn âm/âm thanh nổi với tốc độ lấy mẫu tiêu chuẩn từ 16 đến 48 kHz.
  • 3GPP (.3gp)
  • MPEG-4 (.mp4, .m4a)
USAC Hỗ trợ nội dung đơn âm/âm thanh nổi với tốc độ lấy mẫu tiêu chuẩn từ 7,35 đến 48 kHz. MPEG-4 (.mp4, .m4a)
AMR-NB 4,75 đến 12,2 kbps được lấy mẫu ở tần số 8 kHz 3GPP (.3gp)
AMR-WB 9 tốc độ từ 6,60 kbit/giây đến 23,85 kbit/giây được lấy mẫu ở tốc độ 16 kHz, như được xác định tại AMR-WB, Bộ mã hoá và giải mã giọng nói băng tần rộng đa tốc độ thích ứng 3GPP (.3gp)
FLAC Đối với cả bộ mã hoá và bộ giải mã: bạn PHẢI hỗ trợ ít nhất chế độ Đơn âm và Âm thanh nổi. Bạn PHẢI hỗ trợ tốc độ lấy mẫu lên đến 192 kHz; PHẢI hỗ trợ độ phân giải 16 bit và 24 bit. Bạn PHẢI xử lý dữ liệu âm thanh FLAC 24 bit bằng cấu hình âm thanh dấu phẩy động.
  • FLAC (.flac)
  • MPEG-4 (.mp4, .m4a, chỉ giải mã)
  • Matroska (.mkv, chỉ giải mã)
MP3 Âm thanh đơn kênh/âm thanh nổi có tốc độ bit không đổi (CBR) hoặc tốc độ bit thay đổi (VBR) từ 8 đến 320 Kb/giây
  • MP3 (.mp3)
  • MPEG-4 (.mp4, .m4a, chỉ giải mã)
  • Matroska (.mkv, chỉ giải mã)
MIDI MIDI loại 0 và 1. DLS phiên bản 1 và 2. XMF và Mobile XMF. Hỗ trợ các định dạng nhạc chuông RTTTL/RTX, OTA và iMelody
  • Loại 0 và 1 (.mid, .xmf, .mxmf)
  • RTTTL/RTX (.rtttl, .rtx)
  • iMelody (.imy)
Vorbis
  • Ogg (.ogg)
  • MPEG-4 (.mp4, .m4a, chỉ giải mã)
  • Matroska (.mkv)
  • Webm (.webm)
PCM/WAVE Bộ mã hoá và giải mã PCM PHẢI hỗ trợ PCM tuyến tính 16 bit và dấu phẩy động 16 bit. Trình trích xuất WAVE phải hỗ trợ PCM tuyến tính 16 bit, 24 bit, 32 bit và dấu phẩy động 32 bit (tốc độ lên đến giới hạn của phần cứng). Tốc độ lấy mẫu PHẢI được hỗ trợ từ 8 kHz đến 192 kHz. WAVE (.wav)
Opus Giải mã: Hỗ trợ nội dung đơn âm, âm thanh nổi, 5.0 và 5.1 với tốc độ lấy mẫu là 8000, 12000, 16000, 24000 và 48000 Hz.
Mã hoá: Hỗ trợ nội dung đơn âm và âm thanh nổi với tốc độ lấy mẫu là 8000, 12000, 16000, 24000 và 48000 Hz.
  • Ogg (.ogg)
  • MPEG-4 (.mp4, .m4a, chỉ giải mã)
  • Matroska (.mkv)
  • Webm (.webm)

5.1.4. Mã hoá hình ảnh

Xem thêm thông tin chi tiết trong phần 5.1.6. Thông tin chi tiết về bộ mã hoá và giải mã hình ảnh.

Các hoạt động triển khai thiết bị PHẢI hỗ trợ mã hoá chế độ mã hoá hình ảnh sau đây:

  • [C-0-1] JPEG
  • [C-0-2] PNG
  • [C-0-3] WebP

Nếu các chế độ triển khai thiết bị hỗ trợ mã hoá HEIC thông qua android.media.MediaCodec cho loại nội dung nghe nhìn MIMETYPE_IMAGE_ANDROID_HEIC, thì:

  • [C-1-1] PHẢI cung cấp một bộ mã hoá và giải mã HEVC được tăng tốc bằng phần cứng, hỗ trợ chế độ kiểm soát tốc độ bit BITRATE_MODE_CQ, hồ sơ HEVCProfileMainStill và kích thước khung hình 512 x 512 px.

5.1.5. Giải mã hình ảnh

Xem thêm thông tin chi tiết trong phần 5.1.6. Thông tin chi tiết về bộ mã hoá và giải mã hình ảnh.

Các hoạt động triển khai thiết bị PHẢI hỗ trợ việc giải mã phương thức mã hoá hình ảnh sau:

  • [C-0-1] JPEG
  • [C-0-2] GIF
  • [C-0-3] PNG
  • [C-0-4] BMP
  • [C-0-5] WebP
  • [C-0-6] Raw

Nếu các chế độ triển khai thiết bị hỗ trợ tính năng giải mã video HEVC, thì các chế độ này: * [C-1-1] PHẢI hỗ trợ tính năng giải mã hình ảnh HEIF (HEIC).

Bộ giải mã hình ảnh hỗ trợ định dạng có độ sâu bit cao (9+ bit cho mỗi kênh):

  • [C-2-1] PHẢI hỗ trợ xuất định dạng tương đương 8 bit nếu ứng dụng yêu cầu, ví dụ: thông qua cấu hình ARGB_8888 của android.graphics.Bitmap.

5.1.6. Thông tin chi tiết về codec hình ảnh

Định dạng/Bộ mã hoá và giải mã Chi tiết Các loại tệp/định dạng vùng chứa được hỗ trợ
JPEG Cơ sở + lũy tiến JPEG (.jpg)
GIF GIF (.gif)
PNG PNG (.png)
BMP BMP (.bmp)
WebP WebP (.webp)
Thô ARW (.arw), CR2 (.cr2), DNG (.dng), NEF (.nef), NRW (.nrw), ORF (.orf), PEF (.pef), RAF (.raf), RW2 (.rw2), SRW (.srw)
HEIF Hình ảnh, Bộ sưu tập hình ảnh, Chuỗi hình ảnh HEIF (.heif), HEIC (.heic)

Trình mã hoá và giải mã hình ảnh được hiển thị thông qua API MediaCodec

  • [C-1-1] PHẢI hỗ trợ định dạng màu linh hoạt YUV420 8:8:8 (COLOR_FormatYUV420Flexible) thông qua CodecCapabilities.

  • [SR] RẤT NÊN hỗ trợ định dạng màu RGB888 cho chế độ Surface đầu vào.

  • [C-1-3] PHẢI hỗ trợ ít nhất một định dạng màu YUV420 8:8:8 phẳng hoặc bán phẳng: COLOR_FormatYUV420PackedPlanar (tương đương với COLOR_FormatYUV420Planar) hoặc COLOR_FormatYUV420PackedSemiPlanar (tương đương với COLOR_FormatYUV420SemiPlanar). Bạn NÊN hỗ trợ cả hai.

5.1.7. Bộ mã hoá và giải mã video

  • Để có chất lượng chấp nhận được cho các dịch vụ phát trực tuyến video trên web và hội nghị truyền hình, các hoạt động triển khai thiết bị NÊN sử dụng một bộ mã hoá và giải mã VP8 bằng phần cứng đáp ứng các yêu cầu.

Nếu các hoạt động triển khai thiết bị có bộ mã hoá hoặc giải mã video:

  • [C-1-1] Bộ mã hoá và giải mã video PHẢI hỗ trợ kích thước bytebuffer đầu ra và đầu vào phù hợp với khung hình nén và không nén lớn nhất có thể theo tiêu chuẩn và cấu hình, nhưng cũng không phân bổ quá mức.

  • [C-1-2] Bộ mã hoá và giải mã video PHẢI hỗ trợ các định dạng màu linh hoạt YUV420 8:8:8 (COLOR_FormatYUV420Flexible) thông qua CodecCapabilities.

  • [C-1-3] Bộ mã hoá và giải mã video PHẢI hỗ trợ ít nhất một định dạng màu YUV420 8:8:8 phẳng hoặc bán phẳng: COLOR_FormatYUV420PackedPlanar (tương đương với COLOR_FormatYUV420Planar) hoặc COLOR_FormatYUV420PackedSemiPlanar (tương đương với COLOR_FormatYUV420SemiPlanar). Bạn NÊN hỗ trợ cả hai.

  • [SR] BỘ MÃ HOÁ VÀ GIẢI MÃ VIDEO NÊN hỗ trợ ít nhất một định dạng màu YUV420 8:8:8 phẳng hoặc bán phẳng được tối ưu hoá bằng phần cứng (YV12, NV12, NV21 hoặc định dạng tương đương được tối ưu hoá của nhà cung cấp).

  • [C-1-5] Bộ giải mã video hỗ trợ định dạng có độ sâu bit cao (9+ bit trên mỗi kênh) PHẢI hỗ trợ xuất định dạng tương đương 8 bit nếu ứng dụng yêu cầu. Điều này PHẢI được phản ánh bằng cách hỗ trợ định dạng màu YUV420 8:8:8 thông qua android.media.MediaCodecInfo.

Nếu các chế độ triển khai thiết bị quảng cáo hỗ trợ hồ sơ HDR thông qua Display.HdrCapabilities, thì các chế độ này:

  • [C-2-1] PHẢI hỗ trợ việc phân tích cú pháp và xử lý siêu dữ liệu tĩnh HDR.

Nếu các phương thức triển khai thiết bị quảng cáo hỗ trợ làm mới nội bộ thông qua FEATURE_IntraRefresh trong lớp MediaCodecInfo.CodecCapabilities, thì các phương thức này:

  • [C-3-1] PHẢI hỗ trợ khoảng thời gian làm mới trong phạm vi từ 10 đến 60 khung hình và hoạt động chính xác trong vòng 20% khoảng thời gian làm mới đã định cấu hình.

Trừ phi ứng dụng chỉ định cách khác bằng khoá định dạng KEY_COLOR_FORMAT, các hoạt động triển khai bộ giải mã video:

  • [C-4-1] PHẢI mặc định là định dạng màu được tối ưu hoá cho màn hình phần cứng nếu được định cấu hình bằng đầu ra Surface.
  • [C-4-2] PHẢI mặc định là định dạng màu YUV420 8:8:8 được tối ưu hoá để CPU đọc nếu được định cấu hình để không sử dụng đầu ra Surface.

5.1.8. Danh sách bộ mã hoá và giải mã video

Định dạng/Bộ mã hoá và giải mã Chi tiết Các loại tệp/định dạng vùng chứa được hỗ trợ
H.263
  • 3GPP (.3gp)
  • MPEG-4 (.mp4)
  • Matroska (.mkv, chỉ giải mã)
H.264 AVC Hãy xem mục 5.25.3 để biết thông tin chi tiết
  • 3GPP (.3gp)
  • MPEG-4 (.mp4)
  • MPEG-2 TS (.ts, không tìm kiếm được)
  • Matroska (.mkv, chỉ giải mã)
H.265 HEVC Hãy xem mục 5.3 để biết thông tin chi tiết
  • MPEG-4 (.mp4)
  • Matroska (.mkv, chỉ giải mã)
MPEG-2 Cấu hình chính
  • MPEG2-TS (.ts, không tìm kiếm được)
  • MPEG-4 (.mp4, chỉ giải mã)
  • Matroska (.mkv, chỉ giải mã)
MPEG-4 SP
  • 3GPP (.3gp)
  • MPEG-4 (.mp4)
  • Matroska (.mkv, chỉ giải mã)
VP8 Hãy xem mục 5.25.3 để biết thông tin chi tiết
VP9 Hãy xem mục 5.3 để biết thông tin chi tiết

5.1.9. Bảo mật bộ mã hoá và giải mã nội dung nghe nhìn

Các hoạt động triển khai thiết bị PHẢI đảm bảo tuân thủ các tính năng bảo mật của bộ mã hoá và giải mã nội dung nghe nhìn như mô tả bên dưới.

Android hỗ trợ OMX (API tăng tốc đa phương tiện trên nhiều nền tảng) cũng như Codec 2.0 (API tăng tốc đa phương tiện có mức hao tổn thấp).

Nếu các hoạt động triển khai thiết bị hỗ trợ nội dung đa phương tiện, thì:

  • [C-1-1] PHẢI hỗ trợ các bộ mã hoá và giải mã nội dung nghe nhìn thông qua API OMX hoặc Codec 2.0 (hoặc cả hai) như trong Dự án nguồn mở Android và không được tắt hoặc né tránh các biện pháp bảo mật. Điều này không có nghĩa là mọi bộ mã hoá và giải mã ĐỀU PHẢI sử dụng API OMX hoặc Codec 2.0, mà chỉ có nghĩa là bạn PHẢI hỗ trợ ít nhất một trong các API này và việc hỗ trợ các API có sẵn PHẢI bao gồm các biện pháp bảo vệ bảo mật hiện có.
  • [C-SR] RẤT NÊN hỗ trợ Codec 2.0 API.

Nếu các phương thức triển khai thiết bị không hỗ trợ API Codec 2.0, thì:

  • [C-2-1] PHẢI bao gồm bộ mã hoá và giải mã phần mềm OMX tương ứng từ Dự án nguồn mở Android (nếu có) cho từng định dạng và loại nội dung nghe nhìn (bộ mã hoá hoặc bộ giải mã) mà thiết bị hỗ trợ.
  • [C-2-2] Các bộ mã hoá và giải mã có tên bắt đầu bằng "OMX.google." PHẢI dựa trên mã nguồn Dự án nguồn mở Android của họ.
  • [C-SR] RẤT NÊN chạy các bộ mã hoá và giải mã phần mềm OMX trong một quy trình mã hoá và giải mã không có quyền truy cập vào trình điều khiển phần cứng, ngoại trừ trình ánh xạ bộ nhớ.

Nếu các phương thức triển khai thiết bị hỗ trợ Codec 2.0 API, thì:

  • [C-3-1] PHẢI bao gồm bộ mã hoá và giải mã phần mềm Codec 2.0 tương ứng trong Dự án mã nguồn mở Android (nếu có) cho từng định dạng và loại nội dung nghe nhìn (bộ mã hoá hoặc bộ giải mã) mà thiết bị hỗ trợ.
  • [C-3-2] PHẢI chứa các bộ mã hoá và giải mã phần mềm Codec 2.0 trong quy trình bộ mã hoá và giải mã phần mềm như được cung cấp trong Dự án nguồn mở Android để có thể cấp quyền truy cập hẹp hơn vào các bộ mã hoá và giải mã phần mềm.
  • [C-3-3] Các bộ mã hoá và giải mã có tên bắt đầu bằng "c2.android." PHẢI dựa trên mã nguồn Dự án nguồn mở Android của họ.

5.1.10. Đặc điểm của bộ mã hoá và giải mã nội dung nghe nhìn

Nếu các phương thức triển khai thiết bị hỗ trợ bộ mã hoá và giải mã nội dung nghe nhìn, thì:

  • [C-1-1] PHẢI trả về các giá trị chính xác về đặc điểm của bộ mã hoá và giải mã nội dung nghe nhìn thông qua API MediaCodecInfo.

Cụ thể:

  • [C-1-2] Các bộ mã hoá và giải mã có tên bắt đầu bằng "OMX". PHẢI sử dụng các API OMX và có tên tuân thủ nguyên tắc đặt tên OMX IL.
  • [C-1-3] Các bộ mã hoá và giải mã có tên bắt đầu bằng "c2." PHẢI sử dụng Codec 2.0 API và có tên tuân thủ nguyên tắc đặt tên Codec 2.0 cho Android.
  • [C-1-4] Các bộ mã hoá và giải mã có tên bắt đầu bằng "OMX.google." hoặc "c2.android." KHÔNG ĐƯỢC mô tả là nhà cung cấp hoặc được tăng tốc bằng phần cứng.
  • [C-1-5] Các bộ mã hoá và giải mã chạy trong một quy trình bộ mã hoá và giải mã (nhà cung cấp hoặc hệ thống) có quyền truy cập vào các trình điều khiển phần cứng khác ngoài trình phân bổ và trình ánh xạ bộ nhớ KHÔNG ĐƯỢC coi là chỉ có phần mềm.
  • [C-1-6] Các bộ mã hoá và giải mã không có trong Dự án nguồn mở Android hoặc không dựa trên mã nguồn trong dự án đó PHẢI được coi là của nhà cung cấp.
  • [C-1-7] Các bộ mã hoá và giải mã sử dụng chế độ tăng tốc phần cứng PHẢI được mô tả là có chế độ tăng tốc phần cứng.
  • [C-1-8] Tên bộ mã hoá và giải mã KHÔNG ĐƯỢC gây hiểu lầm. Ví dụ: các bộ mã hoá và giải mã có tên "decoders" PHẢI hỗ trợ việc giải mã và các bộ mã hoá và giải mã có tên "encoders" PHẢI hỗ trợ việc mã hoá. Các bộ mã hoá và giải mã có tên chứa định dạng nội dung nghe nhìn PHẢI hỗ trợ những định dạng đó.

Nếu các phương thức triển khai thiết bị hỗ trợ bộ mã hoá và giải mã video:

  • [C-2-1] Tất cả các bộ mã hoá và giải mã video PHẢI công bố dữ liệu tốc độ khung hình có thể đạt được cho các kích thước sau nếu bộ mã hoá và giải mã đó hỗ trợ:
SD (chất lượng thấp) SD (chất lượng cao) HD 720p HD 1080p UHD
Độ phân giải video
  • 176 x 144 px (H263, MPEG2, MPEG4)
  • 352 x 288 pixel (bộ mã hoá MPEG4, H263, MPEG2)
  • 320 x 180 px (VP8, VP8)
  • 320 x 240 pixel (khác)
  • 704 x 576 pixel (H263)
  • 640 x 360 pixel (VP8, VP9)
  • 640 x 480 pixel (bộ mã hoá MPEG4)
  • 720 x 480 pixel (khác)
  • 1408 x 1152 pixel (H263)
  • 1280 x 720 px (khác)
1920 x 1080 pixel (ngoài MPEG4) 3840 x 2160 pixel (HEVC, VP9)
  • [C-2-2] Bộ mã hoá và giải mã video được xác định là được tăng tốc phần cứng PHẢI công bố thông tin về điểm hiệu suất. Mỗi điểm MUST liệt kê tất cả các điểm hiệu suất tiêu chuẩn được hỗ trợ (được liệt kê trong API PerformancePoint), trừ phi các điểm đó được bao gồm trong một điểm hiệu suất tiêu chuẩn được hỗ trợ khác.
  • Ngoài ra, họ NÊN xuất bản các điểm hiệu suất mở rộng nếu họ hỗ trợ hiệu suất video duy trì ngoài một trong các điểm hiệu suất tiêu chuẩn được liệt kê.

5.2. Mã hoá video

Nếu các hoạt động triển khai thiết bị hỗ trợ bất kỳ bộ mã hoá video nào và cung cấp bộ mã hoá đó cho các ứng dụng bên thứ ba, thì các hoạt động triển khai đó sẽ:

  • KHÔNG ĐƯỢC vượt quá 15% tốc độ bit giữa các khoảng thời gian nội khung (khung hình I) trong hai cửa sổ trượt.
  • KHÔNG ĐƯỢC vượt quá 100% tốc độ bit trong khoảng thời gian 1 giây.

Nếu các hoạt động triển khai thiết bị bao gồm một màn hình hiển thị được nhúng có chiều dài đường chéo ít nhất là 2,5 inch hoặc bao gồm một cổng đầu ra video hoặc khai báo việc hỗ trợ camera thông qua cờ tính năng android.hardware.camera.any, thì các hoạt động triển khai đó:

  • [C-1-1] PHẢI hỗ trợ ít nhất một bộ mã hoá video VP8 hoặc H.264 và cung cấp bộ mã hoá đó cho các ứng dụng bên thứ ba.
  • NÊN hỗ trợ cả bộ mã hoá video VP8 và H.264, đồng thời cung cấp cho các ứng dụng bên thứ ba.

Nếu các hoạt động triển khai thiết bị hỗ trợ bất kỳ bộ mã hoá video H.264, VP8, VP9 hoặc HEVC nào và cung cấp cho các ứng dụng bên thứ ba, thì các hoạt động triển khai đó:

  • [C-2-1] PHẢI hỗ trợ tốc độ bit có thể định cấu hình linh hoạt.
  • NÊN hỗ trợ tốc độ khung hình biến thiên, trong đó bộ mã hoá video NÊN xác định thời lượng khung hình tức thời dựa trên dấu thời gian của các vùng đệm đầu vào và phân bổ vùng chứa bit dựa trên thời lượng khung hình đó.

Nếu các hoạt động triển khai thiết bị hỗ trợ bộ mã hoá video MPEG-4 SP và cung cấp bộ mã hoá này cho các ứng dụng bên thứ ba, thì các hoạt động triển khai đó sẽ:

  • NÊN hỗ trợ tốc độ bit có thể định cấu hình linh hoạt cho bộ mã hoá được hỗ trợ.

Nếu các phương thức triển khai thiết bị cung cấp bộ mã hoá hình ảnh hoặc video được tăng tốc phần cứng và hỗ trợ một hoặc nhiều camera phần cứng có thể cắm hoặc được gắn lộ diện thông qua các API android.camera:

  • [C-4-1] tất cả bộ mã hoá video và hình ảnh tăng tốc phần cứng PHẢI hỗ trợ mã hoá khung hình từ(các) camera phần cứng.
  • NÊN hỗ trợ mã hoá khung hình từ(các) camera phần cứng thông qua tất cả bộ mã hoá video hoặc hình ảnh.

5.2.1. H.263

Nếu các chế độ triển khai thiết bị hỗ trợ bộ mã hoá H.263 và cung cấp bộ mã hoá này cho các ứng dụng bên thứ ba, thì các chế độ triển khai đó sẽ:

  • [C-1-1] PHẢI hỗ trợ Hồ sơ cơ sở cấp 45.
  • NÊN hỗ trợ tốc độ bit có thể định cấu hình linh hoạt cho bộ mã hoá được hỗ trợ.

5.2.2. H.264

Nếu các chế độ triển khai thiết bị hỗ trợ bộ mã hoá và giải mã H.264, thì:

  • [C-1-1] PHẢI hỗ trợ Hồ sơ cơ sở cấp 3. Tuy nhiên, bạn KHÔNG BẮT BUỘC phải hỗ trợ ASO (Arbitrary Slice Ordering – Sắp xếp lát tuỳ ý), FMO (Flexible Macroblock Ordering – Sắp xếp khối lớn linh hoạt) và RS (Redundant Slices – Lát dư thừa). Ngoài ra, để duy trì khả năng tương thích với các thiết bị Android khác, các bộ mã hoá KHÔNG NÊN sử dụng ASO, FMO và RS cho Hồ sơ cơ sở.
  • [C-1-2] PHẢI hỗ trợ các hồ sơ mã hoá video SD (Độ phân giải chuẩn) trong bảng sau.
  • NÊN hỗ trợ Cấp độ 4 của Hồ sơ chính.
  • NÊN hỗ trợ các hồ sơ mã hoá video HD (Độ phân giải cao) như trong bảng sau.

Nếu các hoạt động triển khai thiết bị báo cáo việc hỗ trợ mã hoá H.264 cho video có độ phân giải 720p hoặc 1080p thông qua các API đa phương tiện, thì:

  • [C-2-1] PHẢI hỗ trợ các cấu hình mã hoá trong bảng sau.
SD (Chất lượng thấp) SD (Chất lượng cao) HD 720p HD 1080p
Độ phân giải video 320 x 240 px 720 x 480 px 1280 x 720 px 1920 x 1080 px
Tốc độ khung hình của video 20 khung hình/giây 30 fps 30 fps 30 fps
Tốc độ bit của video 384 Kb/giây 2 Mb/giây 4 Mb/giây 10 Mb/giây

5.2.3. VP8

Nếu các hoạt động triển khai thiết bị hỗ trợ bộ mã hoá và giải mã VP8, thì:

  • [C-1-1] PHẢI hỗ trợ các cấu hình mã hoá video SD.
  • NÊN hỗ trợ các cấu hình mã hoá video HD (Độ phân giải cao) sau đây.
  • [C-1-2] PHẢI hỗ trợ ghi tệp Matroska WebM.
  • NÊN cung cấp bộ mã hoá và giải mã VP8 phần cứng đáp ứng các yêu cầu về mã hoá phần cứng RTC của dự án WebM, để đảm bảo chất lượng chấp nhận được của dịch vụ truyền phát video trực tuyến và hội nghị truyền hình.

Nếu các hoạt động triển khai thiết bị báo cáo khả năng hỗ trợ mã hoá VP8 cho video có độ phân giải 720p hoặc 1080p thông qua các API đa phương tiện, thì:

  • [C-2-1] PHẢI hỗ trợ các cấu hình mã hoá trong bảng sau.
SD (Chất lượng thấp) SD (Chất lượng cao) HD 720p HD 1080p
Độ phân giải video 320 x 180 px 640 x 360 px 1280 x 720 px 1920 x 1080 px
Tốc độ khung hình của video 30 fps 30 fps 30 fps 30 fps
Tốc độ bit của video 800 Kb/giây 2 Mb/giây 4 Mb/giây 10 Mb/giây

5.2.4. VP9

Nếu các chế độ triển khai thiết bị hỗ trợ bộ mã hoá và giải mã VP9, thì:

  • [C-1-2] PHẢI hỗ trợ Cấu hình 0 Cấp 3.
  • [C-1-1] PHẢI hỗ trợ ghi tệp Matroska WebM.
  • [C-1-3] PHẢI tạo dữ liệu CodecPrivate.
  • NÊN hỗ trợ các cấu hình giải mã HD như nêu trong bảng sau.
  • [SR] NÊN hỗ trợ các cấu hình giải mã HD như trong bảng sau nếu có bộ mã hoá phần cứng.
SD HD 720p HD 1080p UHD
Độ phân giải video 720 x 480 px 1280 x 720 px 1920 x 1080 px 3840 x 2160 px
Tốc độ khung hình của video 30 fps 30 fps 30 fps 30 fps
Tốc độ bit của video 1,6 Mb/giây 4 Mb/giây 5 Mb/giây 20 Mb/giây

Nếu các phương thức triển khai thiết bị tuyên bố hỗ trợ Cấu hình 2 hoặc Cấu hình 3 thông qua Media API:

  • Bạn KHÔNG BẮT BUỘC phải hỗ trợ định dạng 12 bit.

5.2.5. H.265

Nếu các chế độ triển khai thiết bị hỗ trợ bộ mã hoá và giải mã H.265, thì:

  • [C-1-1] PHẢI hỗ trợ Cấp 3 của Hồ sơ chính.
  • NÊN hỗ trợ các cấu hình mã hoá HD như trong bảng sau.
  • [SR] RẤT NÊN hỗ trợ các cấu hình mã hoá HD như trong bảng sau nếu có bộ mã hoá phần cứng.
SD HD 720p HD 1080p UHD
Độ phân giải video 720 x 480 px 1280 x 720 px 1920 x 1080 px 3840 x 2160 px
Tốc độ khung hình của video 30 fps 30 fps 30 fps 30 fps
Tốc độ bit của video 1,6 Mb/giây 4 Mb/giây 5 Mb/giây 20 Mb/giây

5.3. Giải mã video

Nếu các chế độ triển khai thiết bị hỗ trợ bộ mã hoá và giải mã VP8, VP9, H.264 hoặc H.265, thì:

  • [C-1-1] PHẢI hỗ trợ chuyển đổi độ phân giải video và tốc độ khung hình linh hoạt thông qua các API Android tiêu chuẩn trong cùng một luồng cho tất cả các bộ mã hoá và giải mã VP8, VP9, H.264 và H.265 theo thời gian thực và lên đến độ phân giải tối đa mà mỗi bộ mã hoá và giải mã hỗ trợ trên thiết bị.

5.3.1. MPEG-2

Nếu các hoạt động triển khai thiết bị hỗ trợ bộ giải mã MPEG-2, thì:

  • [C-1-1] PHẢI hỗ trợ Cấp cao của Hồ sơ chính.

5.3.2. H.263

Nếu các hoạt động triển khai thiết bị hỗ trợ bộ giải mã H.263, thì:

  • [C-1-1] PHẢI hỗ trợ Hồ sơ cơ sở cấp 30 và cấp 45.

5.3.3. MPEG-4

Nếu các thiết bị triển khai có bộ giải mã MPEG-4, thì:

  • [C-1-1] PHẢI hỗ trợ Cấp 3 của Hồ sơ đơn giản.

5.3.4. H.264

Nếu các chế độ triển khai thiết bị hỗ trợ bộ giải mã H.264, thì:

  • [C-1-1] PHẢI hỗ trợ Cấu hình chính cấp 3.1 và Cấu hình cơ sở. Hỗ trợ ASO (Arbitrary Slice Ordering – Sắp xếp lát tuỳ ý), FMO (Flexible Macroblock Ordering – Sắp xếp khối lớn linh hoạt) và RS (Redundant Slices – Lát dư thừa) là KHÔNG BẮT BUỘC.
  • [C-1-2] PHẢI có khả năng giải mã video có cấu hình SD (Độ phân giải chuẩn) được liệt kê trong bảng sau và được mã hoá bằng Cấu hình cơ sở và Cấu hình chính cấp 3.1 (bao gồm cả 720p30).
  • PHẢI có khả năng giải mã video có hồ sơ HD (Độ phân giải cao) như trong bảng sau.

Nếu chiều cao mà phương thức Display.getSupportedModes() báo cáo bằng hoặc lớn hơn độ phân giải video, thì các phương thức triển khai thiết bị:

  • [C-2-1] PHẢI hỗ trợ các cấu hình giải mã video HD 720p trong bảng sau.
  • [C-2-2] PHẢI hỗ trợ các cấu hình giải mã video HD 1080p trong bảng sau.
SD (Chất lượng thấp) SD (Chất lượng cao) HD 720p HD 1080p
Độ phân giải video 320 x 240 px 720 x 480 px 1280 x 720 px 1920 x 1080 px
Tốc độ khung hình của video 30 fps 30 fps 60 khung hình/giây 30 khung hình/giây (60 khung hình/giâyTruyền hình)
Tốc độ bit của video 800 Kb/giây 2 Mb/giây 8 Mb/giây 20 Mb/giây

5.3.5. H.265 (HEVC)

Nếu các chế độ triển khai thiết bị hỗ trợ bộ mã hoá và giải mã H.265, thì:

  • [C-1-1] PHẢI hỗ trợ Cấp chính của Cấu hình chính cấp 3 và cấu hình giải mã video SD như nêu trong bảng sau.
  • NÊN hỗ trợ các cấu hình giải mã HD như nêu trong bảng sau.
  • [C-1-2] PHẢI hỗ trợ các cấu hình giải mã HD như trong bảng sau nếu có bộ giải mã phần cứng.

Nếu chiều cao do phương thức Display.getSupportedModes() báo cáo bằng hoặc lớn hơn độ phân giải video, thì:

  • [C-2-1] Các thiết bị triển khai PHẢI hỗ trợ ít nhất một trong các chế độ giải mã H.265 hoặc VP9 của các cấu hình 720, 1080 và UHD.
SD (Chất lượng thấp) SD (Chất lượng cao) HD 720p HD 1080p UHD
Độ phân giải video 352 x 288 px 720 x 480 px 1280 x 720 px 1920 x 1080 px 3840 x 2160 px
Tốc độ khung hình của video 30 fps 30 fps 30 fps 30/60 khung hình/giây (60 khung hình/giâyTV có tính năng giải mã phần cứng H.265) 60 khung hình/giây
Tốc độ bit của video 600 Kb/giây 1,6 Mb/giây 4 Mb/giây 5 Mb/giây 20 Mb/giây

Nếu các hoạt động triển khai thiết bị tuyên bố hỗ trợ một Cấu hình HDR thông qua Media API:

  • [C-3-1] Các thiết bị triển khai PHẢI chấp nhận siêu dữ liệu HDR bắt buộc từ ứng dụng, cũng như hỗ trợ trích xuất và xuất siêu dữ liệu HDR bắt buộc từ luồng bit và/hoặc vùng chứa.
  • [C-3-2] Các thiết bị triển khai PHẢI hiển thị đúng nội dung HDR trên màn hình thiết bị hoặc trên một cổng đầu ra video tiêu chuẩn (ví dụ: HDMI).

5.3.6. VP8

Nếu các hoạt động triển khai thiết bị hỗ trợ bộ mã hoá và giải mã VP8, thì:

  • [C-1-1] PHẢI hỗ trợ các cấu hình giải mã SD trong bảng sau.
  • NÊN sử dụng bộ mã hoá và giải mã VP8 phần cứng đáp ứng các yêu cầu.
  • NÊN hỗ trợ các cấu hình giải mã HD trong bảng sau.

Nếu chiều cao do phương thức Display.getSupportedModes() báo cáo bằng hoặc lớn hơn độ phân giải video, thì:

  • [C-2-1] Các hoạt động triển khai thiết bị PHẢI hỗ trợ các cấu hình 720p trong bảng sau.
  • [C-2-2] Các hoạt động triển khai thiết bị PHẢI hỗ trợ các cấu hình 1080p trong bảng sau.
SD (Chất lượng thấp) SD (Chất lượng cao) HD 720p HD 1080p
Độ phân giải video 320 x 180 px 640 x 360 px 1280 x 720 px 1920 x 1080 px
Tốc độ khung hình của video 30 fps 30 fps 30 khung hình/giây (60 khung hình/giâyTruyền hình) 30 (60 khung hình/giâyTruyền hình)
Tốc độ bit của video 800 Kb/giây 2 Mb/giây 8 Mb/giây 20 Mb/giây

5.3.7. VP9

Nếu các chế độ triển khai thiết bị hỗ trợ bộ mã hoá và giải mã VP9, thì:

  • [C-1-1] PHẢI hỗ trợ các cấu hình giải mã video SD như trong bảng sau.
  • NÊN hỗ trợ các cấu hình giải mã HD như nêu trong bảng sau.

Nếu các hoạt động triển khai thiết bị hỗ trợ bộ mã hoá và giải mã VP9 và một bộ giải mã phần cứng:

  • [C-2-1] PHẢI hỗ trợ các cấu hình giải mã HD như trong bảng sau.

Nếu chiều cao do phương thức Display.getSupportedModes() báo cáo bằng hoặc lớn hơn độ phân giải video, thì:

  • [C-3-1] Các thiết bị triển khai PHẢI hỗ trợ ít nhất một trong các chế độ giải mã VP9 hoặc H.265 của các cấu hình 720, 1080 và UHD.
SD (Chất lượng thấp) SD (Chất lượng cao) HD 720p HD 1080p UHD
Độ phân giải video 320 x 180 px 640 x 360 px 1280 x 720 px 1920 x 1080 px 3840 x 2160 px
Tốc độ khung hình của video 30 fps 30 fps 30 fps 30 khung hình/giây (60 khung hình/giâyTruyền hình có tính năng giải mã phần cứng VP9) 60 khung hình/giây
Tốc độ bit của video 600 Kb/giây 1,6 Mb/giây 4 Mb/giây 5 Mb/giây 20 Mb/giây

Nếu các phương thức triển khai thiết bị tuyên bố hỗ trợ VP9Profile2 hoặc VP9Profile3 thông qua API đa phương tiện "CodecProfileLevel":

  • Bạn KHÔNG BẮT BUỘC phải hỗ trợ định dạng 12 bit.

Nếu các chế độ triển khai thiết bị tuyên bố hỗ trợ một Cấu hình HDR (VP9Profile2HDR, VP9Profile2HDR10Plus, VP9Profile3HDR, VP9Profile3HDR10Plus) thông qua các API đa phương tiện:

  • [C-4-1] Các chế độ triển khai thiết bị PHẢI chấp nhận siêu dữ liệu HDR bắt buộc (KEY_HDR_STATIC_INFO cho tất cả các hồ sơ HDR, cũng như "KEY_HDR10_PLUS_INFO" cho các hồ sơ HDR10Plus) từ ứng dụng. Các thiết bị này CŨNG PHẢI hỗ trợ việc trích xuất và xuất siêu dữ liệu HDR bắt buộc từ luồng bit và/hoặc vùng chứa.
  • [C-4-2] Các thiết bị triển khai PHẢI hiển thị đúng nội dung HDR trên màn hình thiết bị hoặc trên một cổng đầu ra video tiêu chuẩn (ví dụ: HDMI).

5.3.8. Dolby Vision

Nếu các chế độ triển khai thiết bị khai báo hỗ trợ bộ giải mã Dolby Vision thông qua HDR_TYPE_DOLBY_VISION , thì:

  • [C-1-1] PHẢI cung cấp một bộ trích xuất có khả năng Dolby Vision.
  • [C-1-2] PHẢI hiển thị nội dung Dolby Vision đúng cách trên màn hình thiết bị hoặc trên một cổng đầu ra video tiêu chuẩn (ví dụ: HDMI).
  • [C-1-3] PHẢI đặt chỉ mục của(các) lớp cơ sở tương thích ngược (nếu có) giống với chỉ mục của lớp Dolby Vision kết hợp.

5.3.9. AV1

Nếu các chế độ triển khai thiết bị hỗ trợ bộ mã hoá và giải mã AV1, thì:

  • [C-1-1] PHẢI hỗ trợ Cấu hình 0, bao gồm cả nội dung 10 bit.

5.4. Ghi âm

Mặc dù một số yêu cầu được nêu trong phần này được liệt kê là NÊN kể từ Android 4.3, nhưng chúng tôi dự kiến sẽ thay đổi những yêu cầu này thành PHẢI trong Định nghĩa về khả năng tương thích cho các phiên bản trong tương lai. RẤT NÊN đáp ứng những yêu cầu này (được liệt kê là NÊN) đối với các thiết bị Android hiện có và thiết bị Android mới. Nếu không, các thiết bị này sẽ không đạt được khả năng tương thích với Android khi nâng cấp lên phiên bản trong tương lai.

5.4.1. Thông tin về micrô và tính năng ghi âm thanh thô

Nếu các quy trình triển khai thiết bị khai báo android.hardware.microphone, thì:

  • [C-1-1] PHẢI cho phép ghi lại nội dung âm thanh thô có các đặc điểm sau:

    • Định dạng: PCM tuyến tính, 16 bit
    • Tốc độ lấy mẫu: 8000, 11025, 16000, 44100, 48000 Hz
    • Kênh: Mono
  • NÊN cho phép ghi lại nội dung âm thanh thô có các đặc điểm sau:

    • Định dạng: PCM tuyến tính, 16 bit và 24 bit
    • Tốc độ lấy mẫu: 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 Hz
    • Số kênh: Bằng số lượng micrô trên thiết bị
  • [C-1-2] PHẢI ghi lại ở tốc độ lấy mẫu nêu trên mà không cần lấy mẫu lên.

  • [C-1-3] PHẢI có bộ lọc khử răng cưa thích hợp khi tốc độ lấy mẫu nêu trên được ghi lại bằng cách giảm tần số lấy mẫu.
  • NÊN cho phép ghi lại nội dung âm thanh thô ở chất lượng đài AM và DVD, tức là có các đặc điểm sau:

    • Định dạng: PCM tuyến tính, 16 bit
    • Tốc độ lấy mẫu: 22050, 48000 Hz
    • Kênh: Âm thanh nổi
    • [C-1-4] PHẢI tuân thủ API MicrophoneInfo và điền thông tin chính xác cho các micrô có sẵn trên thiết bị mà các ứng dụng bên thứ ba có thể truy cập thông qua API AudioManager.getMicrophones(), cũng như các micrô hiện đang hoạt động mà các ứng dụng bên thứ ba có thể truy cập thông qua API AudioRecord.getActiveMicrophones()MediaRecorder.getActiveMicrophones(). Nếu các hoạt động triển khai thiết bị cho phép bắt sóng đài AM và ghi lại nội dung âm thanh thô ở chất lượng DVD, thì:
  • [C-2-1] PHẢI ghi hình mà không tăng tần số lấy mẫu ở bất kỳ tỷ lệ nào cao hơn 16000:22050 hoặc 44100:48000.

  • [C-2-2] PHẢI có bộ lọc khử răng cưa phù hợp cho mọi hoạt động lấy mẫu lên hoặc lấy mẫu xuống.

5.4.2. Ghi âm để nhận dạng giọng nói

Nếu các quy trình triển khai thiết bị khai báo android.hardware.microphone, thì các quy trình này sẽ:

  • [C-1-1] PHẢI ghi lại nguồn âm thanh android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION ở một trong các tốc độ lấy mẫu là 44100 và 48000.
  • [C-1-2] Theo mặc định, PHẢI tắt mọi quy trình xử lý âm thanh khử tiếng ồn khi ghi luồng âm thanh từ nguồn âm thanh AudioSource.VOICE_RECOGNITION.
  • [C-1-3] THEO MẶC ĐỊNH, phải tắt mọi chế độ kiểm soát mức tăng tự động khi ghi luồng âm thanh từ nguồn âm thanh AudioSource.VOICE_RECOGNITION.
  • NÊN ghi lại luồng âm thanh nhận dạng giọng nói với biên độ gần như bằng phẳng so với đặc điểm tần số: cụ thể là ±3 dB, từ 100 Hz đến 4000 Hz.
  • NÊN ghi lại luồng âm thanh nhận dạng giọng nói với độ nhạy đầu vào được đặt sao cho nguồn có mức công suất âm thanh (SPL) 90 dB ở tần số 1000 Hz tạo ra RMS là 2500 cho các mẫu 16 bit.
  • NÊN ghi lại luồng âm thanh nhận dạng giọng nói để các mức biên độ PCM theo dõi tuyến tính các thay đổi về SPL đầu vào trong phạm vi ít nhất là 30 dB từ -18 dB đến +12 dB re 90 dB SPL tại micrô.
  • NÊN ghi lại luồng âm thanh nhận dạng giọng nói với tổng độ méo hài (THD) dưới 1% cho 1 kHz ở mức đầu vào 90 dB SPL tại micrô.

Nếu các hoạt động triển khai thiết bị khai báo android.hardware.microphone và các công nghệ giảm (triệt tiêu) tiếng ồn được điều chỉnh để nhận dạng lời nói, thì:

  • [C-2-1] PHẢI cho phép điều khiển hiệu ứng âm thanh này bằng API android.media.audiofx.NoiseSuppressor.
  • [C-2-2] PHẢI xác định riêng từng cách triển khai công nghệ khử tiếng ồn thông qua trường AudioEffect.Descriptor.uuid.

5.4.3. Ghi lại để chuyển hướng quá trình phát

Lớp android.media.MediaRecorder.AudioSource bao gồm nguồn âm thanh REMOTE_SUBMIX.

Nếu các phương thức triển khai thiết bị khai báo cả android.hardware.audio.outputandroid.hardware.microphone, thì chúng:

  • [C-1-1] PHẢI triển khai đúng nguồn âm thanh REMOTE_SUBMIX để khi một ứng dụng dùng API android.media.AudioRecord để ghi từ nguồn âm thanh này, ứng dụng sẽ ghi lại hỗn hợp của tất cả luồng âm thanh, ngoại trừ những luồng sau:

    • AudioManager.STREAM_RING
    • AudioManager.STREAM_ALARM
    • AudioManager.STREAM_NOTIFICATION

5.4.4. Thiết bị khử tiếng vọng âm thanh

Nếu các quy trình triển khai thiết bị khai báo android.hardware.microphone, thì các quy trình này sẽ:

  • NÊN triển khai công nghệ Bộ khử tiếng vọng âm thanh (AEC) được điều chỉnh cho giao tiếp bằng giọng nói và áp dụng cho đường dẫn ghi khi ghi bằng AudioSource.VOICE_COMMUNICATION

Nếu các hoạt động triển khai thiết bị cung cấp một Bộ khử tiếng vọng âm thanh được chèn vào đường dẫn âm thanh ghi khi AudioSource.VOICE_COMMUNICATION được chọn, thì các hoạt động triển khai đó sẽ:

5.4.5. Concurrent Capture

Nếu các phương thức triển khai thiết bị khai báo android.hardware.microphone,thì các phương thức này PHẢI triển khai tính năng chụp đồng thời như mô tả trong tài liệu này. Cụ thể:

  • [C-1-1] PHẢI cho phép một dịch vụ hỗ trợ tiếp cận đang ghi hình bằng AudioSource.VOICE_RECOGNITION và ít nhất một ứng dụng đang ghi hình bằng AudioSource truy cập đồng thời vào micrô.
  • [C-1-2] PHẢI cho phép một ứng dụng được cài đặt sẵn có vai trò Trợ lý và ít nhất một ứng dụng ghi hình bằng bất kỳ AudioSource nào, ngoại trừ AudioSource.VOICE_COMMUNICATION hoặc AudioSource.CAMCORDER, truy cập đồng thời vào micrô.
  • [C-1-3] PHẢI tắt tiếng khi ghi âm cho mọi ứng dụng khác, ngoại trừ dịch vụ hỗ trợ tiếp cận, trong khi một ứng dụng đang ghi bằng AudioSource.VOICE_COMMUNICATION hoặc AudioSource.CAMCORDER. Tuy nhiên, khi một ứng dụng đang ghi hình qua AudioSource.VOICE_COMMUNICATION, thì một ứng dụng khác có thể ghi lại cuộc gọi thoại nếu đó là một ứng dụng đặc quyền (cài đặt sẵn) có quyền CAPTURE_AUDIO_OUTPUT.
  • [C-1-4] Nếu có từ 2 ứng dụng trở lên đang ghi hình đồng thời và không có ứng dụng nào có giao diện người dùng ở trên cùng, thì ứng dụng bắt đầu ghi hình gần đây nhất sẽ nhận được âm thanh.

5.4.6. Mức tăng âm lượng của micrô

Nếu các quy trình triển khai thiết bị khai báo android.hardware.microphone, thì các quy trình này sẽ:

  • NÊN thể hiện đặc điểm biên độ so với tần số tương đối bằng phẳng trong dải tần số trung bình: cụ thể là ±3 dB từ 100 Hz đến 4000 Hz cho từng micrô được dùng để ghi nguồn âm thanh nhận dạng giọng nói.
  • NÊN đặt độ nhạy đầu vào âm thanh sao cho nguồn âm hình sin 1000 Hz phát ở Mức áp suất âm thanh (SPL) 90 dB tạo ra phản hồi có RMS là 2500 cho 16 mẫu bit (hoặc -22,35 dB Full Scale cho các mẫu có độ chính xác kép/dấu phẩy động) cho từng micrô được dùng để ghi nguồn âm thanh nhận dạng giọng nói.
  • [C-SR] NÊN THIẾT LẬP MỨC CƯỜNG ĐỘ trong dải tần số thấp: cụ thể là từ ±20 dB từ 5 Hz đến 100 Hz so với dải tần số trung bình cho từng micrô được dùng để ghi nguồn âm thanh nhận dạng giọng nói.
  • [C-SR] NÊN THIẾT LẬP mức biên độ trong dải tần số cao: cụ thể là từ ±30 dB từ 4000 Hz đến 22 KHz so với dải tần số trung bình cho từng micrô được dùng để ghi nguồn âm thanh nhận dạng giọng nói.

5.5. Phát âm thanh

Android có hỗ trợ cho phép các ứng dụng phát âm thanh thông qua thiết bị ngoại vi đầu ra âm thanh như được xác định trong phần 7.8.2.

5.5.1. Phát âm thanh thô

Nếu các quy trình triển khai thiết bị khai báo android.hardware.audio.output, thì các quy trình này sẽ:

  • [C-1-1] PHẢI cho phép phát nội dung âm thanh thô có các đặc điểm sau:

    • Định dạng nguồn: PCM tuyến tính, 16 bit, 8 bit, dấu phẩy động
    • Kênh: Đơn âm, âm thanh nổi, cấu hình đa kênh hợp lệ với tối đa 8 kênh
    • Tốc độ lấy mẫu (tính bằng Hz):
      • 8000, 11025, 16000, 22050, 32000, 44100, 48000 ở các cấu hình kênh nêu trên
      • 96000 ở chế độ đơn âm và âm thanh nổi
  • NÊN cho phép phát nội dung âm thanh thô có các đặc điểm sau:

    • Tốc độ lấy mẫu: 24000, 48000

5.5.2. Hiệu ứng âm thanh

Android cung cấp một API cho các hiệu ứng âm thanh để triển khai thiết bị.

Nếu các hoạt động triển khai thiết bị khai báo tính năng android.hardware.audio.output, thì:

  • [C-1-1] PHẢI hỗ trợ các hoạt động triển khai EFFECT_TYPE_EQUALIZEREFFECT_TYPE_LOUDNESS_ENHANCER có thể kiểm soát thông qua các lớp con AudioEffect EqualizerLoudnessEnhancer.
  • [C-1-2] PHẢI hỗ trợ việc triển khai API trình trực quan, có thể kiểm soát thông qua lớp Visualizer.
  • [C-1-3] PHẢI hỗ trợ chế độ triển khai EFFECT_TYPE_DYNAMICS_PROCESSING có thể kiểm soát thông qua lớp con AudioEffect DynamicsProcessing.
  • NÊN hỗ trợ các phương thức triển khai EFFECT_TYPE_BASS_BOOST, EFFECT_TYPE_ENV_REVERB, EFFECT_TYPE_PRESET_REVERBEFFECT_TYPE_VIRTUALIZER có thể kiểm soát thông qua các lớp con AudioEffect BassBoost, EnvironmentalReverb, PresetReverbVirtualizer.
  • [C-SR] RẤT NÊN hỗ trợ các hiệu ứng ở dạng dấu phẩy động và đa kênh.

5.5.3. Âm lượng đầu ra âm thanh

Triển khai thiết bị trên ô tô:

  • NÊN cho phép điều chỉnh âm lượng riêng cho từng luồng âm thanh bằng cách sử dụng loại nội dung hoặc mục đích sử dụng do AudioAttributes xác định và mục đích sử dụng âm thanh trên ô tô được xác định công khai trong android.car.CarAudioManager.

5.6. Độ trễ âm thanh

Độ trễ âm thanh là độ trễ thời gian khi tín hiệu âm thanh truyền qua một hệ thống. Nhiều loại ứng dụng dựa vào độ trễ ngắn để đạt được hiệu ứng âm thanh theo thời gian thực.

Để phục vụ mục đích của phần này, hãy sử dụng các định nghĩa sau:

  • độ trễ đầu ra. Khoảng thời gian giữa thời điểm ứng dụng ghi một khung dữ liệu được mã hoá PCM và thời điểm âm thanh tương ứng được truyền đến môi trường tại một bộ chuyển đổi trên thiết bị hoặc tín hiệu rời khỏi thiết bị qua một cổng và có thể được quan sát từ bên ngoài.
  • độ trễ đầu ra lạnh. Độ trễ đầu ra cho khung hình đầu tiên, khi hệ thống đầu ra âm thanh không hoạt động và đã tắt nguồn trước khi có yêu cầu.
  • độ trễ đầu ra liên tục. Độ trễ đầu ra cho các khung hình tiếp theo, sau khi thiết bị phát âm thanh.
  • độ trễ đầu vào. Khoảng thời gian giữa thời điểm môi trường phát ra âm thanh cho thiết bị tại một bộ chuyển đổi trên thiết bị hoặc tín hiệu đi vào thiết bị qua một cổng và thời điểm ứng dụng đọc khung dữ liệu được mã hoá PCM tương ứng.
  • mất tín hiệu đầu vào. Phần đầu của tín hiệu đầu vào không sử dụng được hoặc không có sẵn.
  • độ trễ đầu vào nguội. Tổng thời gian mất dữ liệu đầu vào và độ trễ đầu vào cho khung hình đầu tiên, khi hệ thống đầu vào âm thanh ở trạng thái rảnh và tắt nguồn trước khi có yêu cầu.
  • độ trễ đầu vào liên tục. Độ trễ đầu vào cho các khung hình tiếp theo, trong khi thiết bị đang thu âm.
  • độ trễ đầu ra lạnh. Độ biến thiên giữa các phép đo riêng biệt về giá trị độ trễ đầu ra lạnh.
  • độ trễ đầu vào lạnh. Độ biến thiên giữa các phép đo riêng biệt về giá trị độ trễ đầu vào nguội.
  • độ trễ trọn vòng liên tục. Tổng của độ trễ đầu vào liên tục cộng với độ trễ đầu ra liên tục cộng với một khoảng thời gian đệm. Khoảng thời gian đệm cho phép ứng dụng có thời gian xử lý tín hiệu và thời gian giảm thiểu sự khác biệt về pha giữa luồng đầu vào và đầu ra.
  • API hàng đợi bộ đệm OpenSL ES PCM. Tập hợp các API OpenSL ES liên quan đến PCM trong Android NDK.
  • AAudio native audio API. Tập hợp các API AAudio trong Android NDK.
  • Dấu thời gian. Một cặp bao gồm vị trí khung hình tương đối trong một luồng và thời gian ước tính khi khung hình đó đi vào hoặc rời khỏi quy trình xử lý âm thanh trên điểm cuối được liên kết. Xem thêm AudioTimestamp.
  • glitch. Gián đoạn tạm thời hoặc giá trị mẫu không chính xác trong tín hiệu âm thanh, thường là do thiếu hụt bộ nhớ đệm cho đầu ra, tràn bộ nhớ đệm cho đầu vào hoặc bất kỳ nguồn nào khác gây ra tạp âm kỹ thuật số hoặc tạp âm tương tự.

Nếu các hoạt động triển khai thiết bị khai báo android.hardware.audio.output, thì các hoạt động này PHẢI đáp ứng hoặc vượt quá các yêu cầu sau:

  • [C-1-1] Dấu thời gian đầu ra do AudioTrack.getTimestampAAudioStream_getTimestamp trả về có độ chính xác +/- 2 mili giây.
  • [C-1-2] Độ trễ đầu ra nguội từ 500 mili giây trở xuống.

Nếu các phương thức triển khai thiết bị khai báo android.hardware.audio.output, thì bạn NÊN đáp ứng hoặc vượt quá các yêu cầu sau:

  • [C-SR] Độ trễ đầu ra lạnh từ 100 mili giây trở xuống. Các thiết bị hiện có và thiết bị mới chạy phiên bản Android này RẤT NÊN đáp ứng những yêu cầu này ngay từ bây giờ. Trong bản phát hành nền tảng trong tương lai vào năm 2021, chúng tôi sẽ yêu cầu độ trễ đầu ra nguội từ 200 mili giây trở xuống là BẮT BUỘC.
  • [C-SR] Độ trễ đầu ra liên tục là 45 mili giây trở xuống.
  • [C-SR] Giảm thiểu hiện tượng rung đầu ra nguội.
  • [C-SR] Dấu thời gian đầu ra do AudioTrack.getTimestampAAudioStream_getTimestamp trả về có độ chính xác +/- 1 mili giây.

Nếu các hoạt động triển khai thiết bị đáp ứng các yêu cầu nêu trên, sau khi hiệu chỉnh ban đầu, khi sử dụng cả hàng đợi bộ đệm PCM OpenSL ES và API âm thanh gốc AAudio, đối với độ trễ đầu ra liên tục và độ trễ đầu ra nguội trên ít nhất một thiết bị đầu ra âm thanh được hỗ trợ, thì các hoạt động triển khai đó sẽ:

Nếu các phương thức triển khai thiết bị không đáp ứng các yêu cầu về âm thanh có độ trễ thấp thông qua cả hàng đợi bộ đệm PCM OpenSL ES và API âm thanh gốc AAudio, thì:

  • [C-2-1] KHÔNG ĐƯỢC báo cáo việc hỗ trợ âm thanh có độ trễ thấp.

Nếu các chế độ triển khai thiết bị có android.hardware.microphone, thì các chế độ này PHẢI đáp ứng những yêu cầu sau về âm thanh đầu vào:

  • [C-3-1] Giới hạn sai số trong dấu thời gian đầu vào, do AudioRecord.getTimestamp hoặc AAudioStream_getTimestamp trả về, ở mức +/- 2 mili giây. "Sai số" ở đây có nghĩa là độ lệch so với giá trị chính xác.
  • [C-3-2] Độ trễ đầu vào nguội từ 500 mili giây trở xuống.

Nếu các hoạt động triển khai thiết bị có android.hardware.microphone, thì bạn NÊN đáp ứng các yêu cầu sau về âm thanh đầu vào:

  • [C-SR] Độ trễ đầu vào lạnh từ 100 mili giây trở xuống. Các thiết bị hiện có và thiết bị mới chạy phiên bản Android này RẤT NÊN đáp ứng những yêu cầu này ngay từ bây giờ. Trong bản phát hành nền tảng sau này vào năm 2021, chúng tôi sẽ yêu cầu Độ trễ đầu vào nguội là 200 mili giây trở xuống.
  • [C-SR] Độ trễ đầu vào liên tục từ 30 mili giây trở xuống.
  • [C-SR] Độ trễ trọn vòng liên tục từ 50 mili giây trở xuống.
  • [C-SR] Giảm thiểu hiện tượng giật đầu vào nguội.
  • [C-SR] Giới hạn sai số trong dấu thời gian đầu vào (do AudioRecord.getTimestamp hoặc AAudioStream_getTimestamp trả về) ở mức +/- 1 mili giây.

5.7. Giao thức mạng

Các chế độ triển khai thiết bị PHẢI hỗ trợ giao thức mạng đa phương tiện để phát âm thanh và video như được chỉ định trong tài liệu SDK Android.

Nếu các hoạt động triển khai thiết bị có bộ giải mã âm thanh hoặc video, thì các hoạt động đó sẽ:

  • [C-1-1] PHẢI hỗ trợ tất cả các bộ mã hoá và giải mã cũng như định dạng vùng chứa bắt buộc trong mục 5.1 qua HTTP(S).

  • [C-1-2] PHẢI hỗ trợ các định dạng phân đoạn nội dung nghe nhìn có trong bảng Định dạng phân đoạn nội dung nghe nhìn bên dưới thông qua giao thức nháp Phát trực tuyến dựa trên HTTP, Phiên bản 7.

  • [C-1-3] PHẢI hỗ trợ hồ sơ âm thanh/video RTP và các bộ mã hoá/giải mã liên quan sau đây trong bảng RTSP bên dưới. Để biết các trường hợp ngoại lệ, vui lòng xem chú thích cuối bảng trong mục 5.1.

Định dạng phân đoạn nội dung nghe nhìn

Định dạng phân đoạn Tài liệu tham khảo Hỗ trợ codec bắt buộc
Luồng truyền tải MPEG-2 ISO 13818 Bộ mã hoá và giải mã video:
  • H264 AVC
  • MPEG-4 SP
  • MPEG-2
Xem mục 5.1.3 để biết thông tin chi tiết về H264 AVC, MPEG2-4 SP,
và MPEG-2.

Bộ mã hoá và giải mã âm thanh:

  • (chuẩn) AAC
Hãy xem mục 5.1.1 để biết thông tin chi tiết về AAC và các biến thể của AAC.
AAC có khung ADTS và thẻ ID3 ISO 13818-7 Hãy xem mục 5.1.1 để biết thông tin chi tiết về AAC và các biến thể của AAC
WebVTT WebVTT

RTSP (RTP, SDP)

Tên hồ sơ Tài liệu tham khảo Hỗ trợ codec bắt buộc
H264 AVC RFC 6184 Hãy xem mục 5.1.3 để biết thông tin chi tiết về H264 AVC
MP4A-LATM RFC 6416 Hãy xem mục 5.1.1 để biết thông tin chi tiết về AAC và các biến thể của AAC
H263-1998 RFC 3551
RFC 4629
RFC 2190
Hãy xem mục 5.1.3 để biết thông tin chi tiết về H263
H263-2000 RFC 4629 Hãy xem mục 5.1.3 để biết thông tin chi tiết về H263
AMR RFC 4867 Hãy xem mục 5.1.1 để biết thông tin chi tiết về AMR-NB
AMR-WB RFC 4867 Hãy xem mục 5.1.1 để biết thông tin chi tiết về AMR-WB
MP4V-ES RFC 6416 Hãy xem mục 5.1.3 để biết thông tin chi tiết về MPEG-4 SP
mpeg4-generic RFC 3640 Hãy xem mục 5.1.1 để biết thông tin chi tiết về AAC và các biến thể của AAC
MP2T RFC 2250 Hãy xem Luồng truyền tải MPEG-2 trong phần Phát trực tuyến dựa trên HTTP để biết thông tin chi tiết

5.8. Secure Media

Nếu các hoạt động triển khai thiết bị hỗ trợ đầu ra video an toàn và có khả năng hỗ trợ các bề mặt an toàn, thì:

  • [C-1-1] PHẢI khai báo việc hỗ trợ Display.FLAG_SECURE.

Nếu các hoạt động triển khai thiết bị khai báo hỗ trợ Display.FLAG_SECURE và hỗ trợ giao thức hiển thị không dây, thì:

  • [C-2-1] PHẢI bảo mật đường liên kết bằng một cơ chế mã hoá mạnh mẽ, chẳng hạn như HDCP 2.x trở lên cho các màn hình được kết nối thông qua các giao thức không dây như Miracast.

Nếu các hoạt động triển khai thiết bị khai báo hỗ trợ Display.FLAG_SECURE và hỗ trợ màn hình ngoài có dây, thì:

  • [C-3-1] PHẢI hỗ trợ HDCP 1.2 trở lên cho tất cả màn hình ngoài được kết nối qua một cổng có dây mà người dùng có thể truy cập.

5.9. Giao diện kỹ thuật số cho nhạc cụ (MIDI)

Nếu các hoạt động triển khai thiết bị báo cáo khả năng hỗ trợ tính năng android.software.midi thông qua lớp android.content.pm.PackageManager, thì các hoạt động triển khai đó sẽ:

  • [C-1-1] PHẢI hỗ trợ MIDI qua tất cả các phương thức truyền tải phần cứng có khả năng MIDI mà chúng cung cấp khả năng kết nối chung không phải MIDI, trong đó các phương thức truyền tải đó là:

    • Chế độ máy chủ USB, mục 7.7
    • MIDI qua Bluetooth LE đóng vai trò trung tâm, mục 7.4.3
  • [C-1-2] PHẢI hỗ trợ phần mềm truyền MIDI giữa các ứng dụng (thiết bị MIDI ảo)

  • [C-1-3] PHẢI có libamidi.so (hỗ trợ MIDI gốc)

  • NÊN hỗ trợ chế độ thiết bị ngoại vi MIDI qua USB, mục 7.7

5.10. Âm thanh chuyên nghiệp

Nếu các hoạt động triển khai thiết bị báo cáo việc hỗ trợ tính năng android.hardware.audio.pro thông qua lớp android.content.pm.PackageManager, thì các hoạt động triển khai đó sẽ:

  • [C-1-1] PHẢI báo cáo việc hỗ trợ tính năng android.hardware.audio.low_latency.
  • [C-1-2] PHẢI có độ trễ âm thanh trọn vòng liên tục (theo định nghĩa trong mục 5.6 Độ trễ âm thanh) là 20 mili giây trở xuống và NÊN là 10 mili giây trở xuống trên ít nhất một đường dẫn được hỗ trợ.
  • [C-1-3] PHẢI có(các) cổng USB hỗ trợ chế độ máy chủ USB và chế độ thiết bị ngoại vi USB.
  • [C-1-4] PHẢI báo cáo khả năng hỗ trợ tính năng android.software.midi.
  • [C-1-5] PHẢI đáp ứng các yêu cầu về độ trễ và âm thanh qua USB bằng cả API hàng đợi bộ đệm PCM OpenSL ES và ít nhất một đường dẫn của API âm thanh gốc AAudio.
  • [SR] RẤT NÊN đáp ứng các yêu cầu về độ trễ và âm thanh qua USB bằng cách sử dụng API âm thanh gốc AAudio qua đường dẫn MMAP.
  • [C-1-6] PHẢI có độ trễ đầu ra khi khởi động nguội là 200 mili giây trở xuống.
  • [C-1-7] PHẢI có độ trễ đầu vào nguội từ 200 mili giây trở xuống.
  • [SR] RẤT NÊN dùng để mang lại mức hiệu suất CPU ổn định trong khi âm thanh đang hoạt động và mức tải CPU thay đổi. Bạn nên kiểm thử bằng phiên bản ứng dụng Android của mã cam kết SynthMark 09b13c6f49ea089f8c31e5d035f912cc405b7ab8. SynthMark sử dụng một bộ tổng hợp phần mềm chạy trên một khung âm thanh mô phỏng để đo hiệu suất hệ thống. Bạn cần chạy ứng dụng SynthMark bằng lựa chọn "Kiểm thử tự động" và đạt được các kết quả sau:
    • voicemark.90 >= 32 giọng nói
    • latencymark.fixed.little <= 15 mili giây
    • latencymark.dynamic.little <= 50 mili giây

Hãy xem tài liệu về SynthMark để biết nội dung giải thích về các điểm chuẩn.

  • NÊN giảm thiểu độ không chính xác và độ lệch của đồng hồ âm thanh so với thời gian tiêu chuẩn.
  • NÊN giảm thiểu độ lệch đồng hồ âm thanh so với CPU CLOCK_MONOTONIC khi cả hai đều đang hoạt động.
  • NÊN giảm thiểu độ trễ âm thanh trên các bộ chuyển đổi trên thiết bị.
  • NÊN giảm thiểu độ trễ âm thanh qua âm thanh kỹ thuật số qua USB.
  • NÊN ghi lại các phép đo độ trễ âm thanh trên tất cả các đường dẫn.
  • NÊN giảm thiểu biến động về thời gian nhập lệnh gọi lại hoàn tất vùng đệm âm thanh, vì điều này ảnh hưởng đến tỷ lệ phần trăm băng thông CPU đầy đủ mà lệnh gọi lại có thể sử dụng.
  • PHẢI cung cấp 0 lỗi âm thanh trong quá trình sử dụng bình thường ở độ trễ được báo cáo.
  • NÊN cung cấp độ trễ giữa các kênh bằng 0.
  • NÊN giảm thiểu độ trễ trung bình của MIDI trên tất cả các phương thức truyền.
  • NÊN giảm thiểu sự biến thiên độ trễ của MIDI khi tải (độ trễ) trên tất cả các phương thức truyền.
  • NÊN cung cấp dấu thời gian MIDI chính xác trên tất cả các phương tiện truyền tải.
  • NÊN giảm thiểu tạp âm tín hiệu âm thanh trên các bộ chuyển đổi trên thiết bị, kể cả khoảng thời gian ngay sau khi khởi động nguội.
  • NÊN cung cấp độ chênh lệch đồng hồ âm thanh bằng 0 giữa các đầu vào và đầu ra của các điểm cuối tương ứng, khi cả hai đều đang hoạt động. Ví dụ về các điểm cuối tương ứng bao gồm micrô và loa trên thiết bị, hoặc đầu vào và đầu ra của giắc cắm âm thanh.
  • NÊN xử lý các lệnh gọi lại hoàn thành bộ đệm âm thanh cho các đầu vào và đầu ra của các điểm cuối tương ứng trên cùng một luồng khi cả hai đều đang hoạt động, đồng thời nhập lệnh gọi lại đầu ra ngay sau khi lệnh gọi lại đầu vào trả về. Hoặc nếu không thể xử lý các lệnh gọi lại trên cùng một luồng, hãy nhập lệnh gọi lại đầu ra ngay sau khi nhập lệnh gọi lại đầu vào để cho phép ứng dụng có thời gian nhất quán của các phía đầu vào và đầu ra.
  • NÊN giảm thiểu sự khác biệt về pha giữa bộ đệm âm thanh HAL cho phía đầu vào và đầu ra của các điểm cuối tương ứng.
  • NÊN giảm thiểu độ trễ khi chạm.
  • NÊN giảm thiểu sự biến động về độ trễ khi chạm trong điều kiện tải (rung).
  • NÊN có độ trễ từ đầu vào cảm ứng đến đầu ra âm thanh nhỏ hơn hoặc bằng 40 mili giây.

Nếu các hoạt động triển khai thiết bị đáp ứng tất cả các yêu cầu nêu trên, thì:

Nếu các thiết bị triển khai có giắc cắm âm thanh 3,5 mm 4 cực, thì:

Nếu các thiết bị triển khai bỏ qua giắc cắm âm thanh 3,5 mm có 4 đầu cắm và có(các) cổng USB hỗ trợ chế độ máy chủ USB, thì:

  • [C-3-1] PHẢI triển khai lớp âm thanh USB.
  • [C-3-2] PHẢI có độ trễ âm thanh khứ hồi liên tục từ 20 mili giây trở xuống qua cổng chế độ máy chủ USB bằng cách sử dụng lớp âm thanh USB.
  • Độ trễ âm thanh trọn vòng liên tục PHẢI từ 10 mili giây trở xuống qua cổng chế độ máy chủ USB bằng cách sử dụng lớp âm thanh USB.
  • [C-SR] RẤT NÊN hỗ trợ đồng thời I/O lên đến 8 kênh mỗi hướng, tốc độ lấy mẫu 96 kHz và độ sâu 24 bit hoặc 32 bit, khi sử dụng với các thiết bị âm thanh ngoại vi qua USB cũng hỗ trợ các yêu cầu này.

Nếu các thiết bị triển khai có cổng HDMI, thì:

  • NÊN hỗ trợ đầu ra ở chế độ âm thanh nổi và 8 kênh ở độ sâu 20 bit hoặc 24 bit và 192 kHz mà không bị mất độ sâu bit hoặc lấy mẫu lại, ít nhất là trong một cấu hình.

5.11. Chụp ảnh cho phần Chưa xử lý

Android hỗ trợ ghi âm thanh chưa xử lý thông qua nguồn âm thanh android.media.MediaRecorder.AudioSource.UNPROCESSED. Trong OpenSL ES, bạn có thể truy cập vào đối tượng này bằng chế độ cài đặt sẵn để ghi âm SL_ANDROID_RECORDING_PRESET_UNPROCESSED.

Nếu các hoạt động triển khai thiết bị dự định hỗ trợ nguồn âm thanh chưa qua xử lý và cung cấp nguồn âm thanh đó cho các ứng dụng bên thứ ba, thì các hoạt động triển khai đó:

  • [C-1-1] PHẢI báo cáo khả năng hỗ trợ thông qua thuộc tính android.media.AudioManager PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED.

  • [C-1-2] PHẢI có đặc điểm biên độ so với tần số tương đối bằng phẳng trong dải tần số trung bình: cụ thể là ±10 dB từ 100 Hz đến 7000 Hz cho từng micrô được dùng để ghi nguồn âm thanh chưa qua xử lý.

  • [C-1-3] PHẢI thể hiện mức biên độ trong dải tần số thấp: cụ thể là ±20 dB từ 5 Hz đến 100 Hz so với dải tần số trung bình cho từng micrô được dùng để ghi nguồn âm thanh chưa qua xử lý.

  • [C-1-4] PHẢI thể hiện mức biên độ trong dải tần số cao: cụ thể là ±30 dB từ 7.000 Hz đến 22 KHz so với dải tần số trung bình cho từng micrô được dùng để ghi nguồn âm thanh chưa qua xử lý.

  • [C-1-5] PHẢI đặt độ nhạy đầu vào âm thanh sao cho nguồn âm hình sin 1000 Hz phát ở Mức áp suất âm thanh (SPL) 94 dB tạo ra phản hồi có RMS là 520 cho các mẫu 16 bit (hoặc -36 dB Full Scale cho các mẫu có độ chính xác kép/dấu phẩy động) cho từng micrô được dùng để ghi nguồn âm thanh chưa xử lý.

  • [C-1-6] PHẢI có tỷ lệ tín hiệu trên tạp âm (SNR) từ 60 dB trở lên cho từng micrô được dùng để ghi nguồn âm thanh chưa qua xử lý. (trong khi SNR được đo bằng mức chênh lệch giữa 94 dB SPL và SPL tương đương của tạp âm, được điều chỉnh theo trọng số A).

  • [C-1-7] PHẢI có tổng độ méo hài (THD) nhỏ hơn 1% cho 1 kHz ở mức đầu vào 90 dB SPL tại từng micrô được dùng để ghi nguồn âm thanh chưa xử lý.

  • KHÔNG ĐƯỢC có bất kỳ quá trình xử lý tín hiệu nào khác (ví dụ: Tự động điều chỉnh độ khuếch đại, Bộ lọc thông cao hoặc Khử tiếng vọng) trong đường dẫn, ngoài hệ số nhân mức để đưa mức về phạm vi mong muốn. Hay nói cách khác:

  • [C-1-8] Nếu có bất kỳ quá trình xử lý tín hiệu nào trong cấu trúc vì bất kỳ lý do gì, thì bạn PHẢI tắt quá trình đó và thực sự không gây ra độ trễ hoặc độ trễ bổ sung cho đường dẫn tín hiệu.
  • [C-1-9] Mặc dù được phép nằm trên đường dẫn, nhưng hệ số nhân mức KHÔNG ĐƯỢC gây ra độ trễ hoặc độ trễ cho đường dẫn tín hiệu.

Tất cả các phép đo SPL đều được thực hiện ngay bên cạnh micrô đang được kiểm tra. Đối với nhiều cấu hình micrô, các yêu cầu này áp dụng cho từng micrô.

Nếu các chế độ triển khai thiết bị khai báo android.hardware.microphone nhưng không hỗ trợ nguồn âm thanh chưa qua xử lý, thì:

  • [C-2-1] PHẢI trả về null cho phương thức API AudioManager.getProperty(PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED) để cho biết đúng cách rằng không có sự hỗ trợ.
  • [SR] vẫn RẤT NÊN dùng để đáp ứng nhiều yêu cầu nhất có thể đối với đường dẫn tín hiệu cho nguồn ghi âm chưa qua xử lý.

6. Khả năng tương thích của Công cụ và Tuỳ chọn cho nhà phát triển

6.1. Công cụ dành cho nhà phát triển

Cách triển khai thiết bị:

  • [C-0-1] PHẢI hỗ trợ Công cụ dành cho nhà phát triển Android có trong Android SDK.
  • Cầu gỡ lỗi Android (adb)

    • [C-0-2] PHẢI hỗ trợ adb như được ghi trong Android SDK và các lệnh shell có trong AOSP. Nhà phát triển ứng dụng có thể sử dụng các lệnh này, bao gồm cả dumpsys cmd stats
    • [C-0-11] PHẢI hỗ trợ lệnh shell cmd testharness. Việc nâng cấp các chế độ triển khai thiết bị từ một phiên bản Android cũ hơn mà không có khối dữ liệu liên tục CÓ THỂ được miễn C-0-11.
    • [C-0-3] KHÔNG ĐƯỢC thay đổi định dạng hoặc nội dung của các sự kiện hệ thống thiết bị (batterystats , diskstats, fingerprint, graphicsstats, netstats, notification, procstats) được ghi lại thông qua lệnh dumpsys.
    • [C-0-10] PHẢI ghi lại đầy đủ và cung cấp các sự kiện sau đây cho lệnh shell cmd stats và lớp API Hệ thống StatsManager.
      • ActivityForegroundStateChanged
      • AnomalyDetected
      • AppBreadcrumbReported
      • AppCrashOccurred
      • AppStartOccurred
      • BatteryLevelChanged
      • BatterySaverModeStateChanged
      • BleScanResultReceived
      • BleScanStateChanged
      • ChargingStateChanged
      • DeviceIdleModeStateChanged
      • ForegroundServiceStateChanged
      • GpsScanStateChanged
      • JobStateChanged
      • PluggedStateChanged
      • ScheduledJobStateChanged
      • ScreenStateChanged
      • SyncStateChanged
      • SystemElapsedRealtime
      • UidProcessStateChanged
      • WakelockStateChanged
      • WakeupAlarmOccurred
      • WifiLockStateChanged
      • WifiMulticastLockStateChanged
      • WifiScanStateChanged
    • [C-0-4] PHẢI có trình nền adb phía thiết bị ở trạng thái không hoạt động theo mặc định và PHẢI có một cơ chế mà người dùng có thể truy cập để bật Cầu gỡ lỗi Android.
    • [C-0-5] PHẢI hỗ trợ adb bảo mật. Android có hỗ trợ adb bảo mật. adb an toàn cho phép adb trên các máy chủ đã xác thực được biết.
    • [C-0-6] PHẢI cung cấp một cơ chế cho phép kết nối adb từ một máy chủ. Cụ thể:

    Nếu các thiết bị triển khai không có cổng USB hỗ trợ chế độ thiết bị ngoại vi, thì:

    • [C-3-1] PHẢI triển khai adb thông qua mạng cục bộ (chẳng hạn như Ethernet hoặc Wi-Fi).
    • [C-3-2] PHẢI cung cấp trình điều khiển cho Windows 7, 8 và 10, cho phép nhà phát triển kết nối với thiết bị bằng giao thức adb.

    Nếu các hoạt động triển khai thiết bị hỗ trợ kết nối adb với máy chủ qua Wi-Fi, thì:

    • [C-4-1] PHẢI có phương thức AdbManager#isAdbWifiSupported() trả về true.

    Nếu các hoạt động triển khai thiết bị hỗ trợ kết nối adb với một máy chủ lưu trữ qua Wi-Fi và có ít nhất một camera, thì các hoạt động triển khai đó sẽ:

    • [C-5-1] PHẢI có phương thức AdbManager#isAdbWifiQrSupported() trả về true.
  • Dịch vụ Dalvik Debug Monitor (ddms)

    • [C-0-7] PHẢI hỗ trợ tất cả các tính năng ddms như được ghi trong tài liệu của Android SDK. Vì ddms sử dụng adb, nên theo mặc định, hỗ trợ cho ddms PHẢI ở trạng thái không hoạt động, nhưng PHẢI được hỗ trợ bất cứ khi nào người dùng đã kích hoạt Android Debug Bridge, như trên.
  • Monkey
    • [C-0-8] PHẢI có khung Monkey và cung cấp khung này để các ứng dụng sử dụng.
  • SysTrace
    • [C-0-9] PHẢI hỗ trợ công cụ systrace như được ghi lại trong SDK Android. Theo mặc định, Systrace phải ở trạng thái không hoạt động và PHẢI có một cơ chế mà người dùng có thể truy cập để bật Systrace.
  • Perfetto
    • [C-SR] RẤT NÊN hiển thị một tệp nhị phân /system/bin/perfetto cho người dùng shell mà cmdline tuân thủ tài liệu perfetto.
    • [C-SR] BẠN NÊN chấp nhận tệp nhị phân perfetto làm dữ liệu đầu vào cho một cấu hình protobuf tuân thủ giản đồ được xác định trong tài liệu về perfetto.
    • [C-SR] BẠN NÊN DÙNG tệp nhị phân perfetto để ghi dưới dạng đầu ra một dấu vết protobuf tuân thủ giản đồ được xác định trong tài liệu perfetto.
    • [C-SR] BẠN NÊN CUNG CẤP thông qua tệp nhị phân perfetto, ít nhất là các nguồn dữ liệu được mô tả trong tài liệu về perfetto.
  • Low Memory Killer
    • [C-0-10] PHẢI ghi một LMK_KILL_OCCURRED_FIELD_NUMBER Atom vào nhật ký statsd khi Low Memory Killer chấm dứt một ứng dụng.
  • Chế độ khai thác kiểm thử Nếu các phương thức triển khai thiết bị hỗ trợ lệnh shell cmd testharness và chạy cmd testharness enable, thì:

Nếu các phương thức triển khai thiết bị báo cáo việc hỗ trợ Vulkan 1.0 trở lên thông qua cờ tính năng android.hardware.vulkan.version, thì các phương thức triển khai đó:

  • [C-1-1] PHẢI cung cấp một cơ chế để nhà phát triển ứng dụng bật/tắt lớp gỡ lỗi GPU.
  • [C-1-2] PHẢI liệt kê các lớp trong những thư viện do các công cụ bên ngoài cung cấp (tức là không thuộc gói nền tảng hoặc ứng dụng) có trong thư mục cơ sở của các ứng dụng có thể gỡ lỗi để hỗ trợ các phương thức API vkEnumerateInstanceLayerProperties()vkCreateInstance() khi các lớp gỡ lỗi GPU được bật.

6.2. Tuỳ chọn cho nhà phát triển

Android hỗ trợ nhà phát triển định cấu hình các chế độ cài đặt liên quan đến việc phát triển ứng dụng.

Các hoạt động triển khai thiết bị PHẢI mang lại trải nghiệm nhất quán cho phần Tuỳ chọn cho nhà phát triển, cụ thể:

  • [C-0-1] PHẢI tuân theo ý định android.settings.APPLICATION_DEVELOPMENT_SETTINGS để hiện các chế độ cài đặt liên quan đến hoạt động phát triển ứng dụng. Theo mặc định, chế độ triển khai Android ở nguồn trên sẽ ẩn trình đơn Tuỳ chọn cho nhà phát triển và cho phép người dùng chạy trình đơn này sau khi nhấn 7 lần vào mục trình đơn Cài đặt > Giới thiệu về thiết bị > Số bản dựng.
  • [C-0-2] PHẢI ẩn Tuỳ chọn cho nhà phát triển theo mặc định.
  • [C-0-3] PHẢI cung cấp một cơ chế rõ ràng, không ưu tiên một ứng dụng bên thứ ba so với một ứng dụng khác để bật Tuỳ chọn cho nhà phát triển. PHẢI cung cấp một tài liệu hoặc trang web công khai mô tả cách bật Tuỳ chọn cho nhà phát triển. Bạn PHẢI có thể liên kết tài liệu hoặc trang web này từ tài liệu SDK Android.
  • NÊN có thông báo trực quan liên tục cho người dùng khi Tuỳ chọn dành cho nhà phát triển được bật và sự an toàn của người dùng là điều đáng lo ngại.
  • MAY tạm thời hạn chế quyền truy cập vào trình đơn Tuỳ chọn cho nhà phát triển bằng cách ẩn hoặc tắt trình đơn này để tránh gây xao nhãng trong những trường hợp cần quan tâm đến sự an toàn của người dùng.

7. Khả năng tương thích với phần cứng

Nếu một thiết bị có một thành phần phần cứng cụ thể có API tương ứng cho nhà phát triển bên thứ ba:

  • [C-0-1] Việc triển khai thiết bị PHẢI triển khai API đó như mô tả trong tài liệu về Android SDK.

Nếu một API trong SDK tương tác với một thành phần phần cứng được nêu là không bắt buộc và quá trình triển khai thiết bị không có thành phần đó:

  • [C-0-2] Bạn VẪN PHẢI trình bày đầy đủ các định nghĩa về lớp (theo tài liệu của SDK) cho các API thành phần.
  • [C-0-3] Hành vi của API PHẢI được triển khai dưới dạng các thao tác không có hiệu lực theo một cách hợp lý nào đó.
  • [C-0-4] Các phương thức API PHẢI trả về giá trị rỗng khi được tài liệu SDK cho phép.
  • [C-0-5] Các phương thức API PHẢI trả về các cách triển khai không hoạt động của các lớp mà tài liệu SDK không cho phép giá trị rỗng.
  • [C-0-6] Các phương thức API KHÔNG ĐƯỢC tạo ra các ngoại lệ không được ghi lại trong tài liệu SDK.
  • [C-0-7] Các hoạt động triển khai thiết bị PHẢI báo cáo nhất quán thông tin chính xác về cấu hình phần cứng thông qua các phương thức getSystemAvailableFeatures()hasSystemFeature(String) trên lớp android.content.pm.PackageManager cho cùng một dấu vân tay bản dựng.

Một ví dụ điển hình về trường hợp áp dụng các yêu cầu này là API điện thoại: Ngay cả trên các thiết bị không phải điện thoại, bạn phải triển khai các API này dưới dạng các thao tác không có tác dụng hợp lý.

7.1. Hiển thị và đồ hoạ

Android có các cơ sở tự động điều chỉnh nội dung ứng dụng và bố cục giao diện người dùng một cách phù hợp cho thiết bị để đảm bảo rằng các ứng dụng bên thứ ba chạy tốt trên nhiều cấu hình phần cứng. Trên(các) màn hình tương thích với Android mà tất cả các ứng dụng tương thích với Android của bên thứ ba đều có thể chạy, các hoạt động triển khai thiết bị PHẢI triển khai đúng cách các API và hành vi này, như được nêu chi tiết trong phần này.

Các đơn vị được tham chiếu theo các yêu cầu trong phần này được xác định như sau:

  • kích thước đường chéo thực tế. Khoảng cách (tính bằng inch) giữa hai góc đối diện của phần được chiếu sáng trên màn hình.
  • số điểm trên mỗi inch (dpi). Số lượng pixel được bao gồm trong khoảng tuyến tính theo chiều ngang hoặc chiều dọc là 1 inch. Khi các giá trị dpi được liệt kê, cả dpi theo chiều ngang và chiều dọc đều phải nằm trong phạm vi.
  • tỷ lệ khung hình. Tỷ lệ giữa số pixel của chiều dài và chiều rộng của màn hình. Ví dụ: màn hình có kích thước 480x854 pixel sẽ có tỷ lệ khung hình là 854/480 = 1, 779, tức là khoảng "16:9".
  • pixel không phụ thuộc vào mật độ (dp). Đơn vị pixel ảo được chuẩn hoá thành màn hình 160 dpi, được tính như sau: pixel = dps * (mật độ/160).

7.1.1. Cấu hình màn hình

7.1.1.1. Kích thước và hình dạng màn hình

Khung giao diện người dùng Android hỗ trợ nhiều kích thước bố cục màn hình logic khác nhau và cho phép các ứng dụng truy vấn kích thước bố cục màn hình của cấu hình hiện tại thông qua Configuration.screenLayout bằng SCREENLAYOUT_SIZE_MASKConfiguration.smallestScreenWidthDp.

Cách triển khai thiết bị:

  • [C-0-1] PHẢI báo cáo đúng kích thước bố cục cho Configuration.screenLayout như được xác định trong tài liệu Android SDK. Cụ thể, các hoạt động triển khai thiết bị PHẢI báo cáo đúng kích thước màn hình bằng pixel không phụ thuộc vào mật độ (dp) logic như sau:

    • Các thiết bị có Configuration.uiMode được đặt thành bất kỳ giá trị nào khác ngoài UI_MODE_TYPE_WATCH và báo cáo kích thước small cho Configuration.screenLayout, PHẢI có kích thước ít nhất là 426 dp x 320 dp.
    • Các thiết bị báo cáo kích thước normal cho Configuration.screenLayout PHẢI có kích thước tối thiểu là 480 dp x 320 dp.
    • Các thiết bị báo cáo kích thước large cho Configuration.screenLayout PHẢI có kích thước tối thiểu là 640 dp x 480 dp.
    • Các thiết bị báo cáo kích thước xlarge cho Configuration.screenLayout PHẢI có kích thước tối thiểu là 960 dp x 720 dp.
  • [C-0-2] PHẢI tuân thủ chính xác thông tin hỗ trợ đã nêu của ứng dụng đối với kích thước màn hình thông qua thuộc tính <supports-screens> trong AndroidManifest.xml, như mô tả trong tài liệu về Android SDK.

  • CÓ THỂ có(các) màn hình tương thích với Android có các góc bo tròn.

Nếu các chế độ triển khai thiết bị hỗ trợ UI_MODE_TYPE_NORMAL và có(các) màn hình tương thích với Android có các góc bo tròn, thì các chế độ triển khai đó:

  • [C-1-1] PHẢI đảm bảo rằng bạn đáp ứng ít nhất một trong các yêu cầu sau:
  • Bán kính của các góc bo tròn nhỏ hơn hoặc bằng 38 dp.
  • Khi một hộp 15 dp x 15 dp được cố định ở mỗi góc của màn hình logic, ít nhất một pixel của mỗi hộp sẽ xuất hiện trên màn hình.

  • NÊN có khả năng tương tác của người dùng để chuyển sang chế độ hiển thị có các góc hình chữ nhật.

Nếu các hoạt động triển khai thiết bị bao gồm(các) màn hình tương thích với Android có thể gập lại hoặc bao gồm bản lề gập giữa nhiều bảng hiển thị và cung cấp(các) màn hình đó để kết xuất các ứng dụng bên thứ ba, thì:

Nếu các hoạt động triển khai thiết bị bao gồm(các) màn hình tương thích với Android có thể gập lại hoặc có bản lề gập giữa nhiều bảng hiển thị và nếu bản lề hoặc đường gập cắt ngang cửa sổ ứng dụng toàn màn hình, thì các hoạt động triển khai đó:

  • [C-3-1] PHẢI báo cáo vị trí, ranh giới và trạng thái của bản lề hoặc nếp gấp cho ứng dụng thông qua các tiện ích hoặc API phụ.

Để biết thông tin chi tiết về cách triển khai chính xác các API tiện ích hoặc sidecar, hãy tham khảo tài liệu công khai của Jetpack Trình quản lý cửa sổ.

7.1.1.2. Tỷ lệ khung hình của màn hình

Mặc dù không có hạn chế về tỷ lệ khung hình của (các) màn hình thực tương thích với Android, nhưng tỷ lệ khung hình của màn hình logic nơi các ứng dụng bên thứ ba được kết xuất (có thể được lấy từ các giá trị chiều cao và chiều rộng được báo cáo thông qua API view.Display và API Configuration) PHẢI đáp ứng các yêu cầu sau:

  • [C-0-1] Các thiết bị triển khai có Configuration.uiMode được đặt thành UI_MODE_TYPE_NORMAL PHẢI có giá trị tỷ lệ khung hình nhỏ hơn hoặc bằng 1,86 (xấp xỉ 16:9), trừ phi ứng dụng đáp ứng một trong các điều kiện sau:

    • Ứng dụng đã khai báo rằng ứng dụng hỗ trợ tỷ lệ khung hình màn hình lớn hơn thông qua giá trị siêu dữ liệu android.max_aspect.
    • Ứng dụng khai báo rằng ứng dụng có thể đổi kích thước thông qua thuộc tính android:resizeableActivity.
    • Ứng dụng nhắm đến API cấp 24 trở lên và không khai báo android:maxAspectRatio sẽ hạn chế tỷ lệ khung hình được phép.
  • [C-0-2] Các chế độ triển khai thiết bị có Configuration.uiMode được đặt thành UI_MODE_TYPE_NORMAL PHẢI có giá trị tỷ lệ khung hình bằng hoặc lớn hơn 1,3333 (4:3), trừ phi ứng dụng có thể được kéo dài hơn bằng cách đáp ứng một trong các điều kiện sau:

  • [C-0-3] Các thiết bị triển khai có Configuration.uiMode được đặt thành UI_MODE_TYPE_WATCH PHẢI có giá trị tỷ lệ khung hình được đặt thành 1.0 (1:1).

7.1.1.3. Mật độ màn hình

Khung giao diện người dùng Android xác định một tập hợp các mật độ logic tiêu chuẩn để giúp nhà phát triển ứng dụng nhắm đến các tài nguyên ứng dụng.

Nếu có một thành phần cho phép thay đổi kích thước hiển thị của thiết bị:

  • [C-1-1] Kích thước màn hình KHÔNG ĐƯỢC điều chỉnh lớn hơn 1,5 lần mật độ gốc hoặc tạo ra kích thước màn hình tối thiểu hiệu quả nhỏ hơn 320 dp (tương đương với bộ hạn định tài nguyên sw320dp), tuỳ theo điều kiện nào đến trước.
  • [C-1-2] Kích thước hiển thị KHÔNG ĐƯỢC thu nhỏ hơn 0,85 lần mật độ gốc.
  • Để đảm bảo khả năng sử dụng tốt và cỡ chữ nhất quán, bạn NÊN cung cấp các lựa chọn sau đây về việc mở rộng tỷ lệ Hiển thị gốc (trong khi tuân thủ các giới hạn được chỉ định ở trên)
  • Nhỏ: 0,85x
  • Mặc định: 1x (Tỷ lệ hiển thị gốc)
  • Lớn: 1,15x
  • Lớn hơn: 1,3 lần
  • Lớn nhất: 1,45x

7.1.2. Chỉ số hiển thị

Nếu các hoạt động triển khai thiết bị bao gồm(các) màn hình tương thích với Android hoặc đầu ra video đến(các) màn hình tương thích với Android, thì các hoạt động triển khai đó:

  • [C-1-1] PHẢI báo cáo các giá trị chính xác cho tất cả chỉ số hiển thị tương thích với Android được xác định trong API android.util.DisplayMetrics.

Nếu các chế độ triển khai thiết bị không có màn hình nhúng hoặc đầu ra video, thì:

  • [C-2-1] PHẢI báo cáo các giá trị chính xác của màn hình tương thích với Android như được xác định trong API android.util.DisplayMetrics cho view.Display mặc định được mô phỏng.

7.1.3. Hướng màn hình

Cách triển khai thiết bị:

  • [C-0-1] PHẢI báo cáo hướng màn hình mà họ hỗ trợ (android.hardware.screen.portrait và/hoặc android.hardware.screen.landscape) và PHẢI báo cáo ít nhất một hướng được hỗ trợ. Ví dụ: một thiết bị có màn hình ngang với hướng cố định, chẳng hạn như TV hoặc máy tính xách tay, CHỈ NÊN báo cáo android.hardware.screen.landscape.
  • [C-0-2] PHẢI báo cáo đúng giá trị cho hướng hiện tại của thiết bị, bất cứ khi nào được truy vấn thông qua android.content.res.Configuration.orientation, android.view.Display.getOrientation() hoặc các API khác.

Nếu các chế độ triển khai thiết bị hỗ trợ cả hai hướng màn hình, thì:

  • [C-1-1] PHẢI hỗ trợ hướng động của ứng dụng theo hướng dọc hoặc hướng ngang của màn hình. Tức là thiết bị phải tuân theo yêu cầu của ứng dụng về một hướng màn hình cụ thể.
  • [C-1-2] KHÔNG ĐƯỢC thay đổi kích thước hoặc mật độ màn hình được báo cáo khi thay đổi hướng.
  • CÓ THỂ chọn hướng dọc hoặc ngang làm hướng mặc định.

7.1.4. Tăng tốc đồ hoạ 2D và 3D

7.1.4.1 OpenGL ES

Cách triển khai thiết bị:

  • [C-0-1] PHẢI xác định chính xác các phiên bản OpenGL ES được hỗ trợ (1.1, 2.0, 3.0, 3.1, 3.2) thông qua các API được quản lý (chẳng hạn như thông qua phương thức GLES10.getString()) và các API gốc.
  • [C-0-2] PHẢI hỗ trợ tất cả các API được quản lý và API gốc tương ứng cho mọi phiên bản OpenGL ES mà họ xác định là hỗ trợ.

Nếu các hoạt động triển khai thiết bị có màn hình hoặc đầu ra video, thì:

  • [C-1-1] PHẢI hỗ trợ cả OpenGL ES 1.1 và 2.0, như được thể hiện và trình bày chi tiết trong tài liệu về Android SDK.
  • [C-SR] RẤT NÊN hỗ trợ OpenGL ES 3.1.
  • NÊN hỗ trợ OpenGL ES 3.2.

Nếu các phương thức triển khai thiết bị hỗ trợ bất kỳ phiên bản OpenGL ES nào, thì:

  • [C-2-1] PHẢI báo cáo thông qua API được quản lý OpenGL ES và API gốc mọi tiện ích OpenGL ES khác mà họ đã triển khai, và ngược lại, KHÔNG ĐƯỢC báo cáo các chuỗi tiện ích mà họ không hỗ trợ.
  • [C-2-2] PHẢI hỗ trợ các tiện ích EGL_KHR_image, EGL_KHR_image_base, EGL_ANDROID_image_native_buffer, EGL_ANDROID_get_native_client_buffer, EGL_KHR_wait_sync, EGL_KHR_get_all_proc_addresses, EGL_ANDROID_presentation_time, EGL_KHR_swap_buffers_with_damage, EGL_ANDROID_recordableEGL_ANDROID_GLES_layers.
  • [C-SR] BẠN NÊN HỖ TRỢ các tiện ích EGL_KHR_partial_updateOES_EGL_image_external.
  • NÊN báo cáo chính xác thông qua phương thức getString(), mọi định dạng nén kết cấu mà chúng hỗ trợ, thường là dành riêng cho nhà cung cấp.

Nếu các hoạt động triển khai thiết bị khai báo hỗ trợ OpenGL ES 3.0, 3.1 hoặc 3.2, thì:

  • [C-3-1] PHẢI xuất các biểu tượng hàm tương ứng cho những phiên bản này ngoài các biểu tượng hàm OpenGL ES 2.0 trong thư viện libGLESv2.so.
  • [SR] RẤT NÊN hỗ trợ tiện ích OES_EGL_image_external_essl3.

Nếu các hoạt động triển khai thiết bị hỗ trợ OpenGL ES 3.2, thì:

  • [C-4-1] PHẢI hỗ trợ toàn bộ Gói tiện ích Android OpenGL ES.

Nếu các hoạt động triển khai thiết bị hỗ trợ toàn bộ Gói tiện ích Android OpenGL ES, thì các hoạt động này sẽ:

  • [C-5-1] PHẢI xác định chế độ hỗ trợ thông qua cờ tính năng android.hardware.opengles.aep.

Nếu các phương thức triển khai thiết bị hỗ trợ tiện ích EGL_KHR_mutable_render_buffer, thì:

  • [C-6-1] CŨNG PHẢI hỗ trợ tiện ích EGL_ANDROID_front_buffer_auto_refresh.
7.1.4.2 Vulkan

Android hỗ trợ Vulkan, một API đa nền tảng có mức hao tổn thấp dành cho đồ hoạ 3D hiệu suất cao.

Nếu các hoạt động triển khai thiết bị hỗ trợ OpenGL ES 3.1, thì:

  • [SR] BẠN NÊN THÊM tính năng hỗ trợ cho Vulkan 1.1.

Nếu các hoạt động triển khai thiết bị có màn hình hoặc đầu ra video, thì:

  • NÊN hỗ trợ Vulkan 1.1.

Các kiểm thử dEQP của Vulkan được phân vùng thành một số danh sách kiểm thử, mỗi danh sách có một ngày/phiên bản được liên kết. Các tệp này nằm trong cây nguồn Android tại external/deqp/android/cts/main/vk-master-YYYY-MM-DD.txt. Một thiết bị hỗ trợ Vulkan ở cấp độ tự báo cáo cho biết rằng thiết bị đó có thể vượt qua các kiểm thử dEQP trong tất cả danh sách kiểm thử từ cấp độ này trở về trước.

Nếu các hoạt động triển khai thiết bị có hỗ trợ Vulkan 1.0 trở lên, thì:

  • [C-1-1] PHẢI báo cáo giá trị số nguyên chính xác bằng cờ tính năng android.hardware.vulkan.levelandroid.hardware.vulkan.version.
  • [C-1-2] PHẢI liệt kê ít nhất một VkPhysicalDevice cho API gốc Vulkan vkEnumeratePhysicalDevices() .
  • [C-1-3] PHẢI triển khai đầy đủ API Vulkan 1.0 cho từng VkPhysicalDevice được liệt kê.
  • [C-1-4] PHẢI liệt kê các lớp, có trong các thư viện gốc có tên là libVkLayer*.so trong thư mục thư viện gốc của gói ứng dụng, thông qua các API gốc Vulkan vkEnumerateInstanceLayerProperties()vkEnumerateDeviceLayerProperties() .
  • [C-1-5] KHÔNG ĐƯỢC liệt kê các lớp do thư viện cung cấp bên ngoài gói ứng dụng hoặc cung cấp các cách khác để theo dõi hoặc chặn API Vulkan, trừ phi ứng dụng có thuộc tính android:debuggable được đặt thành true.
  • [C-1-6] PHẢI báo cáo tất cả các chuỗi tiện ích mà chúng hỗ trợ thông qua API gốc Vulkan và ngược lại , KHÔNG ĐƯỢC báo cáo các chuỗi tiện ích mà chúng không hỗ trợ đúng cách.
  • [C-1-7] PHẢI hỗ trợ các tiện ích VK_KHR_surface, VK_KHR_android_surface, VK_KHR_swapchain và VK_KHR_incremental_present.
  • [C-1-8] PHẢI báo cáo phiên bản tối đa của Kiểm thử dEQP Vulkan được hỗ trợ thông qua cờ tính năng android.software.vulkan.deqp.level.
  • [C-1-9] PHẢI hỗ trợ ít nhất phiên bản 132317953 (từ ngày 1 tháng 3 năm 2019) như được báo cáo trong cờ tính năng android.software.vulkan.deqp.level.
  • [C-1-10] PHẢI vượt qua tất cả các bài kiểm thử dEQP Vulkan trong danh sách kiểm thử giữa phiên bản 132317953 và phiên bản được chỉ định trong cờ tính năng android.software.vulkan.deqp.level.
  • [C-SR] RẤT NÊN hỗ trợ các tiện ích VK_KHR_driver_properties và VK_GOOGLE_display_timing.

Nếu các hoạt động triển khai thiết bị không hỗ trợ Vulkan 1.0, thì:

  • [C-2-1] KHÔNG ĐƯỢC khai báo bất kỳ cờ tính năng nào của Vulkan (ví dụ: android.hardware.vulkan.level, android.hardware.vulkan.version).
  • [C-2-2] KHÔNG ĐƯỢC liệt kê bất kỳ VkPhysicalDevice nào cho API gốc Vulkan vkEnumeratePhysicalDevices().

Nếu các phương thức triển khai thiết bị có hỗ trợ Vulkan 1.1 và khai báo bất kỳ cờ tính năng Vulkan nào, thì các phương thức triển khai đó:

  • [C-3-1] PHẢI hỗ trợ các loại semaphore và xử lý bên ngoài SYNC_FD cũng như tiện ích VK_ANDROID_external_memory_android_hardware_buffer.
7.1.4.3 RenderScript
  • [C-0-1] Các thiết bị triển khai PHẢI hỗ trợ Android RenderScript, như được nêu chi tiết trong tài liệu về Android SDK.
7.1.4.4 Tăng tốc đồ hoạ 2D

Android có một cơ chế để các ứng dụng khai báo rằng chúng muốn bật tính năng tăng tốc phần cứng cho đồ hoạ 2D ở cấp Ứng dụng, Hoạt động, Cửa sổ hoặc Khung hiển thị thông qua việc sử dụng thẻ kê khai android:hardwareAccelerated hoặc các lệnh gọi API trực tiếp.

Cách triển khai thiết bị:

  • [C-0-1] PHẢI bật tính năng tăng tốc phần cứng theo mặc định và PHẢI tắt tính năng tăng tốc phần cứng nếu nhà phát triển yêu cầu bằng cách đặt android:hardwareAccelerated="false" hoặc tắt tính năng tăng tốc phần cứng trực tiếp thông qua API Thành phần hiển thị Android.
  • [C-0-2] PHẢI thể hiện hành vi nhất quán với tài liệu về Android SDK liên quan đến tính năng tăng tốc phần cứng.

Android có một đối tượng TextureView cho phép nhà phát triển tích hợp trực tiếp các kết cấu OpenGL ES được tăng tốc phần cứng làm mục tiêu kết xuất trong một hệ phân cấp giao diện người dùng.

Cách triển khai thiết bị:

  • [C-0-3] PHẢI hỗ trợ API TextureView và PHẢI thể hiện hành vi nhất quán với việc triển khai Android nguồn.
7.1.4.5 Màn hình có gam màu rộng

Nếu các hoạt động triển khai thiết bị tuyên bố hỗ trợ màn hình có gam màu rộng thông qua Configuration.isScreenWideColorGamut() , thì các hoạt động này:

  • [C-1-1] PHẢI có màn hình được hiệu chỉnh màu.
  • [C-1-2] PHẢI có màn hình có gam màu bao phủ toàn bộ gam màu sRGB trong không gian CIE 1931 xyY.
  • [C-1-3] PHẢI có màn hình có gam màu chiếm ít nhất 90% DCI-P3 trong không gian CIE 1931 xyY.
  • [C-1-4] PHẢI hỗ trợ OpenGL ES 3.1 hoặc 3.2 và báo cáo đúng cách.
  • [C-1-5] PHẢI quảng cáo việc hỗ trợ các tiện ích EGL_KHR_no_config_context, EGL_EXT_pixel_format_float, EGL_KHR_gl_colorspace, EGL_EXT_gl_colorspace_scrgb, EGL_EXT_gl_colorspace_scrgb_linear, EGL_EXT_gl_colorspace_display_p3, EGL_EXT_gl_colorspace_display_p3_linearEGL_EXT_gl_colorspace_display_p3_passthrough.
  • [C-SR] RẤT NÊN hỗ trợ GL_EXT_sRGB.

Ngược lại, nếu các chế độ triển khai thiết bị không hỗ trợ màn hình có gam màu rộng, thì:

  • [C-2-1] PHẢI bao phủ từ 100% trở lên sRGB trong không gian CIE 1931 xyY, mặc dù gam màu màn hình không được xác định.

7.1.5. Chế độ tương thích với ứng dụng cũ

Android chỉ định một "chế độ tương thích" trong đó khung hoạt động ở chế độ tương đương với kích thước màn hình "bình thường" (chiều rộng 320 dp) vì lợi ích của các ứng dụng cũ không được phát triển cho các phiên bản Android cũ trước khi có tính độc lập về kích thước màn hình.

7.1.6. Công nghệ màn hình

Nền tảng Android có các API cho phép ứng dụng kết xuất đồ hoạ đa dạng cho màn hình tương thích với Android. Các thiết bị PHẢI hỗ trợ tất cả các API này theo định nghĩa của Android SDK, trừ phi được cho phép cụ thể trong tài liệu này.

Tất cả màn hình tương thích với Android của một thiết bị triển khai:

  • [C-0-1] PHẢI có khả năng kết xuất đồ hoạ màu 16 bit.
  • NÊN hỗ trợ màn hình có khả năng hiển thị đồ hoạ 24 bit.
  • [C-0-2] PHẢI có khả năng hiển thị ảnh động.
  • [C-0-3] PHẢI có tỷ lệ khung hình (PAR) từ 0,9 đến 1,15. Tức là tỷ lệ khung hình bằng pixel PHẢI gần với tỷ lệ khung hình vuông (1.0) với dung sai từ 10 đến 15%.

7.1.7. Màn hình phụ

Android hỗ trợ màn hình phụ tương thích với Android để cho phép các chức năng chia sẻ nội dung nghe nhìn và API nhà phát triển để truy cập vào màn hình ngoài.

Nếu các hoạt động triển khai thiết bị hỗ trợ màn hình ngoài thông qua kết nối có dây, không dây hoặc kết nối màn hình bổ sung được nhúng, thì:

  • [C-1-1] PHẢI triển khai dịch vụ hệ thống và API DisplayManager như mô tả trong tài liệu về Android SDK.

7.2. Thiết bị Đầu vào

Cách triển khai thiết bị:

7.2.1. Bàn phím

Nếu các hoạt động triển khai thiết bị có hỗ trợ ứng dụng Trình chỉnh sửa phương thức nhập (IME) của bên thứ ba, thì:

Triển khai thiết bị: * [C-0-1] KHÔNG ĐƯỢC có bàn phím phần cứng không khớp với một trong các định dạng được chỉ định trong android.content.res.Configuration.keyboard (QWERTY hoặc 12 phím). * NÊN thêm các cách triển khai bàn phím ảo khác. * CÓ THỂ có bàn phím phần cứng.

7.2.2. Điều hướng không chạm

Android hỗ trợ bàn phím di chuyển, bi xoay và bánh xe làm cơ chế điều hướng không cảm ứng.

Cách triển khai thiết bị:

Nếu các chế độ triển khai thiết bị thiếu chế độ thao tác không chạm, thì:

  • [C-1-1] PHẢI cung cấp một cơ chế hợp lý thay thế cho giao diện người dùng để chọn và chỉnh sửa văn bản, tương thích với Công cụ quản lý đầu vào. Việc triển khai nguồn mở Android ở thượng nguồn bao gồm một cơ chế lựa chọn phù hợp để sử dụng với những thiết bị không có đầu vào điều hướng không cảm ứng.

7.2.3. Phím điều hướng

Các chức năng Màn hình chính, Gần đâyQuay lại thường được cung cấp thông qua một thao tác tương tác với một nút vật lý chuyên dụng hoặc một phần riêng biệt của màn hình cảm ứng. Đây là những chức năng thiết yếu đối với mô hình thao tác trên Android. Do đó, các chức năng này phải có trong quá trình triển khai thiết bị:

  • [C-0-1] PHẢI cung cấp một phương thức tương tác để người dùng chạy các ứng dụng đã cài đặt có một hoạt động được đặt <intent-filter> bằng ACTION=MAINCATEGORY=LAUNCHER hoặc CATEGORY=LEANBACK_LAUNCHER cho các cách triển khai trên thiết bị truyền hình. Chức năng Trang chủ PHẢI là cơ chế cho sự hỗ trợ này của người dùng.
  • NÊN cung cấp các nút cho chức năng Gần đây và Quay lại.

Nếu cung cấp các chức năng Màn hình chính, Gần đây hoặc Quay lại, thì các chức năng này:

  • [C-1-1] PHẢI có thể truy cập bằng một thao tác (ví dụ: nhấn, nhấp đúp hoặc cử chỉ) khi có thể truy cập vào bất kỳ thao tác nào trong số đó.
  • [C-1-2] PHẢI cho biết rõ hành động duy nhất nào sẽ kích hoạt từng chức năng. Ví dụ về dấu hiệu như vậy là có biểu tượng hiển thị được in trên nút, hiển thị biểu tượng phần mềm trên phần thanh điều hướng của màn hình hoặc hướng dẫn người dùng thực hiện từng bước trong quy trình minh hoạ có hướng dẫn trong trải nghiệm thiết lập ban đầu.

Cách triển khai thiết bị:

  • [SR] KHÔNG NÊN cung cấp cơ chế nhập cho chức năng Trình đơn vì chức năng này đã ngừng hoạt động để chuyển sang thanh thao tác kể từ Android 4.0.

Nếu triển khai chức năng Trình đơn, thì các thiết bị sẽ:

  • [C-2-1] PHẢI hiển thị nút trình đơn mục bổ sung bất cứ khi nào cửa sổ bật lên của trình đơn mục bổ sung không trống và thanh thao tác hiển thị.
  • [C-2-2] KHÔNG ĐƯỢC sửa đổi vị trí của cửa sổ bật lên chứa các thao tác bổ sung xuất hiện khi chọn nút bổ sung trong thanh thao tác, nhưng CÓ THỂ hiển thị cửa sổ bật lên chứa các thao tác bổ sung ở một vị trí đã sửa đổi trên màn hình khi cửa sổ này xuất hiện bằng cách chọn chức năng Trình đơn.

Nếu các phương thức triển khai thiết bị không cung cấp chức năng Trình đơn, thì để tương thích ngược, các phương thức này sẽ:

  • [C-3-1] PHẢI cung cấp chức năng Trình đơn cho các ứng dụng khi targetSdkVersion nhỏ hơn 10, bằng nút vật lý, khoá phần mềm hoặc cử chỉ. Người dùng có thể truy cập vào chức năng Trình đơn này, trừ phi chức năng này bị ẩn cùng với các chức năng điều hướng khác.

Nếu các hoạt động triển khai thiết bị cung cấp chức năng Trợ lý, thì:

  • [C-4-1] PHẢI cho phép truy cập vào chức năng Trợ lý bằng một thao tác duy nhất (ví dụ: nhấn, nhấp đúp hoặc cử chỉ) khi có thể truy cập vào các phím điều hướng khác.
  • [SR] RẤT NÊN sử dụng chức năng nhấn và giữ trên nút HOME làm thao tác tương tác được chỉ định này.

Nếu các chế độ triển khai thiết bị sử dụng một phần riêng biệt của màn hình để hiển thị các phím điều hướng, thì:

  • [C-5-1] Các phím điều hướng PHẢI sử dụng một phần riêng biệt của màn hình, không dành cho các ứng dụng và KHÔNG ĐƯỢC che khuất hoặc can thiệp vào phần màn hình dành cho các ứng dụng.
  • [C-5-2] PHẢI cung cấp một phần màn hình cho các ứng dụng đáp ứng các yêu cầu được xác định trong mục 7.1.1.
  • [C-5-3] PHẢI tuân thủ các cờ do ứng dụng đặt thông qua phương thức API View.setSystemUiVisibility(), để phần riêng biệt này của màn hình (còn gọi là thanh điều hướng) được ẩn đúng cách như được ghi lại trong SDK.

Nếu chức năng điều hướng được cung cấp dưới dạng một thao tác dựa trên cử chỉ trên màn hình:

  • [C-6-1] Bạn CHỈ ĐƯỢC sử dụng WindowInsets#getMandatorySystemGestureInsets() để báo cáo vùng nhận dạng cử chỉ Trang chủ.
  • [C-6-2] Các cử chỉ bắt đầu trong một hình chữ nhật loại trừ do ứng dụng ở nền trước cung cấp thông qua View#setSystemGestureExclusionRects(), nhưng nằm ngoài WindowInsets#getMandatorySystemGestureInsets(), KHÔNG ĐƯỢC phép chặn cho chức năng điều hướng miễn là hình chữ nhật loại trừ được phép nằm trong giới hạn loại trừ tối đa như được chỉ định trong tài liệu cho View#setSystemGestureExclusionRects().
  • [C-6-3] PHẢI gửi cho ứng dụng ở nền trước một sự kiện MotionEvent.ACTION_CANCEL khi các thao tác chạm bắt đầu bị chặn đối với một cử chỉ hệ thống, nếu trước đó ứng dụng ở nền trước đã nhận được một sự kiện MotionEvent.ACTION_DOWN.
  • [C-6-4] PHẢI cung cấp cho người dùng một cách thức để chuyển sang chế độ thao tác bằng nút trên màn hình (ví dụ: trong phần Cài đặt).
  • NÊN cung cấp chức năng Màn hình chính bằng cách vuốt lên từ cạnh dưới của hướng màn hình hiện tại.
  • NÊN cung cấp chức năng Gần đây dưới dạng thao tác vuốt lên và giữ trước khi thả, từ cùng một khu vực với cử chỉ Trang chủ.
  • Các cử chỉ bắt đầu trong WindowInsets#getMandatorySystemGestureInsets() KHÔNG ĐƯỢC chịu ảnh hưởng của các hình chữ nhật loại trừ do ứng dụng trên nền trước cung cấp thông qua View#setSystemGestureExclusionRects().

Nếu một hàm điều hướng được cung cấp từ bất kỳ vị trí nào ở cạnh trái và cạnh phải của hướng hiện tại của màn hình:

  • [C-7-1] Chức năng điều hướng PHẢI là Quay lại và được cung cấp dưới dạng thao tác vuốt từ cả cạnh trái và cạnh phải của hướng hiện tại của màn hình.
  • [C-7-2] Nếu các bảng điều khiển hệ thống có thể vuốt tuỳ chỉnh được cung cấp ở cạnh trái hoặc cạnh phải, thì các bảng điều khiển đó PHẢI được đặt trong 1/3 trên cùng của màn hình với một chỉ báo trực quan rõ ràng và liên tục cho biết rằng thao tác kéo vào sẽ gọi các bảng điều khiển nêu trên, do đó không phải là thao tác Quay lại. Người dùng CÓ THỂ định cấu hình một bảng điều khiển hệ thống sao cho bảng điều khiển đó nằm dưới 1/3 trên cùng của(các) cạnh màn hình nhưng bảng điều khiển hệ thống KHÔNG ĐƯỢC sử dụng quá 1/3(các) cạnh.
  • [C-7-3] Khi ứng dụng ở nền trước đặt cờ View.SYSTEM_UI_FLAG_IMMERSIVE hoặc View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, thao tác vuốt từ các cạnh PHẢI hoạt động như được triển khai trong AOSP (được ghi lại trong SDK).
  • [C-7-4] Khi ứng dụng ở nền trước đặt cờ View.SYSTEM_UI_FLAG_IMMERSIVE hoặc View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY, các bảng điều khiển hệ thống có thể vuốt tuỳ chỉnh PHẢI bị ẩn cho đến khi người dùng đưa thanh hệ thống (còn gọi là thanh điều hướng và thanh trạng thái) vào như được triển khai trong AOSP.

7.2.4. Nhập bằng màn hình cảm ứng

Android hỗ trợ nhiều hệ thống nhập bằng con trỏ, chẳng hạn như màn hình cảm ứng, bàn di chuột và thiết bị nhập giả lập thao tác chạm. Việc triển khai thiết bị dựa trên màn hình cảm ứng được liên kết với một màn hình để người dùng có cảm giác như đang thao tác trực tiếp với các mục trên màn hình. Vì người dùng đang chạm trực tiếp vào màn hình, nên hệ thống không yêu cầu bất kỳ sự hỗ trợ bổ sung nào để cho biết các đối tượng đang được thao tác.

Cách triển khai thiết bị:

  • NÊN có một hệ thống nhập bằng con trỏ nào đó (tương tự như chuột hoặc cảm ứng).
  • NÊN hỗ trợ các con trỏ được theo dõi hoàn toàn độc lập.

Nếu các hoạt động triển khai thiết bị có màn hình cảm ứng (một điểm chạm trở lên) trên màn hình chính tương thích với Android, thì:

  • [C-1-1] PHẢI báo cáo TOUCHSCREEN_FINGER cho trường API Configuration.touchscreen.
  • [C-1-2] PHẢI báo cáo cờ tính năng android.hardware.touchscreenandroid.hardware.faketouch.

Nếu các hoạt động triển khai thiết bị có màn hình cảm ứng có thể theo dõi nhiều lượt chạm trên màn hình chính tương thích với Android, thì:

  • [C-2-1] PHẢI báo cáo các cờ tính năng thích hợp android.hardware.touchscreen.multitouch, android.hardware.touchscreen.multitouch.distinct, android.hardware.touchscreen.multitouch.jazzhand tương ứng với loại màn hình cảm ứng cụ thể trên thiết bị.

Nếu các hoạt động triển khai thiết bị dựa vào một thiết bị đầu vào bên ngoài như chuột hoặc bi xoay (tức là không chạm trực tiếp vào màn hình) để nhập dữ liệu trên màn hình chính tương thích với Android và đáp ứng các yêu cầu về thao tác chạm giả trong mục 7.2.5, thì:

  • [C-3-1] KHÔNG ĐƯỢC báo cáo bất kỳ cờ tính năng nào bắt đầu bằng android.hardware.touchscreen.
  • [C-3-2] CHỈ ĐƯỢC báo cáo android.hardware.faketouch.
  • [C-3-3] PHẢI báo cáo TOUCHSCREEN_NOTOUCH cho trường API Configuration.touchscreen.

7.2.5. Đầu vào giả bằng cách chạm

Giao diện cảm ứng giả cung cấp một hệ thống hoạt động đầu vào của người dùng mô phỏng một số tính năng của màn hình cảm ứng. Ví dụ: chuột hoặc điều khiển từ xa di chuyển một con trỏ trên màn hình gần giống như thao tác chạm, nhưng yêu cầu người dùng trước tiên phải trỏ hoặc lấy tiêu điểm rồi nhấp. Nhiều thiết bị đầu vào như chuột, bàn di chuột, chuột trên không dựa trên con quay hồi chuyển, con trỏ con quay hồi chuyển, cần điều khiển và bàn di chuột đa điểm có thể hỗ trợ các hoạt động tương tác bằng cảm ứng giả. Android có hằng số tính năng android.hardware.faketouch. Hằng số này tương ứng với một thiết bị đầu vào có độ trung thực cao không cảm ứng (dựa trên con trỏ), chẳng hạn như chuột hoặc bàn di chuột. Thiết bị này có thể mô phỏng đầy đủ phương thức nhập dựa trên thao tác chạm (bao gồm cả tính năng hỗ trợ cử chỉ cơ bản) và cho biết rằng thiết bị hỗ trợ một tập hợp con được mô phỏng của chức năng màn hình cảm ứng.

Nếu các hoạt động triển khai thiết bị không có màn hình cảm ứng nhưng có một hệ thống đầu vào con trỏ khác mà họ muốn cung cấp, thì họ:

  • NÊN khai báo hỗ trợ cho cờ tính năng android.hardware.faketouch.

Nếu các hoạt động triển khai thiết bị khai báo hỗ trợ android.hardware.faketouch, thì:

  • [C-1-1] PHẢI báo cáo vị trí X và Y tuyệt đối trên màn hình của vị trí con trỏ và hiển thị con trỏ trực quan trên màn hình.
  • [C-1-2] PHẢI báo cáo sự kiện chạm bằng mã thao tác chỉ định thay đổi trạng thái xảy ra khi con trỏ đi xuống hoặc lên trên màn hình.
  • [C-1-3] PHẢI hỗ trợ thao tác nhấn và nhấc con trỏ trên một đối tượng trên màn hình, cho phép người dùng mô phỏng thao tác nhấn vào một đối tượng trên màn hình.
  • [C-1-4] PHẢI hỗ trợ thao tác con trỏ xuống, con trỏ lên, con trỏ xuống rồi con trỏ lên ở cùng một vị trí trên một đối tượng trên màn hình trong một ngưỡng thời gian, cho phép người dùng mô phỏng thao tác nhấn đúp trên một đối tượng trên màn hình.
  • [C-1-5] PHẢI hỗ trợ thao tác con trỏ xuống tại một điểm bất kỳ trên màn hình, thao tác di chuyển con trỏ đến một điểm bất kỳ khác trên màn hình, sau đó là thao tác con trỏ lên. Thao tác này cho phép người dùng mô phỏng thao tác kéo bằng cách chạm.
  • [C-1-6] PHẢI hỗ trợ thao tác nhấn con trỏ xuống, sau đó cho phép người dùng nhanh chóng di chuyển đối tượng đến một vị trí khác trên màn hình rồi nhấn con trỏ lên trên màn hình. Thao tác này cho phép người dùng hất một đối tượng trên màn hình.

Nếu các hoạt động triển khai thiết bị khai báo hỗ trợ android.hardware.faketouch.multitouch.distinct, thì:

  • [C-2-1] PHẢI khai báo việc hỗ trợ android.hardware.faketouch.
  • [C-2-2] PHẢI hỗ trợ việc theo dõi riêng biệt từ 2 hoặc nhiều thiết bị trỏ độc lập.

Nếu các hoạt động triển khai thiết bị khai báo hỗ trợ android.hardware.faketouch.multitouch.jazzhand, thì:

  • [C-3-1] PHẢI khai báo hỗ trợ cho android.hardware.faketouch.
  • [C-3-2] PHẢI hỗ trợ việc theo dõi riêng biệt 5 (theo dõi một bàn tay có các ngón tay) hoặc nhiều đầu vào con trỏ hoàn toàn độc lập.

7.2.6. Hỗ trợ tay điều khiển trò chơi

7.2.6.1. Ánh xạ nút

Cách triển khai thiết bị:

  • [C-1-1] PHẢI có khả năng liên kết các sự kiện HID với các hằng số InputEvent tương ứng như được liệt kê trong các bảng bên dưới. Việc triển khai Android ở nguồn thượng lưu đáp ứng yêu cầu này.

Nếu các hoạt động triển khai thiết bị nhúng một bộ điều khiển hoặc đi kèm với một bộ điều khiển riêng trong hộp để cung cấp phương tiện nhập tất cả các sự kiện được liệt kê trong các bảng bên dưới, thì:

  • [C-2-1] PHẢI khai báo cờ tính năng android.hardware.gamepad
Nút HID Usage2 Nút Android
A1 0x09 0x0001 KEYCODE_BUTTON_A (96)
B1 0x09 0x0002 KEYCODE_BUTTON_B (97)
X1 0x09 0x0004 KEYCODE_BUTTON_X (99)
Y1 0x09 0x0005 KEYCODE_BUTTON_Y (100)
Nút lên trên D-pad1
Nút xuống dưới D-pad1
0x01 0x00393 AXIS_HAT_Y4
D-pad trái1
D-pad phải1
0x01 0x00393 AXIS_HAT_X4
Nút vai trái1 0x09 0x0007 KEYCODE_BUTTON_L1 (102)
Nút vai phải1 0x09 0x0008 KEYCODE_BUTTON_R1 (103)
Nhấp vào cần điều khiển bên trái1 0x09 0x000E KEYCODE_BUTTON_THUMBL (106)
Nhấp vào cần điều khiển bên phải1 0x09 0x000F KEYCODE_BUTTON_THUMBR (107)
Trang chủ1 0x0c 0x0223 KEYCODE_HOME (3)
Quay lại1 0x0c 0x0224 KEYCODE_BACK (4)

1 KeyEvent

2 Các mục đích sử dụng HID nêu trên phải được khai báo trong CA của Gamepad (0x01 0x0005).

3 Mức sử dụng này phải có Giá trị tối thiểu logic là 0, Giá trị tối đa logic là 7, Giá trị tối thiểu thực tế là 0, Giá trị tối đa thực tế là 315, Đơn vị tính bằng độ và Kích thước báo cáo là 4. Giá trị logic được xác định là hướng xoay theo chiều kim đồng hồ ra khỏi trục dọc; ví dụ: giá trị logic 0 biểu thị không xoay và nút lên được nhấn, trong khi giá trị logic 1 biểu thị hướng xoay 45 độ và cả phím lên và phím trái đều được nhấn.

4 MotionEvent

Nút điều khiển tương tự1 Mức sử dụng HID Nút Android
Nút kích hoạt bên trái 0x02 0x00C5 AXIS_LTRIGGER
Nút cò phải 0x02 0x00C4 AXIS_RTRIGGER
Cần điều khiển bên trái 0x01 0x0030
0x01 0x0031
AXIS_X
AXIS_Y
Cần điều khiển bên phải 0x01 0x0032
0x01 0x0035
AXIS_Z
AXIS_RZ

1 MotionEvent

7.2.7. Điều khiển từ xa

Hãy xem Mục 2.3.1 để biết các yêu cầu cụ thể đối với từng thiết bị.

7.3. Cảm biến

Nếu các hoạt động triển khai thiết bị có một loại cảm biến cụ thể có API tương ứng dành cho nhà phát triển bên thứ ba, thì hoạt động triển khai thiết bị ĐƯỢC PHÉP triển khai API đó như mô tả trong tài liệu về Android SDK và tài liệu về Android nguồn mở trên các cảm biến.

Cách triển khai thiết bị:

  • [C-0-1] PHẢI báo cáo chính xác sự hiện diện hoặc không hiện diện của các cảm biến theo lớp android.content.pm.PackageManager.
  • [C-0-2] PHẢI trả về danh sách chính xác các cảm biến được hỗ trợ thông qua SensorManager.getSensorList() và các phương thức tương tự.
  • [C-0-3] PHẢI hoạt động hợp lý cho tất cả các API cảm biến khác (ví dụ: bằng cách trả về true hoặc false khi thích hợp khi các ứng dụng cố gắng đăng ký trình nghe, không gọi trình nghe cảm biến khi không có cảm biến tương ứng; v.v.).

Nếu các hoạt động triển khai thiết bị bao gồm một loại cảm biến cụ thể có API tương ứng cho nhà phát triển bên thứ ba, thì:

  • [C-1-1] PHẢI báo cáo tất cả các phép đo của cảm biến bằng cách sử dụng các giá trị thích hợp theo Hệ đo lường quốc tế (hệ mét) cho từng loại cảm biến như được xác định trong tài liệu Android SDK.
  • [C-1-2] PHẢI báo cáo dữ liệu cảm biến với độ trễ tối đa là 100 mili giây + 2 * sample_time trong trường hợp luồng cảm biến có độ trễ tối đa được yêu cầu là 0 mili giây khi bộ xử lý ứng dụng đang hoạt động. Độ trễ này không bao gồm bất kỳ độ trễ lọc nào.
  • [C-1-3] PHẢI báo cáo mẫu cảm biến đầu tiên trong vòng 400 mili giây + 2 * sample_time kể từ khi cảm biến được kích hoạt. Mẫu này có thể có độ chính xác là 0.
  • [C-1-4] Đối với mọi API mà tài liệu SDK Android cho biết là cảm biến liên tục, các phương thức triển khai thiết bị PHẢI liên tục cung cấp các mẫu dữ liệu định kỳ CÓ ĐỘ TRỄ dưới 3%, trong đó độ trễ được xác định là độ lệch chuẩn của sự khác biệt về giá trị dấu thời gian được báo cáo giữa các sự kiện liên tiếp.
  • [C-1-5] PHẢI đảm bảo rằng luồng sự kiện cảm biến KHÔNG ĐƯỢC ngăn CPU của thiết bị chuyển sang trạng thái tạm ngưng hoặc thức dậy từ trạng thái tạm ngưng.
  • [C-1-6] PHẢI báo cáo thời gian diễn ra sự kiện tính bằng nano giây như được xác định trong tài liệu Android SDK, biểu thị thời gian diễn ra sự kiện và được đồng bộ hoá với đồng hồ SystemClock.elapsedRealtimeNano().
  • [C-SR] RẤT NÊN có lỗi đồng bộ hoá dấu thời gian dưới 100 mili giây và NÊN có lỗi đồng bộ hoá dấu thời gian dưới 1 mili giây.
  • Khi một số cảm biến được kích hoạt, mức tiêu thụ điện năng KHÔNG ĐƯỢC vượt quá tổng mức tiêu thụ điện năng mà từng cảm biến báo cáo.

Danh sách trên chưa đầy đủ; hành vi được ghi lại của Android SDK và Tài liệu nguồn mở Android về các cảm biến được coi là có thẩm quyền.

Nếu các hoạt động triển khai thiết bị bao gồm một loại cảm biến cụ thể có API tương ứng cho nhà phát triển bên thứ ba, thì:

  • [C-1-6] PHẢI đặt độ phân giải khác 0 cho tất cả các cảm biến và báo cáo giá trị thông qua phương thức API Sensor.getResolution().

Một số loại cảm biến là cảm biến tổng hợp, tức là có thể được lấy từ dữ liệu do một hoặc nhiều cảm biến khác cung cấp. (Ví dụ: cảm biến hướng và cảm biến gia tốc tuyến tính.)

Cách triển khai thiết bị:

  • NÊN triển khai các loại cảm biến này khi chúng bao gồm các cảm biến vật lý tiên quyết như mô tả trong các loại cảm biến.

Nếu các hoạt động triển khai thiết bị có cảm biến kết hợp, thì:

  • [C-2-1] PHẢI triển khai cảm biến như mô tả trong tài liệu Nguồn mở Android về cảm biến tổng hợp.

Nếu các phương thức triển khai thiết bị có một loại cảm biến cụ thể có API tương ứng cho nhà phát triển bên thứ ba và cảm biến đó chỉ báo cáo một giá trị, thì các phương thức triển khai thiết bị:

  • [C-3-1] PHẢI đặt độ phân giải thành 1 cho cảm biến và báo cáo giá trị thông qua phương thức API Sensor.getResolution().

Nếu các hoạt động triển khai thiết bị có một loại cảm biến cụ thể hỗ trợ SensorAdditionalInfo#TYPE_VEC3_CALIBRATION và cảm biến này được cung cấp cho nhà phát triển bên thứ ba, thì họ:

  • [C-4-1] KHÔNG ĐƯỢC đưa bất kỳ thông số hiệu chuẩn cố định nào do nhà máy xác định vào dữ liệu được cung cấp.

Nếu các hoạt động triển khai thiết bị bao gồm sự kết hợp giữa gia tốc kế 3 trục, cảm biến con quay hồi chuyển 3 trục hoặc cảm biến từ kế, thì đó là:

  • [C-SR] RẤT NÊN DÙNG để đảm bảo gia tốc kế, con quay hồi chuyển và từ kế có vị trí tương đối cố định, sao cho nếu thiết bị có thể biến đổi (ví dụ: có thể gập lại), các trục cảm biến vẫn được căn chỉnh và nhất quán với hệ toạ độ cảm biến trong mọi trạng thái biến đổi có thể có của thiết bị.

7.3.1. Gia tốc kế

Cách triển khai thiết bị:

  • [C-SR] RẤT NÊN có gia tốc kế 3 trục.

Nếu các thiết bị triển khai có gia tốc kế 3 trục, thì:

  • [C-1-1] PHẢI có khả năng báo cáo các sự kiện với tần suất tối thiểu là 50 Hz.
  • [C-1-2] PHẢI triển khai và báo cáo cảm biến TYPE_ACCELEROMETER.
  • [C-1-3] PHẢI tuân thủ hệ toạ độ cảm biến Android như được nêu chi tiết trong API Android.
  • [C-1-4] PHẢI có khả năng đo từ trạng thái rơi tự do lên đến gấp 4 lần trọng lực(4g) trở lên trên mọi trục.
  • [C-1-5] PHẢI có độ phân giải tối thiểu là 12 bit.
  • [C-1-6] PHẢI có độ lệch chuẩn không lớn hơn 0,05 m/s^, trong đó độ lệch chuẩn phải được tính theo từng trục trên các mẫu được thu thập trong khoảng thời gian ít nhất 3 giây ở tốc độ lấy mẫu nhanh nhất.
  • [SR] RẤT NÊN triển khai cảm biến kết hợp TYPE_SIGNIFICANT_MOTION.
  • [SR] BẠN NÊN triển khai và báo cáo cảm biến TYPE_ACCELEROMETER_UNCALIBRATED. Bạn NÊN SỬ DỤNG các thiết bị Android đáp ứng yêu cầu này để có thể nâng cấp lên bản phát hành nền tảng trong tương lai (nơi yêu cầu này có thể trở thành BẮT BUỘC).
  • NÊN triển khai các cảm biến kết hợp TYPE_SIGNIFICANT_MOTION, TYPE_TILT_DETECTOR, TYPE_STEP_DETECTOR, TYPE_STEP_COUNTER như mô tả trong tài liệu SDK Android.
  • CẦN báo cáo các sự kiện với tần suất ít nhất là 200 Hz.
  • NÊN có độ phân giải ít nhất là 16 bit.
  • CẦN được hiệu chỉnh trong khi sử dụng nếu các đặc điểm thay đổi trong vòng đời và được bù, đồng thời giữ lại các thông số bù giữa các lần khởi động lại thiết bị.
  • CẦN được bù nhiệt độ.

Nếu các hoạt động triển khai thiết bị bao gồm một gia tốc kế 3 trục và bất kỳ cảm biến tổng hợp nào trong số TYPE_SIGNIFICANT_MOTION, TYPE_TILT_DETECTOR, TYPE_STEP_DETECTOR, TYPE_STEP_COUNTER được triển khai:

  • [C-2-1] Tổng mức tiêu thụ điện năng của các thiết bị này PHẢI luôn nhỏ hơn 4 mW.
  • Mỗi thiết bị PHẢI có công suất dưới 2 mW và 0,5 mW khi ở trạng thái động hoặc tĩnh.

Nếu các chế độ triển khai thiết bị có gia tốc kế 3 trục và cảm biến con quay hồi chuyển 3 trục, thì:

  • [C-3-1] PHẢI triển khai các cảm biến kết hợp TYPE_GRAVITYTYPE_LINEAR_ACCELERATION.
  • [C-SR] BẠN NÊN triển khai cảm biến kết hợp TYPE_GAME_ROTATION_VECTOR.

Nếu các hoạt động triển khai thiết bị bao gồm một gia tốc kế 3 trục, một cảm biến con quay hồi chuyển 3 trục và một cảm biến từ kế, thì các hoạt động triển khai đó:

  • [C-4-1] PHẢI triển khai cảm biến tổng hợp TYPE_ROTATION_VECTOR.

7.3.2. Từ kế

Cách triển khai thiết bị:

  • [C-SR] RẤT NÊN có từ kế (la bàn) 3 trục.

Nếu các chế độ triển khai thiết bị có từ kế 3 trục, thì:

  • [C-1-1] PHẢI triển khai cảm biến TYPE_MAGNETIC_FIELD.
  • [C-1-2] PHẢI có khả năng báo cáo các sự kiện với tần suất ít nhất là 10 Hz và NÊN báo cáo các sự kiện với tần suất ít nhất là 50 Hz.
  • [C-1-3] PHẢI tuân thủ hệ toạ độ cảm biến Android như được nêu chi tiết trong API Android.
  • [C-1-4] PHẢI có khả năng đo từ -900 µT đến +900 µT trên mỗi trục trước khi bão hoà.
  • [C-1-5] PHẢI có giá trị bù từ trường cứng nhỏ hơn 700 µT và NÊN có giá trị dưới 200 µT bằng cách đặt từ kế cách xa các từ trường động (do dòng điện tạo ra) và tĩnh (do nam châm tạo ra).
  • [C-1-6] PHẢI có độ phân giải bằng hoặc dày đặc hơn 0,6 µT.
  • [C-1-7] PHẢI hỗ trợ việc hiệu chỉnh và bù trực tuyến độ lệch từ tính cố định, đồng thời giữ lại các thông số bù giữa các lần khởi động lại thiết bị.
  • [C-1-8] PHẢI áp dụng chế độ bù sắt non – bạn có thể hiệu chỉnh trong khi sử dụng hoặc trong quá trình sản xuất thiết bị.
  • [C-1-9] PHẢI có độ lệch chuẩn, được tính trên cơ sở mỗi trục trên các mẫu được thu thập trong khoảng thời gian ít nhất 3 giây ở tốc độ lấy mẫu nhanh nhất, không lớn hơn 1,5 µT; NÊN có độ lệch chuẩn không lớn hơn 0,5 µT.
  • [C-SR] BẠN NÊN TRIỂN KHAI cảm biến TYPE_MAGNETIC_FIELD_UNCALIBRATED.

Nếu các hoạt động triển khai thiết bị bao gồm một từ kế 3 trục, một cảm biến gia tốc và một cảm biến con quay hồi chuyển 3 trục, thì các hoạt động triển khai đó:

  • [C-2-1] PHẢI triển khai một cảm biến tổng hợp TYPE_ROTATION_VECTOR.

Nếu các hoạt động triển khai thiết bị bao gồm một từ kế 3 trục, một gia tốc kế, thì:

  • CÓ THỂ triển khai cảm biến TYPE_GEOMAGNETIC_ROTATION_VECTOR.

Nếu các hoạt động triển khai thiết bị bao gồm một từ kế 3 trục, một gia tốc kế và cảm biến TYPE_GEOMAGNETIC_ROTATION_VECTOR, thì:

  • [C-3-1] PHẢI tiêu thụ dưới 10 mW.
  • NÊN tiêu thụ ít hơn 3 mW khi cảm biến được đăng ký cho chế độ hàng loạt ở tần số 10 Hz.

7.3.3. GPS

Cách triển khai thiết bị:

  • [C-SR] NÊN CÓ bộ thu GPS/GNSS.

Nếu các phương thức triển khai thiết bị có bộ nhận GPS/GNSS và báo cáo khả năng cho các ứng dụng thông qua cờ tính năng android.hardware.location.gps, thì các phương thức triển khai đó:

  • [C-1-1] PHẢI hỗ trợ đầu ra vị trí với tốc độ ít nhất là 1 Hz khi được yêu cầu thông qua LocationManager#requestLocationUpdate.
  • [C-1-2] PHẢI có thể xác định vị trí trong điều kiện không gian mở (tín hiệu mạnh, đường truyền đa hướng không đáng kể, HDOP < 2) trong vòng 10 giây (thời gian xác định vị trí lần đầu nhanh), khi kết nối với Internet có tốc độ dữ liệu từ 0,5 Mb/giây trở lên. Yêu cầu này thường được đáp ứng bằng cách sử dụng một số hình thức của kỹ thuật GPS/GNSS được hỗ trợ hoặc dự đoán để giảm thiểu thời gian khoá GPS/GNSS (Dữ liệu hỗ trợ bao gồm Thời gian tham chiếu, Vị trí tham chiếu và Biểu đồ vị trí/Đồng hồ vệ tinh).
    • [C-1-6] Sau khi thực hiện phép tính vị trí như vậy, các hoạt động triển khai thiết bị PHẢI xác định vị trí của thiết bị trong không gian thoáng đãng trong vòng 5 giây, khi các yêu cầu về vị trí được khởi động lại, tối đa một giờ sau khi tính toán vị trí ban đầu, ngay cả khi yêu cầu tiếp theo được thực hiện mà không có kết nối dữ liệu và/hoặc sau khi tắt nguồn rồi bật lại.
  • Trong điều kiện trời quang đãng sau khi xác định vị trí, khi đứng yên hoặc di chuyển với gia tốc dưới 1 mét trên giây bình phương:

    • [C-1-3] PHẢI có khả năng xác định vị trí trong vòng 20 mét và tốc độ trong vòng 0, 5 mét/giây, ít nhất 95% thời gian.
    • [C-1-4] PHẢI đồng thời theo dõi và báo cáo thông qua GnssStatus.Callback ít nhất 8 vệ tinh của một chòm sao.
    • CÓ THỂ đồng thời theo dõi ít nhất 24 vệ tinh, từ nhiều chòm sao (ví dụ: GPS + ít nhất một trong số Glonass, Beidou, Galileo).
    • [C-SR] RẤT NÊN tiếp tục cung cấp thông tin vị trí GPS/GNSS bình thường thông qua API Nhà cung cấp vị trí GNSS trong cuộc gọi điện thoại khẩn cấp.
    • [C-SR] RẤT NÊN báo cáo các phép đo GNSS từ tất cả các chòm sao được theo dõi (như được báo cáo trong thông báo GnssStatus), ngoại trừ SBAS.
    • [C-SR] BẠN NÊN BÁO CÁO AGC và Tần suất đo lường GNSS.
    • [C-SR] RẤT NÊN báo cáo tất cả các thông tin ước tính về độ chính xác (bao gồm cả Hướng, Tốc độ và Độ cao) trong mỗi vị trí GPS/GNSS.
    • [C-SR] RẤT NÊN báo cáo các phép đo GNSS ngay khi tìm thấy, ngay cả khi vị trí được tính toán từ GPS/GNSS chưa được báo cáo.
    • [C-SR] RẤT NÊN báo cáo tốc độ giả và phạm vi giả của GNSS, trong điều kiện không bị che khuất sau khi xác định vị trí, trong khi đứng yên hoặc di chuyển với gia tốc dưới 0, 2 mét trên giây bình phương, đủ để tính toán vị trí trong vòng 20 mét và tốc độ trong vòng 0, 2 mét trên giây, ít nhất 95% thời gian.

7.3.4. Con quay hồi chuyển

Cách triển khai thiết bị:

  • [C-SR] RẤT NÊN có cảm biến con quay hồi chuyển.

Nếu các thiết bị triển khai có con quay hồi chuyển 3 trục, thì:

  • [C-1-1] PHẢI có khả năng báo cáo các sự kiện với tần suất tối thiểu là 50 Hz.
  • [C-1-2] PHẢI triển khai cảm biến TYPE_GYROSCOPE và RẤT NÊN triển khai cả cảm biến TYPE_GYROSCOPE_UNCALIBRATED.
  • [C-1-4] PHẢI có độ phân giải từ 12 bit trở lên và NÊN có độ phân giải từ 16 bit trở lên.
  • [C-1-5] PHẢI được bù nhiệt độ.
  • [C-1-6] PHẢI được hiệu chỉnh và bù trong khi sử dụng, đồng thời giữ lại các thông số bù giữa các lần khởi động lại thiết bị.
  • [C-1-7] PHẢI có phương sai không lớn hơn 1e-7 rad^2 / s^2 trên mỗi Hz (phương sai trên mỗi Hz hoặc rad^2 / s). Phương sai được phép thay đổi theo tốc độ lấy mẫu, nhưng PHẢI bị giới hạn bởi giá trị này. Nói cách khác, nếu bạn đo phương sai của con quay hồi chuyển ở tốc độ lấy mẫu 1 Hz, thì phương sai đó KHÔNG ĐƯỢC lớn hơn 1e-7 rad^2/s^2.
  • [SR] Bạn NÊN GIẢM lỗi hiệu chuẩn xuống dưới 0,01 rad/s khi thiết bị đứng yên ở nhiệt độ phòng.
  • CẦN báo cáo các sự kiện với tần suất ít nhất là 200 Hz.

Nếu các hoạt động triển khai thiết bị có con quay hồi chuyển 3 trục, cảm biến gia tốc kế và cảm biến từ kế, thì:

  • [C-2-1] PHẢI triển khai một cảm biến tổng hợp TYPE_ROTATION_VECTOR.

Nếu các chế độ triển khai thiết bị có gia tốc kế 3 trục và cảm biến con quay hồi chuyển 3 trục, thì:

  • [C-3-1] PHẢI triển khai các cảm biến kết hợp TYPE_GRAVITYTYPE_LINEAR_ACCELERATION.
  • [C-SR] BẠN NÊN triển khai cảm biến kết hợp TYPE_GAME_ROTATION_VECTOR.

7.3.5. Khí áp kế

Cách triển khai thiết bị:

  • [C-SR] RẤT NÊN có một khí áp kế (cảm biến áp suất không khí xung quanh).

Nếu các hoạt động triển khai thiết bị có một khí áp kế, thì:

  • [C-1-1] PHẢI triển khai và báo cáo cảm biến TYPE_PRESSURE.
  • [C-1-2] PHẢI có khả năng phân phối các sự kiện ở tần số 5 Hz trở lên.
  • [C-1-3] PHẢI được bù nhiệt độ.
  • [SR] RẤT NÊN có khả năng báo cáo các phép đo áp suất trong khoảng từ 300 hPa đến 1100 hPa.
  • PHẢI có độ chính xác tuyệt đối là 1 hPa.
  • NÊN có độ chính xác tương đối là 0,12 hPa trong phạm vi 20 hPa (tương đương với độ chính xác ~1 m trong phạm vi thay đổi ~200 m ở mực nước biển).

7.3.6. Nhiệt kế

Nếu các hoạt động triển khai thiết bị có nhiệt kế môi trường (cảm biến nhiệt độ), thì:

  • [C-1-1] PHẢI xác định SENSOR_TYPE_AMBIENT_TEMPERATURE cho cảm biến nhiệt độ môi trường và cảm biến PHẢI đo nhiệt độ môi trường (phòng/cabin xe) tại nơi người dùng tương tác với thiết bị theo độ C.

Nếu các hoạt động triển khai thiết bị có cảm biến nhiệt kế đo nhiệt độ khác với nhiệt độ môi trường xung quanh, chẳng hạn như nhiệt độ CPU, thì các hoạt động triển khai đó:

7.3.7. Máy đo quang

  • Các hoạt động triển khai thiết bị CÓ THỂ bao gồm một máy đo quang (cảm biến ánh sáng xung quanh).

7.3.8. Cảm biến độ gần

  • Các phương thức triển khai thiết bị CÓ THỂ bao gồm một cảm biến độ gần.

Nếu các hoạt động triển khai thiết bị có cảm biến độ gần, thì:

  • [C-1-1] PHẢI đo khoảng cách của một đối tượng theo cùng hướng với màn hình. Tức là cảm biến tiệm cận PHẢI được định hướng để phát hiện các vật thể ở gần màn hình, vì mục đích chính của loại cảm biến này là phát hiện điện thoại mà người dùng đang sử dụng. Nếu các hoạt động triển khai thiết bị có cảm biến độ gần với bất kỳ hướng nào khác, thì bạn KHÔNG ĐƯỢC phép truy cập thông qua API này.
  • [C-1-2] PHẢI có độ chính xác từ 1 bit trở lên.

7.3.9. Cảm biến có độ trung thực cao

Nếu các hoạt động triển khai thiết bị bao gồm một bộ cảm biến chất lượng cao hơn như được xác định trong phần này và cung cấp các cảm biến đó cho các ứng dụng bên thứ ba, thì:

  • [C-1-1] PHẢI xác định khả năng thông qua cờ tính năng android.hardware.sensor.hifi_sensors.

Nếu các quy trình triển khai thiết bị khai báo android.hardware.sensor.hifi_sensors, thì các quy trình này sẽ:

  • [C-2-1] PHẢI có cảm biến TYPE_ACCELEROMETER:

    • PHẢI có phạm vi đo ít nhất từ -8 g đến +8 g và NÊN có phạm vi đo ít nhất từ -16 g đến +16 g.
    • PHẢI có độ phân giải đo lường tối thiểu là 2048 LSB/g.
    • PHẢI có tần suất đo tối thiểu là 12,5 Hz hoặc thấp hơn.
    • PHẢI có tần suất đo tối đa là 400 Hz trở lên; NÊN hỗ trợ SensorDirectChannel RATE_VERY_FAST.
    • PHẢI có độ nhiễu đo không quá 400 μg/√Hz.
    • PHẢI triển khai một dạng không đánh thức của cảm biến này với khả năng đệm ít nhất 3.000 sự kiện cảm biến.
    • PHẢI có mức tiêu thụ điện năng theo lô không quá 3 mW.
    • [C-SR] BẠN NÊN CÓ BĂNG THÔNG ĐO 3dB ít nhất bằng 80% tần số Nyquist và phổ nhiễu trắng trong băng thông này.
    • NÊN có một bước đi ngẫu nhiên gia tốc nhỏ hơn 30 μg √Hz được kiểm tra ở nhiệt độ phòng.
    • NÊN có độ lệch thay đổi so với nhiệt độ là ≤ +/- 1 mg/°C.
    • NÊN có độ không tuyến tính của đường phù hợp nhất là ≤ 0,5% và độ nhạy thay đổi so với nhiệt độ là ≤ 0,03%/°C.
    • PHẢI có độ nhạy theo trục ngang < 2,5 % và độ biến thiên của độ nhạy theo trục ngang < 0,2% trong phạm vi nhiệt độ hoạt động của thiết bị.
  • [C-2-2] PHẢI có một TYPE_ACCELEROMETER_UNCALIBRATED đáp ứng các yêu cầu về chất lượng giống như TYPE_ACCELEROMETER.

  • [C-2-3] PHẢI có cảm biến TYPE_GYROSCOPE:

    • PHẢI có phạm vi đo ít nhất từ -1000 đến +1000 dps.
    • PHẢI có độ phân giải đo lường tối thiểu là 16 LSB/dps.
    • PHẢI có tần suất đo tối thiểu là 12,5 Hz hoặc thấp hơn.
    • PHẢI có tần suất đo tối đa là 400 Hz trở lên; NÊN hỗ trợ SensorDirectChannel RATE_VERY_FAST.
    • PHẢI có độ nhiễu đo lường không vượt quá 0,014°/s/√Hz.
    • [C-SR] BẠN NÊN CÓ BĂNG THÔNG ĐO 3dB ít nhất bằng 80% tần số Nyquist và phổ nhiễu trắng trong băng thông này.
    • NÊN có tốc độ biến thiên ngẫu nhiên dưới 0,001 °/s √Hz được kiểm tra ở nhiệt độ phòng.
    • NÊN có độ lệch thay đổi so với nhiệt độ là ≤ +/- 0,05 °/ s / °C.
    • NÊN có độ nhạy thay đổi so với nhiệt độ ≤ 0,02% / °C.
    • NÊN có độ không tuyến tính của đường thẳng vừa khít nhất là ≤ 0,2%.
    • NÊN có mật độ nhiễu ≤ 0,007 °/s/√Hz.
    • NÊN có sai số hiệu chuẩn dưới 0,002 rad/s trong phạm vi nhiệt độ từ 10 đến 40°C khi thiết bị ở trạng thái tĩnh.
    • NÊN có độ nhạy g nhỏ hơn 0,1°/s/g.
    • PHẢI có độ nhạy theo trục ngang < 4,0 % và độ biến thiên độ nhạy theo trục ngang < 0,3% trong phạm vi nhiệt độ hoạt động của thiết bị.
  • [C-2-4] PHẢI có TYPE_GYROSCOPE_UNCALIBRATED đáp ứng các yêu cầu về chất lượng giống như TYPE_GYROSCOPE.

  • [C-2-5] PHẢI có cảm biến TYPE_GEOMAGNETIC_FIELD:

    • PHẢI có phạm vi đo ít nhất từ -900 đến +900 μT.
    • PHẢI có độ phân giải đo lường tối thiểu là 5 LSB/uT.
    • PHẢI có tần suất đo tối thiểu là 5 Hz hoặc thấp hơn.
    • PHẢI có tần suất đo tối đa là 50 Hz trở lên.
    • PHẢI có độ nhiễu đo không quá 0,5 uT.
  • [C-2-6] PHẢI có một TYPE_MAGNETIC_FIELD_UNCALIBRATED có các yêu cầu về chất lượng giống như TYPE_GEOMAGNETIC_FIELD và ngoài ra:

    • PHẢI triển khai một dạng không đánh thức của cảm biến này với khả năng đệm ít nhất 600 sự kiện cảm biến.
    • [C-SR] BẠN NÊN CÓ phổ nhiễu trắng từ 1 Hz đến ít nhất 10 Hz khi tốc độ báo cáo là 50 Hz trở lên.
  • [C-2-7] PHẢI có cảm biến TYPE_PRESSURE:

    • PHẢI có phạm vi đo ít nhất từ 300 đến 1100 hPa.
    • PHẢI có độ phân giải đo lường tối thiểu là 80 LSB/hPa.
    • PHẢI có tần suất đo tối thiểu là 1 Hz hoặc thấp hơn.
    • PHẢI có tần suất đo tối đa là 10 Hz trở lên.
    • PHẢI có độ nhiễu đo không quá 2 Pa/√Hz.
    • PHẢI triển khai một dạng không đánh thức của cảm biến này với khả năng đệm ít nhất 300 sự kiện cảm biến.
    • PHẢI có mức tiêu thụ điện năng theo lô không quá 2 mW.
  • [C-2-8] PHẢI có cảm biến TYPE_GAME_ROTATION_VECTOR.
  • [C-2-9] PHẢI có cảm biến TYPE_SIGNIFICANT_MOTION:
    • PHẢI có mức tiêu thụ điện năng không quá 0,5 mW khi thiết bị ở trạng thái tĩnh và 1,5 mW khi thiết bị đang di chuyển.
  • [C-2-10] PHẢI có cảm biến TYPE_STEP_DETECTOR:
    • PHẢI triển khai một dạng không đánh thức của cảm biến này với khả năng đệm ít nhất 100 sự kiện cảm biến.
    • PHẢI có mức tiêu thụ điện năng không quá 0,5 mW khi thiết bị ở trạng thái tĩnh và 1,5 mW khi thiết bị đang di chuyển.
    • PHẢI có mức tiêu thụ điện năng theo lô không quá 4 mW.
  • [C-2-11] PHẢI có cảm biến TYPE_STEP_COUNTER:
    • PHẢI có mức tiêu thụ điện năng không quá 0,5 mW khi thiết bị ở trạng thái tĩnh và 1,5 mW khi thiết bị đang di chuyển.
  • [C-2-12] PHẢI có cảm biến TILT_DETECTOR:
    • PHẢI có mức tiêu thụ điện năng không quá 0,5 mW khi thiết bị ở trạng thái tĩnh và 1,5 mW khi thiết bị đang di chuyển.
  • [C-2-13] Dấu thời gian của sự kiện vật lý giống nhau do Gia tốc kế, Con quay hồi chuyển và Từ kế báo cáo PHẢI nằm trong khoảng 2, 5 mili giây của nhau. Dấu thời gian của sự kiện vật lý giống nhau do Cảm biến gia tốc và Con quay hồi chuyển báo cáo PHẢI cách nhau không quá 0,25 mili giây.
  • [C-2-14] PHẢI có dấu thời gian sự kiện của cảm biến Con quay hồi chuyển trên cùng cơ sở thời gian với hệ thống con camera và trong vòng 1 mili giây lỗi.
  • [C-2-15] PHẢI gửi các mẫu đến ứng dụng trong vòng 5 mili giây kể từ thời điểm dữ liệu có sẵn trên bất kỳ cảm biến vật lý nào nêu trên cho ứng dụng.
  • [C-2-16] KHÔNG ĐƯỢC có mức tiêu thụ điện năng cao hơn 0,5 mW khi thiết bị ở trạng thái tĩnh và 2,0 mW khi thiết bị đang di chuyển khi bạn bật bất kỳ tổ hợp nào của các cảm biến sau:
    • SENSOR_TYPE_SIGNIFICANT_MOTION
    • SENSOR_TYPE_STEP_DETECTOR
    • SENSOR_TYPE_STEP_COUNTER
    • SENSOR_TILT_DETECTORS
  • [C-2-17] CÓ THỂ có cảm biến TYPE_PROXIMITY, nhưng nếu có thì PHẢI có khả năng lưu vào bộ nhớ đệm tối thiểu là 100 sự kiện cảm biến.

Xin lưu ý rằng tất cả các yêu cầu về mức tiêu thụ điện năng trong phần này đều không bao gồm mức tiêu thụ điện năng của Bộ xử lý ứng dụng. Đây là tổng công suất tiêu thụ của toàn bộ chuỗi cảm biến – cảm biến, mọi mạch điện hỗ trợ, mọi hệ thống xử lý cảm biến chuyên dụng, v.v.

Nếu các hoạt động triển khai thiết bị có hỗ trợ cảm biến trực tiếp, thì:

  • [C-3-1] PHẢI khai báo chính xác việc hỗ trợ các loại kênh trực tiếp và cấp tốc độ báo cáo trực tiếp thông qua API isDirectChannelTypeSupportedgetHighestDirectReportRateLevel.
  • [C-3-2] PHẢI hỗ trợ ít nhất một trong hai loại kênh trực tiếp của cảm biến cho tất cả các cảm biến khai báo hỗ trợ kênh trực tiếp của cảm biến.
  • SHOULD support event reporting through sensor direct channel for primary sensor (non-wakeup variant) of the following types:
    • TYPE_ACCELEROMETER
    • TYPE_ACCELEROMETER_UNCALIBRATED
    • TYPE_GYROSCOPE
    • TYPE_GYROSCOPE_UNCALIBRATED
    • TYPE_MAGNETIC_FIELD
    • TYPE_MAGNETIC_FIELD_UNCALIBRATED

7.3.10. Cảm biến sinh trắc học

Để biết thêm thông tin cơ bản về việc Đo lường mức độ bảo mật của tính năng Mở khoá bằng sinh trắc học, vui lòng xem tài liệu Đo lường mức độ bảo mật của tính năng sinh trắc học.

Nếu các hoạt động triển khai thiết bị có màn hình khoá bảo mật, thì:

  • NÊN có cảm biến sinh trắc học

Các cảm biến sinh trắc học có thể được phân loại là Lớp 3 (trước đây là Mạnh), Lớp 2 (trước đây là Yếu) hoặc Lớp 1 (trước đây là Tiện lợi) dựa trên tỷ lệ chấp nhận hành vi giả mạo và mạo danh, cũng như mức độ bảo mật của quy trình sinh trắc học. Phân loại này xác định các chức năng mà cảm biến sinh trắc học có để tương tác với nền tảng và với các ứng dụng bên thứ ba. Theo mặc định, các cảm biến được phân loại là Lớp 1 và cần đáp ứng các yêu cầu bổ sung như được nêu chi tiết bên dưới nếu muốn được phân loại là Lớp 2 hoặc Lớp 3. Cả thông tin sinh trắc học Lớp 2Lớp 3 đều có thêm các chức năng như được nêu chi tiết bên dưới.

Nếu các phương thức triển khai thiết bị cung cấp cảm biến sinh trắc học cho các ứng dụng bên thứ ba thông qua android.hardware.biometrics.BiometricManager, android.hardware.biometrics.BiometricPromptandroid.provider.Settings.ACTION_BIOMETRIC_ENROLL, thì:

  • [C-4-1] PHẢI đáp ứng các yêu cầu đối với thông tin sinh trắc học Lớp 3 hoặc Lớp 2 như được xác định trong tài liệu này.
  • [C-4-2] PHẢI nhận dạng và tuân thủ từng tên tham số được xác định là một hằng số trong lớp Authenticators và mọi tổ hợp của tên tham số đó. Ngược lại, KHÔNG ĐƯỢC chấp nhận hoặc nhận dạng các hằng số nguyên được truyền đến các phương thức canAuthenticate(int)setAllowedAuthenticators(int) ngoài những hằng số được ghi lại là hằng số công khai trong Authenticators và mọi tổ hợp của các hằng số đó.
  • [C-4-3] PHẢI triển khai thao tác ACTION_BIOMETRIC_ENROLL trên những thiết bị có dữ liệu sinh trắc học Loại 3 hoặc Loại 2. Hành động này CHỈ ĐƯỢC PHÉP trình bày các điểm truy cập đăng ký cho dữ liệu sinh trắc học Loại 3 hoặc Loại 2.

Nếu các hoạt động triển khai thiết bị hỗ trợ dữ liệu sinh trắc học thụ động, thì:

  • [C-5-1] Theo mặc định, PHẢI yêu cầu thêm một bước xác nhận (ví dụ: nhấn nút).
  • [C-SR] RẤT NÊN có một chế độ cài đặt cho phép người dùng ghi đè lựa chọn ưu tiên của ứng dụng và luôn yêu cầu bước xác nhận đi kèm.
  • [C-SR] RẤT NÊN có hành động xác nhận được bảo mật để việc xâm nhập hệ điều hành hoặc nhân không thể giả mạo hành động này. Ví dụ: điều này có nghĩa là thao tác xác nhận dựa trên một nút vật lý được định tuyến thông qua một chân đầu vào/đầu ra (GPIO) đa năng chỉ có đầu vào của một phần tử bảo mật (SE) mà không thể được điều khiển bằng bất kỳ phương tiện nào khác ngoài thao tác nhấn nút vật lý.
  • [C-5-2] PHẢI triển khai thêm một quy trình xác thực ngầm (không có bước xác nhận) tương ứng với setConfirmationRequired(boolean). Các ứng dụng có thể đặt quy trình này để sử dụng cho quy trình đăng nhập.

Nếu các quy trình triển khai thiết bị có nhiều cảm biến sinh trắc học, thì:

  • [C-SR] NÊN YÊU CẦU xác nhận chỉ một dữ liệu sinh trắc học cho mỗi lần xác thực (ví dụ: nếu thiết bị có cả cảm biến vân tay và khuôn mặt, thì onAuthenticationSucceeded sẽ được gửi sau khi xác nhận một trong hai cảm biến).

Để các hoạt động triển khai thiết bị cho phép các ứng dụng bên thứ ba truy cập vào các kho khoá, các hoạt động này phải:

  • [C-6-1] PHẢI đáp ứng các yêu cầu đối với Lớp 3 như được xác định trong phần dưới đây.
  • [C-6-2] CHỈ ĐƯỢC PHÉP trình bày dữ liệu sinh trắc học Loại 3 khi quy trình xác thực yêu cầu BIOMETRIC_STRONG hoặc quy trình xác thực được gọi bằng một CryptoObject.

Nếu muốn coi cảm biến sinh trắc học là Lớp 1 (trước đây là Tiện lợi), thì các hoạt động triển khai thiết bị phải:

  • [C-1-1] PHẢI có tỷ lệ chấp nhận sai nhỏ hơn 0,002%.
  • [C-1-2] PHẢI công bố rằng chế độ này có thể kém an toàn hơn so với mã PIN, hình mở khoá hoặc mật khẩu khó đoán và liệt kê rõ ràng các rủi ro khi bật chế độ này, nếu tỷ lệ chấp nhận hành vi giả mạo và mạo danh cao hơn 7% theo đo lường của Giao thức kiểm thử sinh trắc học trên Android.
  • [C-1-3] PHẢI giới hạn số lần thử trong ít nhất 30 giây sau 5 lần thử sai để xác minh bằng sinh trắc học – trong đó, lần thử sai là lần thử có chất lượng chụp đủ (BIOMETRIC_ACQUIRED_GOOD) nhưng không khớp với dữ liệu sinh trắc học đã đăng ký.
  • [C-1-4] PHẢI ngăn việc thêm dữ liệu sinh trắc học mới mà không thiết lập trước chuỗi tin cậy bằng cách yêu cầu người dùng xác nhận thông tin đăng nhập hiện có hoặc thêm thông tin đăng nhập mới cho thiết bị (mã PIN/mẫu hình/mật khẩu) được bảo mật bằng TEE; việc triển khai Dự án nguồn mở Android cung cấp cơ chế trong khung để thực hiện việc này.
  • [C-1-5] PHẢI xoá hoàn toàn mọi dữ liệu sinh trắc học nhận dạng của người dùng khi tài khoản của người dùng bị xoá (kể cả khi đặt lại về trạng thái ban đầu).
  • [C-1-6] PHẢI tuân thủ từng cờ riêng lẻ cho thông tin sinh trắc học đó (tức là DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT, DevicePolicymanager.KEYGUARD_DISABLE_FACE hoặc DevicePolicymanager.KEYGUARD_DISABLE_IRIS).
  • [C-1-7] PHẢI yêu cầu người dùng xác thực bằng phương thức xác thực chính được đề xuất (ví dụ: mã PIN, hình mở khoá, mật khẩu) ít nhất 24 giờ một lần đối với các thiết bị mới ra mắt chạy Android phiên bản 10, ít nhất 72 giờ một lần đối với các thiết bị nâng cấp từ phiên bản Android cũ hơn.
  • [C-1-8] PHẢI yêu cầu người dùng xác thực chính được đề xuất (ví dụ: mã PIN, hình mở khoá, mật khẩu) sau một trong những trường hợp sau:

    • khoảng thời gian chờ 4 giờ, HOẶC
    • Xác thực bằng sinh trắc học không thành công 3 lần.
    • Khoảng thời gian chờ và số lần xác thực không thành công sẽ được đặt lại sau khi xác nhận thành công thông tin đăng nhập thiết bị.

    Việc nâng cấp thiết bị từ một phiên bản Android cũ có thể được miễn trừ theo quy tắc C-1-8. * [C-SR] RẤT NÊN dùng logic trong khung do Dự án nguồn mở Android cung cấp để thực thi các ràng buộc được chỉ định trong [C-1-7] và [C-1-8] cho các thiết bị mới. * [C-SR] NÊN CÓ tỷ lệ từ chối sai dưới 10%, theo đo lường trên thiết bị. * [C-SR] NÊN CÓ độ trễ dưới 1 giây, tính từ thời điểm phát hiện dữ liệu sinh trắc học cho đến khi màn hình được mở khoá, đối với mỗi dữ liệu sinh trắc học đã đăng ký.

Nếu muốn coi cảm biến sinh trắc học là Lớp 2 (trước đây là Yếu), thì các hoạt động triển khai thiết bị sẽ:

  • [C-2-1] PHẢI đáp ứng tất cả các yêu cầu đối với Cấp 1 nêu trên.
  • [C-2-2] PHẢI có tỷ lệ chấp nhận hành vi giả mạo và mạo danh không cao hơn 20% theo đo lường của Giao thức kiểm thử sinh trắc học trên Android.
  • [C-2-3] PHẢI thực hiện quy trình so khớp sinh trắc học trong một môi trường thực thi biệt lập bên ngoài không gian người dùng hoặc không gian nhân Android, chẳng hạn như Môi trường thực thi đáng tin cậy (TEE), hoặc trên một chip có kênh bảo mật đến môi trường thực thi biệt lập.
  • [C-2-4] PHẢI mã hoá và xác thực bằng mật mã tất cả dữ liệu nhận dạng để không thể thu thập, đọc hoặc thay đổi dữ liệu đó bên ngoài môi trường thực thi biệt lập hoặc một chip có kênh bảo mật đến môi trường thực thi biệt lập như được ghi lại trong hướng dẫn triển khai trên trang web Dự án nguồn mở Android.
  • [C-2-5] Đối với dữ liệu sinh trắc học dựa trên camera, trong khi quá trình xác thực hoặc đăng ký dựa trên dữ liệu sinh trắc học đang diễn ra:
    • PHẢI vận hành camera ở chế độ ngăn các khung hình camera bị đọc hoặc thay đổi bên ngoài môi trường thực thi tách biệt hoặc một chip có kênh bảo mật đến môi trường thực thi tách biệt.
    • Đối với các giải pháp một camera RGB, các khung hình camera CÓ THỂ đọc được bên ngoài môi trường thực thi biệt lập để hỗ trợ các hoạt động như xem trước để đăng ký, nhưng VẪN KHÔNG ĐƯỢC phép thay đổi.
  • [C-2-6] KHÔNG ĐƯỢC cho phép các ứng dụng bên thứ ba phân biệt giữa các lần đăng ký sinh trắc học riêng lẻ.
  • [C-2-7] KHÔNG ĐƯỢC phép truy cập vào dữ liệu sinh trắc học nhận dạng hoặc bất kỳ dữ liệu nào bắt nguồn từ dữ liệu đó (chẳng hạn như dữ liệu nhúng) chưa được mã hoá vào Bộ xử lý ứng dụng bên ngoài bối cảnh của TEE.
  • [C-2-8] PHẢI có một quy trình xử lý an toàn để việc xâm nhập vào hệ điều hành hoặc nhân không thể cho phép dữ liệu được chèn trực tiếp để xác thực sai danh tính người dùng.

    Nếu các hoạt động triển khai thiết bị đã được ra mắt trên một phiên bản Android cũ và không đáp ứng được yêu cầu C-2-8 thông qua bản cập nhật phần mềm hệ thống, thì các hoạt động triển khai đó CÓ THỂ được miễn yêu cầu.

  • [C-SR] NÊN CÓ tính năng phát hiện sự sống cho tất cả các phương thức sinh trắc học và tính năng phát hiện sự chú ý cho phương thức sinh trắc học khuôn mặt.

Nếu muốn coi cảm biến sinh trắc học là Loại 3 (trước đây là Mạnh), thì các hoạt động triển khai thiết bị phải:

  • [C-3-1] PHẢI đáp ứng tất cả các yêu cầu của Cấp 2 nêu trên, ngoại trừ [C-1-7] và [C-1-8]. Các thiết bị nâng cấp từ một phiên bản Android cũ không được miễn trừ C-2-7.
  • [C-3-2] PHẢI có một quy trình triển khai kho khoá dựa trên phần cứng.
  • [C-3-3] PHẢI có tỷ lệ chấp nhận hành vi giả mạo và mạo danh không cao hơn 7% theo đo lường của Giao thức kiểm thử sinh trắc học trên Android.
  • [C-3-4] PHẢI yêu cầu người dùng xác thực chính theo cách được đề xuất (ví dụ: mã PIN, hình mở khoá, mật khẩu) sau mỗi 72 giờ hoặc ít hơn.

7.3.12. Cảm biến tư thế

Cách triển khai thiết bị:

  • CÓ THỂ hỗ trợ cảm biến tư thế với 6 bậc tự do.

Nếu các chế độ triển khai thiết bị hỗ trợ cảm biến tư thế có 6 bậc tự do, thì:

  • [C-1-1] PHẢI triển khai và báo cáo cảm biến TYPE_POSE_6DOF.
  • [C-1-2] PHẢI chính xác hơn so với chỉ vectơ xoay.

7.3.13. Cảm biến góc bản lề

Nếu các chế độ triển khai thiết bị hỗ trợ cảm biến góc bản lề, thì:

7.4. Kết nối dữ liệu

7.4.1. Điện thoại

"Điện thoại" như được dùng trong các API Android và tài liệu này đề cập cụ thể đến phần cứng liên quan đến việc thực hiện cuộc gọi thoại và gửi tin nhắn SMS qua mạng GSM hoặc CDMA. Mặc dù các cuộc gọi thoại này có thể hoặc không thể chuyển mạch gói, nhưng đối với mục đích của Android, chúng được coi là độc lập với mọi kết nối dữ liệu có thể được triển khai bằng cùng một mạng. Nói cách khác, chức năng và API "điện thoại" của Android đề cập cụ thể đến cuộc gọi thoại và SMS. Ví dụ: những thiết bị triển khai không thể thực hiện cuộc gọi hoặc gửi/nhận tin nhắn SMS không được coi là thiết bị điện thoại, bất kể chúng có sử dụng mạng di động để kết nối dữ liệu hay không.

  • Android CÓ THỂ được dùng trên các thiết bị không có phần cứng điện thoại. Tức là Android tương thích với những thiết bị không phải là điện thoại.

Nếu các hoạt động triển khai thiết bị bao gồm chức năng điện thoại GSM hoặc CDMA, thì các hoạt động này:

  • [C-1-1] PHẢI khai báo cờ tính năng android.hardware.telephony và các cờ tính năng phụ khác theo công nghệ.
  • [C-1-2] PHẢI triển khai chế độ hỗ trợ đầy đủ cho API của công nghệ đó.

Nếu các hoạt động triển khai thiết bị không bao gồm phần cứng điện thoại, thì:

  • [C-2-1] PHẢI triển khai toàn bộ API dưới dạng các thao tác không có tác dụng.

Nếu các hoạt động triển khai thiết bị hỗ trợ eUICC hoặc eSIM/SIM nhúng và có một cơ chế độc quyền để cung cấp chức năng eSIM cho nhà phát triển bên thứ ba, thì các hoạt động triển khai đó:

  • [C-3-1] PHẢI cung cấp một phương thức triển khai hoàn chỉnh của EuiccManager API.
7.4.1.1. Khả năng tương thích của tính năng chặn số

Nếu các chế độ triển khai thiết bị báo cáo android.hardware.telephony feature, thì:

  • [C-1-1] PHẢI có tính năng chặn số
  • [C-1-2] PHẢI triển khai đầy đủ BlockedNumberContract và API tương ứng như mô tả trong tài liệu SDK.
  • [C-1-3] PHẢI chặn tất cả cuộc gọi và tin nhắn từ một số điện thoại trong "BlockedNumberProvider" mà không có bất kỳ tương tác nào với các ứng dụng. Trường hợp ngoại lệ duy nhất là khi tính năng chặn số điện thoại tạm thời bị vô hiệu hoá như mô tả trong tài liệu SDK.
  • [C-1-4] KHÔNG ĐƯỢC ghi vào trình cung cấp nhật ký cuộc gọi của nền tảng cho một cuộc gọi bị chặn.
  • [C-1-5] KHÔNG ĐƯỢC ghi vào Nhà cung cấp dịch vụ điện thoại đối với một tin nhắn bị chặn.
  • [C-1-6] PHẢI triển khai giao diện người dùng quản lý số bị chặn. Giao diện này sẽ mở ra bằng ý định do phương thức TelecomManager.createManageBlockedNumbersIntent() trả về.
  • [C-1-7] KHÔNG ĐƯỢC phép người dùng phụ xem hoặc chỉnh sửa các số bị chặn trên thiết bị vì nền tảng Android giả định rằng người dùng chính có toàn quyền kiểm soát các dịch vụ điện thoại (một phiên bản duy nhất) trên thiết bị. TẤT CẢ giao diện người dùng liên quan đến việc chặn ĐỀU PHẢI bị ẩn đối với người dùng phụ và danh sách chặn VẪN PHẢI được tuân thủ.
  • NÊN di chuyển các số bị chặn vào nhà cung cấp khi thiết bị cập nhật lên Android 7.0.
7.4.1.2. Telecom API

Nếu các hoạt động triển khai thiết bị báo cáo android.hardware.telephony, thì:

  • [C-1-1] PHẢI hỗ trợ các API ConnectionService được mô tả trong SDK.
  • [C-1-2] PHẢI hiển thị cuộc gọi đến mới và cung cấp cho người dùng khả năng chấp nhận hoặc từ chối cuộc gọi đến khi người dùng đang thực hiện cuộc gọi do một ứng dụng bên thứ ba thực hiện và ứng dụng này không hỗ trợ tính năng giữ cuộc gọi được chỉ định thông qua CAPABILITY_SUPPORT_HOLD.
  • [C-1-3] PHẢI có một ứng dụng triển khai InCallService.
  • [C-SR] NÊN THÔNG BÁO cho người dùng rằng việc trả lời cuộc gọi đến sẽ làm gián đoạn cuộc gọi đang diễn ra.

    Việc triển khai AOSP đáp ứng những yêu cầu này bằng một thông báo xuất hiện ở đầu màn hình cho người dùng biết rằng việc trả lời cuộc gọi đến sẽ khiến cuộc gọi khác bị ngắt.

  • [C-SR] RẤT NÊN tải trước ứng dụng trình quay số mặc định hiển thị một mục nhật ký cuộc gọi và tên của ứng dụng bên thứ ba trong nhật ký cuộc gọi khi ứng dụng bên thứ ba đặt khoá bổ sung EXTRA_LOG_SELF_MANAGED_CALLS trên PhoneAccount thành true.

  • [C-SR] BẮT BUỘC phải xử lý các sự kiện KEYCODE_MEDIA_PLAY_PAUSEKEYCODE_HEADSETHOOK của tai nghe âm thanh cho các API android.telecom như sau:
    • Gọi Connection.onDisconnect() khi phát hiện thấy sự kiện nhấn phím trong thời gian ngắn trong cuộc gọi đang diễn ra.
    • Gọi Connection.onAnswer() khi phát hiện thấy sự kiện nhấn phím trong thời gian ngắn trong cuộc gọi đến.
    • Gọi Connection.onReject() khi phát hiện thấy sự kiện nhấn và giữ phím trong cuộc gọi đến.
    • Bật/tắt tiếng của CallAudioState.

7.4.2. IEEE 802.11 (Wi-Fi)

Cách triển khai thiết bị:

  • NÊN hỗ trợ một hoặc nhiều dạng thức của 802.11.

Nếu các hoạt động triển khai thiết bị có hỗ trợ 802.11 và cung cấp chức năng này cho một ứng dụng bên thứ ba, thì các hoạt động triển khai đó:

  • [C-1-1] PHẢI triển khai API Android tương ứng.
  • [C-1-2] PHẢI báo cáo cờ tính năng phần cứng android.hardware.wifi.
  • [C-1-3] PHẢI triển khai API truyền tin đa hướng như mô tả trong tài liệu SDK.
  • [C-1-4] PHẢI hỗ trợ DNS truyền tin đa hướng (mDNS) và KHÔNG ĐƯỢC lọc các gói mDNS (224.0.0.251) vào bất kỳ thời điểm nào trong quá trình hoạt động, bao gồm:
    • Ngay cả khi màn hình không ở trạng thái hoạt động.
    • Đối với các hoạt động triển khai thiết bị Android Television, ngay cả khi ở trạng thái nguồn ở chế độ chờ.
  • [C-1-5] KHÔNG ĐƯỢC coi lệnh gọi phương thức API WifiManager.enableNetwork() là dấu hiệu đủ để chuyển đổi Network hiện đang hoạt động (được dùng theo mặc định cho lưu lượng truy cập ứng dụng và do các phương thức API ConnectivityManager trả về, chẳng hạn như getActiveNetworkregisterDefaultNetworkCallback). Nói cách khác, họ CHỈ CÓ THỂ tắt quyền truy cập Internet do nhà cung cấp mạng khác cung cấp (ví dụ: dữ liệu di động) nếu họ xác thực thành công rằng mạng Wi-Fi đang cung cấp quyền truy cập Internet.
  • [C-1-6] NÊN khi phương thức API ConnectivityManager.reportNetworkConnectivity() được gọi, hãy đánh giá lại quyền truy cập Internet trên Network và khi quá trình đánh giá xác định rằng Network hiện tại không còn cung cấp quyền truy cập Internet nữa, hãy chuyển sang bất kỳ mạng nào khác có sẵn (ví dụ: dữ liệu di động) có cung cấp quyền truy cập Internet.
  • [C-SR] RẤT NÊN ngẫu nhiên hoá địa chỉ MAC nguồn và số thứ tự của các khung yêu cầu dò tìm, một lần khi bắt đầu mỗi lần quét, trong khi STA bị ngắt kết nối.
    • Mỗi nhóm khung yêu cầu dò tìm bao gồm một lần quét phải sử dụng một địa chỉ MAC nhất quán (KHÔNG ĐƯỢC ngẫu nhiên hoá địa chỉ MAC trong quá trình quét).
    • Số thứ tự của yêu cầu dò tìm sẽ lặp lại như bình thường (lần lượt) giữa các yêu cầu dò tìm trong một lần quét.
    • Số thứ tự yêu cầu dò tìm phải được tạo ngẫu nhiên giữa yêu cầu dò tìm cuối cùng của một lần quét và yêu cầu dò tìm đầu tiên của lần quét tiếp theo.
  • [C-SR] RẤT NÊN DÙNG, trong khi STA bị ngắt kết nối, chỉ cho phép các phần tử sau trong khung yêu cầu thăm dò:
    • Bộ thông số SSID (0)
    • Tập hợp tham số DS (3)

Nếu các hoạt động triển khai thiết bị có hỗ trợ chế độ tiết kiệm pin Wi-Fi như được xác định trong tiêu chuẩn IEEE 802.11, thì các hoạt động này:

  • [C-3-1] PHẢI tắt chế độ tiết kiệm pin Wi-Fi bất cứ khi nào một ứng dụng có được khoá WIFI_MODE_FULL_HIGH_PERF hoặc khoá WIFI_MODE_FULL_LOW_LATENCY thông qua các API WifiManager.createWifiLock()WifiManager.WifiLock.acquire() và khoá đang hoạt động.
  • [C-3-2] Độ trễ trung bình của chuyến khứ hồi giữa thiết bị và một điểm truy cập khi thiết bị ở chế độ Khoá Wi-Fi có độ trễ thấp (WIFI_MODE_FULL_LOW_LATENCY) PHẢI nhỏ hơn độ trễ trong chế độ Khoá Wi-Fi hiệu suất cao (WIFI_MODE_FULL_HIGH_PERF).
  • [C-SR] NÊN SỬ DỤNG để giảm thiểu độ trễ khứ hồi của Wi-Fi bất cứ khi nào có được và có hiệu lực Khoá độ trễ thấp (WIFI_MODE_FULL_LOW_LATENCY).

Nếu các hoạt động triển khai thiết bị hỗ trợ Wi-Fi và sử dụng Wi-Fi để quét vị trí, thì các hoạt động này sẽ:

7.4.2.1. Wi-Fi Direct

Cách triển khai thiết bị:

  • PHẢI hỗ trợ Wi-Fi Direct (Wi-Fi ngang hàng).

Nếu quá trình triển khai thiết bị có hỗ trợ Wi-Fi Direct, thì:

  • [C-1-1] PHẢI triển khai API Android tương ứng như mô tả trong tài liệu SDK.
  • [C-1-2] PHẢI báo cáo tính năng phần cứng android.hardware.wifi.direct.
  • [C-1-3] PHẢI hỗ trợ hoạt động Wi-Fi thông thường.
  • [C-1-4] PHẢI hỗ trợ đồng thời các thao tác Wi-Fi và Wi-Fi Direct.

Cách triển khai thiết bị:

Nếu các hoạt động triển khai thiết bị có hỗ trợ TDLS và TDLS được bật bằng API WiFiManager, thì các hoạt động triển khai đó sẽ:

  • [C-1-1] PHẢI khai báo dịch vụ hỗ trợ cho TDLS thông qua WifiManager.isTdlsSupported.
  • CHỈ NÊN sử dụng TDLS khi có thể VÀ có lợi.
  • NÊN có một số phương pháp phỏng đoán và KHÔNG sử dụng TDLS khi hiệu suất có thể kém hơn so với việc kết nối qua điểm truy cập Wi-Fi.
7.4.2.3. Wi-Fi Aware

Cách triển khai thiết bị:

Nếu các hoạt động triển khai thiết bị có hỗ trợ Wi-Fi Aware và cung cấp chức năng này cho các ứng dụng bên thứ ba, thì các hoạt động triển khai đó:

  • [C-1-1] PHẢI triển khai các API WifiAwareManager như mô tả trong tài liệu về SDK.
  • [C-1-2] PHẢI khai báo cờ tính năng android.hardware.wifi.aware.
  • [C-1-3] PHẢI hỗ trợ các hoạt động của Wi-Fi và Wi-Fi Aware cùng lúc.
  • [C-1-4] PHẢI ngẫu nhiên hoá địa chỉ giao diện quản lý Wi-Fi Aware theo các khoảng thời gian không quá 30 phút và bất cứ khi nào Wi-Fi Aware được bật, trừ phi đang diễn ra một hoạt động đo khoảng cách Aware hoặc đường dẫn dữ liệu Aware đang hoạt động (không cần ngẫu nhiên hoá miễn là đường dẫn dữ liệu đang hoạt động).

Nếu các hoạt động triển khai thiết bị có hỗ trợ Wi-Fi Aware và Wi-Fi Location như mô tả trong Mục 7.4.2.5 và cung cấp các chức năng này cho ứng dụng bên thứ ba, thì các hoạt động triển khai đó:

7.4.2.4. Passpoint Wi-Fi

Nếu quá trình triển khai thiết bị có hỗ trợ 802.11 (Wi-Fi), thì:

Nếu quá trình triển khai thiết bị có hỗ trợ Passpoint Wi-Fi, thì:

  • [C-1-2] PHẢI triển khai các API WifiManager liên quan đến Passpoint như mô tả trong tài liệu SDK.
  • [C-1-3] PHẢI hỗ trợ tiêu chuẩn IEEE 802.11u, đặc biệt là liên quan đến tính năng Khám phá và lựa chọn mạng, chẳng hạn như Dịch vụ quảng cáo chung (GAS) và Giao thức truy vấn mạng truy cập (ANQP).

Ngược lại, nếu các chế độ triển khai thiết bị không hỗ trợ Wi-Fi Passpoint:

  • [C-2-1] Việc triển khai các API WifiManager liên quan đến Passpoint PHẢI gửi một UnsupportedOperationException.
7.4.2.5. Vị trí Wi-Fi (Thời gian trọn vòng của Wi-Fi – RTT)

Cách triển khai thiết bị:

Nếu các hoạt động triển khai thiết bị có hỗ trợ Dịch vụ vị trí qua Wi-Fi và cung cấp chức năng này cho các ứng dụng bên thứ ba, thì các hoạt động triển khai đó:

  • [C-1-1] PHẢI triển khai các API WifiRttManager như mô tả trong tài liệu về SDK.
  • [C-1-2] PHẢI khai báo cờ tính năng android.hardware.wifi.rtt.
  • [C-1-3] PHẢI tạo địa chỉ MAC nguồn ngẫu nhiên cho mỗi chuỗi RTT được thực thi trong khi giao diện Wi-Fi mà RTT đang được thực thi không được liên kết với Điểm truy cập.
7.4.2.6. Tải tính năng duy trì kết nối Wi-Fi xuống

Cách triển khai thiết bị:

  • NÊN hỗ trợ tính năng chuyển tải Wi-Fi keepalive.

Nếu các hoạt động triển khai thiết bị có hỗ trợ tính năng chuyển tải Wi-Fi ở chế độ duy trì kết nối và cung cấp chức năng này cho các ứng dụng bên thứ ba, thì:

  • [C-1-1] PHẢI hỗ trợ API SocketKeepAlive.

  • [C-1-2] PHẢI hỗ trợ ít nhất 3 khe cắm duy trì hoạt động đồng thời qua Wi-Fi và ít nhất 1 khe cắm duy trì hoạt động qua mạng di động.

Nếu các hoạt động triển khai thiết bị không hỗ trợ tính năng chuyển tải chế độ duy trì hoạt động của Wi-Fi, thì:

7.4.2.7. Kết nối Wi-Fi dễ dàng (Giao thức thiết lập thiết bị)

Cách triển khai thiết bị:

Nếu các hoạt động triển khai thiết bị có hỗ trợ Wi-Fi Easy Connect và cung cấp chức năng này cho các ứng dụng bên thứ ba, thì các hoạt động triển khai đó:

7.4.3. Bluetooth

Nếu các chế độ triển khai thiết bị hỗ trợ cấu hình Âm thanh Bluetooth, thì:

  • NÊN hỗ trợ Bộ mã hoá và giải mã âm thanh nâng cao và Bộ mã hoá và giải mã âm thanh qua Bluetooth (ví dụ: LDAC).

Nếu các thiết bị triển khai hỗ trợ HFP, A2DP và AVRCP, thì:

  • SHOULD hỗ trợ ít nhất 5 thiết bị được kết nối.

Nếu các phương thức triển khai thiết bị khai báo tính năng android.hardware.vr.high_performance, thì:

  • [C-1-1] PHẢI hỗ trợ Bluetooth 4.2 và tiện ích mở rộng độ dài dữ liệu Bluetooth LE.

Android hỗ trợ Bluetooth và Bluetooth năng lượng thấp.

Nếu các hoạt động triển khai thiết bị có hỗ trợ Bluetooth và Bluetooth năng lượng thấp, thì:

  • [C-2-1] PHẢI khai báo các tính năng nền tảng có liên quan (tương ứng là android.hardware.bluetoothandroid.hardware.bluetooth_le) và triển khai các API nền tảng.
  • NÊN triển khai các cấu hình Bluetooth có liên quan như A2DP, AVRCP, OBEX, HFP, v.v. cho phù hợp với thiết bị.

Nếu các hoạt động triển khai thiết bị có hỗ trợ Bluetooth năng lượng thấp (BLE), thì:

  • [C-3-1] PHẢI khai báo tính năng phần cứng android.hardware.bluetooth_le.
  • [C-3-2] PHẢI bật các API Bluetooth dựa trên GATT (hồ sơ thuộc tính chung) như mô tả trong tài liệu SDK và android.bluetooth.
  • [C-3-3] PHẢI báo cáo đúng giá trị cho BluetoothAdapter.isOffloadedFilteringSupported() để cho biết liệu logic lọc cho các lớp API ScanFilter có được triển khai hay không.
  • [C-3-4] PHẢI báo cáo đúng giá trị cho BluetoothAdapter.isMultipleAdvertisementSupported() để cho biết liệu có hỗ trợ Quảng cáo tiêu thụ ít năng lượng hay không.
  • [C-3-5] PHẢI triển khai thời gian chờ Địa chỉ riêng tư có thể phân giải (RPA) không quá 15 phút và xoay vòng địa chỉ khi hết thời gian chờ để bảo vệ quyền riêng tư của người dùng khi thiết bị đang tích cực sử dụng BLE để quét hoặc quảng cáo. Để ngăn chặn các cuộc tấn công dựa trên thời gian, các khoảng thời gian chờ cũng PHẢI được chọn ngẫu nhiên trong khoảng từ 5 đến 15 phút.
  • NÊN hỗ trợ việc chuyển logic lọc sang chipset bluetooth khi triển khai ScanFilter API.
  • NÊN hỗ trợ việc chuyển quy trình quét theo lô sang chipset Bluetooth.
  • NÊN hỗ trợ nhiều quảng cáo với ít nhất 4 vị trí.

Nếu các hoạt động triển khai thiết bị hỗ trợ Bluetooth LE và sử dụng Bluetooth LE để quét vị trí, thì:

  • [C-4-1] PHẢI cung cấp cho người dùng một phương thức để bật/tắt giá trị đọc thông qua API Hệ thống BluetoothAdapter.isBleScanAlwaysAvailable().

Nếu các hoạt động triển khai thiết bị có hỗ trợ Bluetooth LE và Cấu hình thiết bị trợ thính, như mô tả trong phần Hỗ trợ âm thanh cho thiết bị trợ thính bằng Bluetooth LE, thì:

7.4.4. Giao tiếp phạm vi gần

Cách triển khai thiết bị:

  • PHẢI có một bộ thu phát và phần cứng liên quan cho Giao tiếp phạm vi gần (NFC).
  • [C-0-1] PHẢI triển khai các API android.nfc.NdefMessageandroid.nfc.NdefRecord ngay cả khi các API này không hỗ trợ NFC hoặc khai báo tính năng android.hardware.nfc vì các lớp này đại diện cho một định dạng biểu diễn dữ liệu độc lập với giao thức.

Nếu các hoạt động triển khai thiết bị bao gồm phần cứng NFC và có kế hoạch cung cấp phần cứng này cho các ứng dụng bên thứ ba, thì các hoạt động triển khai đó:

  • [C-1-1] PHẢI báo cáo tính năng android.hardware.nfc từ phương thức android.content.pm.PackageManager.hasSystemFeature().
  • PHẢI có khả năng đọc và ghi thông báo NDEF thông qua các tiêu chuẩn NFC sau đây:
  • [C-1-2] PHẢI có khả năng hoạt động như một trình đọc/ghi của NFC Forum (theo định nghĩa của quy cách kỹ thuật NFCForum-TS-DigitalProtocol-1.0 của NFC Forum) thông qua các tiêu chuẩn NFC sau:
    • NfcA (ISO14443-3A)
    • NfcB (ISO14443-3B)
    • NfcF (JIS X 6319-4)
    • IsoDep (ISO 14443-4)
    • Các loại thẻ NFC Forum 1, 2, 3, 4, 5 (do NFC Forum xác định)
  • [SR] RẤT NÊN có khả năng đọc và ghi thông báo NDEF cũng như dữ liệu thô thông qua các tiêu chuẩn NFC sau. Xin lưu ý rằng mặc dù các tiêu chuẩn NFC được nêu là RẤT NÊN DÙNG, nhưng Định nghĩa về khả năng tương thích cho một phiên bản trong tương lai dự kiến sẽ thay đổi các tiêu chuẩn này thành PHẢI DÙNG. Bạn không bắt buộc phải tuân thủ các tiêu chuẩn này trong phiên bản này nhưng sẽ phải tuân thủ trong các phiên bản sau. Các thiết bị hiện có và thiết bị mới chạy phiên bản Android này nên đáp ứng các yêu cầu này ngay từ bây giờ để có thể nâng cấp lên các bản phát hành nền tảng trong tương lai.

  • [C-1-13] PHẢI thăm dò tất cả các công nghệ được hỗ trợ trong khi ở chế độ khám phá NFC.

  • NÊN ở chế độ khám phá NFC trong khi thiết bị đang hoạt động, màn hình đang bật và màn hình khoá đang ở trạng thái mở khoá.
  • PHẢI có khả năng đọc mã vạch và URL (nếu được mã hoá) của các sản phẩm Mã vạch NFC Thinfilm.

Xin lưu ý rằng các đường liên kết công khai không có sẵn cho các quy cách JIS, ISO và Diễn đàn NFC được trích dẫn ở trên.

Android có hỗ trợ chế độ Giả lập thẻ dựa trên máy chủ (HCE) của NFC.

Nếu các hoạt động triển khai thiết bị bao gồm một chipset bộ điều khiển NFC có khả năng HCE (cho NfcA và/hoặc NfcB) và hỗ trợ định tuyến Mã nhận dạng ứng dụng (AID), thì các hoạt động này:

  • [C-2-1] PHẢI báo cáo hằng số tính năng android.hardware.nfc.hce.
  • [C-2-2] PHẢI hỗ trợ API HCE NFC như được xác định trong Android SDK.

Nếu các hoạt động triển khai thiết bị bao gồm một chipset bộ điều khiển NFC có khả năng HCE cho NfcF và triển khai tính năng này cho các ứng dụng bên thứ ba, thì:

  • [C-3-1] PHẢI báo cáo hằng số tính năng android.hardware.nfc.hcef.
  • [C-3-2] PHẢI triển khai API Mô phỏng thẻ NfcF như được xác định trong Android SDK.

Nếu các hoạt động triển khai thiết bị có hỗ trợ NFC chung như mô tả trong phần này và hỗ trợ các công nghệ MIFARE (MIFARE Classic, MIFARE Ultralight, NDEF trên MIFARE Classic) trong vai trò đầu đọc/ghi, thì các hoạt động triển khai đó:

  • [C-4-1] PHẢI triển khai các API Android tương ứng như được ghi lại trong Android SDK.
  • [C-4-2] PHẢI báo cáo tính năng com.nxp.mifare từ phương thức android.content.pm.PackageManager.hasSystemFeature(). Xin lưu ý rằng đây không phải là một tính năng chuẩn của Android và do đó không xuất hiện dưới dạng hằng số trong lớp android.content.pm.PackageManager.

7.4.5. Giao thức và API mạng

7.4.5.1. Khả năng mạng tối thiểu

Cách triển khai thiết bị:

  • [C-0-1] PHẢI hỗ trợ một hoặc nhiều hình thức kết nối mạng dữ liệu. Cụ thể, các hoạt động triển khai thiết bị PHẢI hỗ trợ ít nhất một tiêu chuẩn dữ liệu có khả năng đạt tốc độ 200 Kbit/giây trở lên. Các ví dụ về công nghệ đáp ứng yêu cầu này bao gồm EDGE, HSPA, EV-DO, 802.11g, Ethernet và PAN Bluetooth.
  • CŨNG NÊN hỗ trợ ít nhất một tiêu chuẩn dữ liệu không dây phổ biến, chẳng hạn như 802.11 (Wi-Fi), khi tiêu chuẩn mạng vật lý (chẳng hạn như Ethernet) là kết nối dữ liệu chính.
  • CÓ THỂ triển khai nhiều hình thức kết nối dữ liệu.
7.4.5.2. IPv6

Cách triển khai thiết bị:

  • [C-0-2] PHẢI có một ngăn xếp mạng IPv6 và hỗ trợ giao tiếp IPv6 bằng các API được quản lý, chẳng hạn như java.net.Socketjava.net.URLConnection, cũng như các API gốc, chẳng hạn như các ổ cắm AF_INET6.
  • [C-0-3] PHẢI bật IPv6 theo mặc định.
  • PHẢI đảm bảo rằng giao tiếp IPv6 cũng đáng tin cậy như IPv4, ví dụ:
    • [C-0-4] PHẢI duy trì kết nối IPv6 ở chế độ chờ.
    • [C-0-5] Tính năng giới hạn tốc độ KHÔNG ĐƯỢC khiến thiết bị mất kết nối IPv6 trên bất kỳ mạng tuân thủ IPv6 nào sử dụng thời gian tồn tại RA ít nhất là 180 giây.
  • [C-0-6] PHẢI cung cấp cho các ứng dụng bên thứ ba khả năng kết nối trực tiếp IPv6 với mạng khi kết nối với mạng IPv6, mà không có bất kỳ hình thức dịch địa chỉ hoặc cổng nào diễn ra cục bộ trên thiết bị. Cả API được quản lý (chẳng hạn như Socket#getLocalAddress hoặc Socket#getLocalPort) và API NDK (chẳng hạn như getsockname() hoặc IPV6_PKTINFO) PHẢI trả về địa chỉ IP và cổng thực sự được dùng để gửi và nhận các gói trên mạng, đồng thời hiển thị dưới dạng ip và cổng nguồn cho các máy chủ Internet (web).

Cấp độ hỗ trợ IPv6 bắt buộc phụ thuộc vào loại mạng, như trong các yêu cầu sau.

Nếu các hoạt động triển khai thiết bị hỗ trợ Wi-Fi, thì:

  • [C-1-1] PHẢI hỗ trợ hoạt động chỉ dùng IPv6 và ngăn xếp kép trên Wi-Fi.

Nếu các thiết bị triển khai hỗ trợ Ethernet, thì:

  • [C-2-1] PHẢI hỗ trợ hoạt động chỉ dùng IPv6 và ngăn xếp kép trên Ethernet.

Nếu các thiết bị triển khai hỗ trợ Dữ liệu di động, thì:

  • [C-3-1] PHẢI hỗ trợ hoạt động IPv6 (chỉ IPv6 và có thể là ngăn xếp kép) trên mạng di động.

Nếu các hoạt động triển khai thiết bị hỗ trợ nhiều loại mạng (ví dụ: Wi-Fi và dữ liệu di động), thì:

  • [C-4-1] PHẢI đồng thời đáp ứng các yêu cầu nêu trên trên mỗi mạng khi thiết bị được kết nối đồng thời với nhiều loại mạng.
7.4.5.3. Trang xác thực

Trang xác thực là một mạng yêu cầu người dùng đăng nhập để truy cập Internet.

Nếu các phương thức triển khai thiết bị cung cấp một phương thức triển khai hoàn chỉnh của android.webkit.Webview API, thì các phương thức triển khai đó sẽ:

  • [C-1-1] PHẢI cung cấp một ứng dụng trang xác thực để xử lý ý định ACTION_CAPTIVE_PORTAL_SIGN_IN và hiển thị trang đăng nhập của trang xác thực bằng cách gửi ý định đó khi gọi đến API Hệ thống ConnectivityManager#startCaptivePortalApp(Network, Bundle).
  • [C-1-2] PHẢI phát hiện các cổng gián đoạn và hỗ trợ đăng nhập thông qua ứng dụng cổng gián đoạn khi thiết bị kết nối với bất kỳ loại mạng nào, bao gồm cả mạng di động/mạng di động, Wi-Fi, Ethernet hoặc Bluetooth.
  • [C-1-3] PHẢI hỗ trợ đăng nhập vào cổng giam giữ bằng DNS dạng văn bản thuần tuý khi thiết bị được định cấu hình để sử dụng chế độ DNS riêng tư nghiêm ngặt.
  • [C-1-4] PHẢI sử dụng DNS được mã hoá theo tài liệu SDK cho android.net.LinkProperties.getPrivateDnsServerNameandroid.net.LinkProperties.isPrivateDnsActive cho tất cả lưu lượng truy cập mạng không giao tiếp rõ ràng với cổng giam giữ.
  • [C-1-5] PHẢI đảm bảo rằng trong khi người dùng đăng nhập vào một cổng giam giữ, mạng mặc định mà các ứng dụng sử dụng (do ConnectivityManager.getActiveNetwork, ConnectivityManager.registerDefaultNetworkCallback trả về và được các API mạng Java (chẳng hạn như java.net.Socket) và các API gốc (chẳng hạn như connect()) sử dụng theo mặc định) là bất kỳ mạng nào khác có sẵn cung cấp quyền truy cập vào Internet (nếu có).

7.4.6. Cài đặt đồng bộ hóa

Cách triển khai thiết bị:

  • [C-0-1] PHẢI bật chế độ cài đặt đồng bộ hoá tự động chính theo mặc định để phương thức getMasterSyncAutomatically() trả về "true".

7.4.7. Trình tiết kiệm dữ liệu

Nếu các hoạt động triển khai thiết bị có kết nối có đo lượng dữ liệu, thì:

  • [SR] RẤT NÊN CUNG CẤP chế độ tiết kiệm dữ liệu.

Nếu triển khai chế độ trình tiết kiệm dữ liệu, thì các thiết bị sẽ:

  • [C-1-1] PHẢI hỗ trợ tất cả các API trong lớp ConnectivityManager như mô tả trong tài liệu về SDK

Nếu các hoạt động triển khai thiết bị không cung cấp chế độ trình tiết kiệm dữ liệu, thì:

7.4.8. Secure Element

Nếu các phương thức triển khai thiết bị hỗ trợ các phần tử bảo mật có khả năng Open Mobile API và cung cấp các phần tử này cho ứng dụng bên thứ ba, thì các phương thức triển khai đó sẽ:

7.5. Camera

Nếu các hoạt động triển khai thiết bị có ít nhất một camera, thì:

  • [C-1-1] PHẢI khai báo cờ tính năng android.hardware.camera.any.
  • [C-1-2] Ứng dụng PHẢI có thể đồng thời phân bổ 3 bitmap RGBA_8888 có kích thước bằng kích thước của hình ảnh do cảm biến camera có độ phân giải cao nhất trên thiết bị tạo ra, trong khi camera đang mở cho mục đích xem trước cơ bản và chụp ảnh tĩnh.
  • [C-1-3] PHẢI đảm bảo rằng ứng dụng camera mặc định được cài đặt sẵn xử lý các ý định MediaStore.ACTION_IMAGE_CAPTURE, MediaStore.ACTION_IMAGE_CAPTURE_SECURE hoặc MediaStore.ACTION_VIDEO_CAPTURE, chịu trách nhiệm xoá vị trí của người dùng trong siêu dữ liệu hình ảnh trước khi gửi đến ứng dụng nhận khi ứng dụng nhận không có ACCESS_FINE_LOCATION.

7.5.1. Camera sau

Camera sau là camera nằm ở mặt đối diện với màn hình của thiết bị; tức là camera này chụp ảnh các cảnh ở mặt xa của thiết bị, giống như một camera truyền thống.

Cách triển khai thiết bị:

  • NÊN có camera sau.

Nếu các hoạt động triển khai thiết bị có ít nhất một camera sau, thì:

  • [C-1-1] PHẢI báo cáo cờ tính năng android.hardware.cameraandroid.hardware.camera.any.
  • [C-1-2] PHẢI có độ phân giải tối thiểu là 2 megapixel.
  • NÊN triển khai tính năng tự động lấy nét phần cứng hoặc tự động lấy nét phần mềm trong trình điều khiển camera (trong suốt đối với phần mềm ứng dụng).
  • CÓ THỂ có phần cứng tiêu cự cố định hoặc EDOF (độ sâu trường ảnh mở rộng).
  • CÓ THỂ có đèn flash.

Nếu camera có đèn flash:

  • [C-2-1] đèn flash KHÔNG ĐƯỢC bật trong khi một thực thể android.hardware.Camera.PreviewCallback đã được đăng ký trên một bề mặt xem trước của Camera, trừ phi ứng dụng đã bật đèn flash một cách rõ ràng bằng cách bật các thuộc tính FLASH_MODE_AUTO hoặc FLASH_MODE_ON của một đối tượng Camera.Parameters. Xin lưu ý rằng hạn chế này không áp dụng cho ứng dụng camera hệ thống tích hợp của thiết bị, mà chỉ áp dụng cho các ứng dụng bên thứ ba sử dụng Camera.PreviewCallback.

7.5.2. Camera trước

Camera trước là camera nằm ở cùng phía với màn hình của thiết bị; tức là camera thường được dùng để chụp ảnh người dùng, chẳng hạn như cho hội nghị truyền hình và các ứng dụng tương tự.

Cách triển khai thiết bị:

  • CÓ THỂ có camera trước.

Nếu các hoạt động triển khai thiết bị có ít nhất một camera trước, thì:

  • [C-1-1] PHẢI báo cáo cờ tính năng android.hardware.camera.anyandroid.hardware.camera.front.
  • [C-1-2] PHẢI có độ phân giải tối thiểu là VGA (640x480 pixel).
  • [C-1-3] KHÔNG ĐƯỢC dùng camera trước làm camera mặc định cho Camera API và KHÔNG ĐƯỢC định cấu hình API để coi camera trước là camera sau mặc định, ngay cả khi đó là camera duy nhất trên thiết bị.
  • [C-1-4] Bản xem trước của camera PHẢI được phản chiếu theo chiều ngang so với hướng do ứng dụng chỉ định khi ứng dụng hiện tại đã yêu cầu rõ ràng rằng màn hình Camera được xoay thông qua lệnh gọi đến phương thức android.hardware.Camera.setDisplayOrientation(). Ngược lại, bản xem trước PHẢI được phản chiếu dọc theo trục ngang mặc định của thiết bị khi ứng dụng hiện tại không yêu cầu rõ ràng rằng màn hình Camera được xoay thông qua lệnh gọi đến phương thức android.hardware.Camera.setDisplayOrientation().
  • [C-1-5] KHÔNG ĐƯỢC phản chiếu hình ảnh tĩnh hoặc luồng video đã chụp cuối cùng được trả về cho các lệnh gọi lại ứng dụng hoặc được cam kết lưu trữ nội dung nghe nhìn.
  • [C-1-6] PHẢI phản chiếu hình ảnh do chế độ xem sau hiển thị theo cách tương tự như luồng hình ảnh xem trước của camera.
  • CÓ THỂ bao gồm các tính năng (chẳng hạn như tự động lấy nét, đèn flash, v.v.) có sẵn cho camera sau như mô tả trong mục 7.5.1.

Nếu người dùng có thể xoay các chế độ triển khai thiết bị (chẳng hạn như tự động thông qua gia tốc kế hoặc theo cách thủ công thông qua dữ liệu đầu vào của người dùng):

  • [C-2-1] Bản xem trước của camera PHẢI được phản chiếu theo chiều ngang so với hướng hiện tại của thiết bị.

7.5.3. Camera ngoài

Cách triển khai thiết bị:

  • CÓ THỂ bao gồm hỗ trợ cho một camera bên ngoài không nhất thiết phải luôn kết nối.

Nếu các hoạt động triển khai thiết bị có hỗ trợ camera bên ngoài, thì:

  • [C-1-1] PHẢI khai báo cờ tính năng nền tảng android.hardware.camera.externalandroid.hardware camera.any.
  • [C-1-2] PHẢI hỗ trợ USB Video Class (UVC 1.0 trở lên) nếu camera bên ngoài kết nối qua cổng máy chủ USB.
  • [C-1-3] PHẢI vượt qua các bài kiểm thử CTS của camera khi kết nối với một thiết bị camera bên ngoài thực tế. Thông tin chi tiết về hoạt động kiểm thử CTS của camera có tại source.android.com.
  • NÊN hỗ trợ các phương pháp nén video như MJPEG để cho phép truyền các luồng chưa mã hoá chất lượng cao (tức là luồng hình ảnh thô hoặc được nén độc lập).
  • CÓ THỂ hỗ trợ nhiều camera.
  • CÓ THỂ hỗ trợ tính năng mã hoá video dựa trên camera.

Nếu thiết bị hỗ trợ tính năng mã hoá video dựa trên camera:

  • [C-2-1] Thiết bị triển khai PHẢI truy cập được vào luồng MJPEG / luồng không được mã hoá đồng thời (độ phân giải QVGA trở lên).

7.5.4. Hành vi của Camera API

Android có 2 gói API để truy cập vào camera. API android.hardware.camera2 mới hơn sẽ cung cấp quyền kiểm soát camera ở cấp thấp hơn cho ứng dụng, bao gồm cả các luồng truyền phát/chụp liên tục hiệu quả không cần sao chép và các chế độ kiểm soát phơi sáng, độ khuếch đại, độ khuếch đại cân bằng trắng, chuyển đổi màu sắc, khử nhiễu, làm sắc nét và nhiều chế độ khác cho mỗi khung hình.

Gói API cũ hơn, android.hardware.Camera, được đánh dấu là không dùng nữa trong Android 5.0, nhưng vẫn có sẵn để các ứng dụng sử dụng. Việc triển khai thiết bị Android PHẢI đảm bảo tiếp tục hỗ trợ API như mô tả trong phần này và trong Android SDK.

Tất cả các tính năng chung giữa lớp android.hardware.Camera không dùng nữa và gói android.hardware.camera2 mới hơn PHẢI có hiệu suất và chất lượng tương đương trong cả hai API. Ví dụ: với các chế độ cài đặt tương đương, tốc độ và độ chính xác của tính năng lấy nét tự động phải giống nhau, đồng thời chất lượng của hình ảnh chụp được cũng phải giống nhau. Các tính năng phụ thuộc vào ngữ nghĩa khác nhau của hai API không bắt buộc phải có tốc độ hoặc chất lượng tương đương, nhưng NÊN tương đương càng nhiều càng tốt.

Các hoạt động triển khai thiết bị PHẢI triển khai các hành vi sau đây cho các API liên quan đến camera, đối với tất cả các camera hiện có. Cách triển khai thiết bị:

  • [C-0-1] PHẢI sử dụng android.hardware.PixelFormat.YCbCr_420_SP cho dữ liệu xem trước được cung cấp cho các lệnh gọi lại ứng dụng khi ứng dụng chưa bao giờ gọi android.hardware.Camera.Parameters.setPreviewFormat(int).
  • [C-0-2] PHẢI có thêm định dạng mã hoá NV21 khi một ứng dụng đăng ký một thực thể android.hardware.Camera.PreviewCallback và hệ thống gọi phương thức onPreviewFrame(), đồng thời định dạng xem trước là YCbCr_420_SP, dữ liệu trong byte[] được truyền vào onPreviewFrame(). Tức là NV21 PHẢI là giá trị mặc định.
  • [C-0-3] PHẢI hỗ trợ định dạng YV12 (như được biểu thị bằng hằng số android.graphics.ImageFormat.YV12) cho bản xem trước của camera đối với cả camera trước và camera sau cho android.hardware.Camera. (Bộ mã hoá video phần cứng và camera có thể sử dụng bất kỳ định dạng pixel gốc nào, nhưng quá trình triển khai thiết bị PHẢI hỗ trợ chuyển đổi sang YV12.)
  • [C-0-4] PHẢI hỗ trợ các định dạng android.hardware.ImageFormat.YUV_420_888android.hardware.ImageFormat.JPEG làm đầu ra thông qua API android.media.ImageReader cho các thiết bị android.hardware.camera2 quảng cáo khả năng REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE trong android.request.availableCapabilities.
  • [C-0-5] Vẫn PHẢI triển khai toàn bộ Camera API có trong tài liệu Android SDK, bất kể thiết bị có tính năng tự động lấy nét bằng phần cứng hay các tính năng khác. Ví dụ: những camera không có tính năng tự động lấy nét VẪN PHẢI gọi mọi thực thể android.hardware.Camera.AutoFocusCallback đã đăng ký (mặc dù điều này không liên quan đến camera không có tính năng tự động lấy nét). Xin lưu ý rằng điều này áp dụng cho camera trước; ví dụ: mặc dù hầu hết camera trước không hỗ trợ tính năng tự động lấy nét, nhưng các lệnh gọi lại API vẫn phải được "giả lập" như mô tả.
  • [C-0-6] PHẢI nhận dạng và tuân thủ từng tên tham số được xác định là hằng số trong lớp android.hardware.Camera.Parameters và lớp android.hardware.camera2.CaptureRequest. Ngược lại, các phương thức triển khai thiết bị KHÔNG ĐƯỢC tuân thủ hoặc nhận dạng các hằng số chuỗi được truyền đến phương thức android.hardware.Camera.setParameters(), ngoài những hằng số được ghi lại trên android.hardware.Camera.Parameters. Tức là các hoạt động triển khai thiết bị PHẢI hỗ trợ tất cả các tham số Camera tiêu chuẩn nếu phần cứng cho phép và KHÔNG ĐƯỢC hỗ trợ các loại tham số Camera tuỳ chỉnh. Ví dụ: những chế độ triển khai thiết bị hỗ trợ chụp ảnh bằng kỹ thuật chụp ảnh có dải tương phản động cao (HDR) PHẢI hỗ trợ tham số camera Camera.SCENE_MODE_HDR.
  • [C-0-7] PHẢI báo cáo mức độ hỗ trợ thích hợp bằng thuộc tính android.info.supportedHardwareLevel như mô tả trong Android SDK và báo cáo cờ tính năng khung thích hợp.
  • [C-0-8] CŨNG PHẢI khai báo từng chức năng riêng lẻ của camera android.hardware.camera2 thông qua thuộc tính android.request.availableCapabilities và khai báo cờ tính năng thích hợp; PHẢI xác định cờ tính năng nếu có bất kỳ thiết bị camera nào được đính kèm hỗ trợ tính năng này.
  • [C-0-9] PHẢI truyền ý định Camera.ACTION_NEW_PICTURE bất cứ khi nào máy ảnh chụp ảnh mới và mục nhập của ảnh đó đã được thêm vào kho lưu trữ nội dung nghe nhìn.
  • [C-0-10] PHẢI truyền ý định Camera.ACTION_NEW_VIDEO bất cứ khi nào camera quay một video mới và mục nhập của bức ảnh đã được thêm vào kho lưu trữ đa phương tiện.
  • [C-0-11] PHẢI có tất cả các camera có thể truy cập thông qua API android.hardware.Camera không dùng nữa cũng có thể truy cập thông qua API android.hardware.camera2.
  • [C-0-12] PHẢI đảm bảo rằng diện mạo khuôn mặt KHÔNG bị thay đổi, bao gồm nhưng không giới hạn ở việc thay đổi hình dạng khuôn mặt, tông màu da mặt hoặc làm mịn da mặt cho bất kỳ API android.hardware.camera2 hoặc android.hardware.Camera nào.
  • [C-SR] Đối với các thiết bị có nhiều camera RGB hướng về cùng một hướng, BẠN NÊN HỖ TRỢ một thiết bị camera logic liệt kê tính năng CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA, bao gồm tất cả các camera RGB hướng về hướng đó dưới dạng các thiết bị phụ vật lý.

Nếu các phương thức triển khai thiết bị cung cấp một API camera độc quyền cho các ứng dụng bên thứ ba, thì:

7.5.5. Hướng máy ảnh

Nếu các chế độ triển khai thiết bị có camera trước hoặc camera sau, thì(các) camera đó phải:

  • [C-1-1] PHẢI được định hướng để chiều dài của camera phù hợp với chiều dài của màn hình. Tức là khi thiết bị được giữ ở hướng ngang, camera PHẢI chụp ảnh ở hướng ngang. Điều này áp dụng bất kể hướng tự nhiên của thiết bị; tức là áp dụng cho cả thiết bị có hướng ngang là hướng chính cũng như thiết bị có hướng dọc là hướng chính.

7.6. Bộ nhớ và dung lượng lưu trữ

7.6.1. Bộ nhớ và dung lượng lưu trữ tối thiểu

Cách triển khai thiết bị:

  • [C-0-1] PHẢI có một Trình quản lý tải xuống mà các ứng dụng CÓ THỂ dùng để tải tệp dữ liệu xuống và các ứng dụng này PHẢI có khả năng tải từng tệp có kích thước ít nhất 100 MB xuống vị trí "bộ nhớ đệm" mặc định.

7.6.2. Bộ nhớ dùng chung của ứng dụng

Cách triển khai thiết bị:

  • [C-0-1] PHẢI cung cấp bộ nhớ để các ứng dụng chia sẻ, còn thường được gọi là "bộ nhớ ngoài dùng chung", "bộ nhớ dùng chung của ứng dụng" hoặc theo đường dẫn Linux "/sdcard" mà bộ nhớ này được gắn vào.
  • [C-0-2] PHẢI được định cấu hình với bộ nhớ dùng chung được gắn theo mặc định, tức là "ngay khi xuất xưởng", bất kể bộ nhớ được triển khai trên một thành phần bộ nhớ trong hay một phương tiện lưu trữ di động (ví dụ: khe cắm thẻ Secure Digital).
  • [C-0-3] PHẢI gắn bộ nhớ dùng chung của ứng dụng trực tiếp trên đường dẫn Linux sdcard hoặc thêm một đường liên kết tượng trưng của Linux từ sdcard đến điểm gắn thực tế.
  • [C-0-4] PHẢI bật bộ nhớ có giới hạn theo mặc định cho tất cả ứng dụng nhắm đến API cấp 29 trở lên, ngoại trừ trong trường hợp sau:
    • Khi ứng dụng đã yêu cầu android:requestLegacyExternalStorage="true" trong tệp kê khai.
  • [C-0-5] PHẢI che khuất siêu dữ liệu vị trí (chẳng hạn như thẻ Exif của GPS) được lưu trữ trong các tệp nội dung nghe nhìn khi những tệp đó được truy cập thông qua MediaStore, trừ phi ứng dụng gọi có quyền ACCESS_MEDIA_LOCATION.

Các thiết bị triển khai CÓ THỂ đáp ứng các yêu cầu nêu trên bằng cách sử dụng một trong những cách sau:

  • Bộ nhớ di động mà người dùng có thể truy cập, chẳng hạn như khe cắm thẻ SD (Secure Digital).
  • Một phần bộ nhớ trong (không tháo rời được) như được triển khai trong Dự án nguồn mở Android (AOSP).

Nếu các hoạt động triển khai thiết bị sử dụng bộ nhớ di động để đáp ứng các yêu cầu nêu trên, thì:

  • [C-1-1] PHẢI triển khai một cảnh báo giao diện người dùng dạng thông báo hoặc cửa sổ bật lên cho người dùng khi không có phương tiện lưu trữ nào được cắm vào khe cắm.
  • [C-1-2] PHẢI có phương tiện lưu trữ được định dạng FAT (ví dụ: thẻ SD) hoặc cho biết trên hộp và các tài liệu khác có sẵn tại thời điểm mua rằng người dùng phải mua riêng phương tiện lưu trữ.

Nếu các hoạt động triển khai thiết bị sử dụng một phần bộ nhớ không tháo rời được để đáp ứng các yêu cầu nêu trên, thì:

  • NÊN sử dụng chế độ triển khai AOSP của bộ nhớ dùng chung cho ứng dụng nội bộ.
  • CÓ THỂ chia sẻ không gian lưu trữ với dữ liệu riêng tư của ứng dụng.

Nếu các thiết bị triển khai có cổng USB hỗ trợ chế độ thiết bị ngoại vi USB, thì:

  • [C-3-1] PHẢI cung cấp một cơ chế để truy cập vào dữ liệu trên bộ nhớ dùng chung của ứng dụng từ máy tính lưu trữ.
  • NÊN hiển thị nội dung từ cả hai đường dẫn lưu trữ một cách minh bạch thông qua dịch vụ trình quét nội dung đa phương tiện của Android và android.provider.MediaStore.
  • CÓ THỂ dùng bộ nhớ lưu trữ lớn qua USB, nhưng NÊN dùng Giao thức truyền nội dung nghe nhìn để đáp ứng yêu cầu này.

Nếu các thiết bị triển khai có cổng USB ở chế độ thiết bị ngoại vi USB và hỗ trợ Giao thức truyền dữ liệu đa phương tiện, thì:

  • PHẢI tương thích với máy chủ MTP tham chiếu của Android, Android File Transfer.
  • NÊN báo cáo một lớp thiết bị USB là 0x00.
  • NÊN báo cáo tên giao diện USB là "MTP".

7.6.3. Bộ nhớ thích ứng

Nếu thiết bị dự kiến có tính di động (không giống như TV), thì các phương thức triển khai thiết bị sẽ là:

  • [SR] RẤT NÊN triển khai bộ nhớ có thể di chuyển ở một vị trí ổn định lâu dài, vì việc vô tình ngắt kết nối có thể gây mất/hỏng dữ liệu.

Nếu cổng thiết bị lưu trữ di động ở một vị trí ổn định lâu dài, chẳng hạn như trong ngăn chứa pin hoặc nắp bảo vệ khác, thì các hoạt động triển khai thiết bị sẽ:

7.7. USB

Nếu có cổng USB, thì các thiết bị triển khai sẽ:

  • NÊN hỗ trợ chế độ thiết bị ngoại vi USB và NÊN hỗ trợ chế độ máy chủ USB.

7.7.1. Chế độ thiết bị ngoại vi USB

Nếu các hoạt động triển khai thiết bị có cổng USB hỗ trợ chế độ thiết bị ngoại vi:

  • [C-1-1] Cổng NÀY PHẢI kết nối được với một máy chủ USB có cổng USB loại A hoặc loại C tiêu chuẩn.
  • [C-1-2] PHẢI báo cáo giá trị chính xác của iSerialNumber trong bộ mô tả thiết bị tiêu chuẩn USB thông qua android.os.Build.SERIAL.
  • [C-1-3] PHẢI phát hiện bộ sạc 1,5 A và 3 A theo tiêu chuẩn điện trở Type-C và PHẢI phát hiện các thay đổi trong thông báo nếu bộ sạc hỗ trợ USB Type-C.
  • [SR] Cổng NÊN sử dụng kiểu dáng USB micro-B, micro-AB hoặc Type-C. CÁC THIẾT BỊ ANDROID HIỆN CÓ VÀ MỚI ĐƯỢC RẤT KHUYẾN KHÍCH đáp ứng những yêu cầu này để có thể nâng cấp lên các bản phát hành nền tảng trong tương lai.
  • [SR] Cổng này PHẢI nằm ở dưới cùng của thiết bị (theo hướng tự nhiên) hoặc cho phép xoay màn hình phần mềm cho tất cả các ứng dụng (kể cả màn hình chính), để màn hình hiển thị chính xác khi thiết bị được định hướng với cổng ở dưới cùng. CÁC THIẾT BỊ ANDROID HIỆN CÓ VÀ THIẾT BỊ ANDROID MỚI NÊN ĐÁP ỨNG NHỮNG YÊU CẦU NÀY để có thể nâng cấp lên các bản phát hành nền tảng trong tương lai.
  • [SR] CẦN triển khai hỗ trợ để rút dòng điện 1,5 A trong tiếng bíp và lưu lượng truy cập HS như quy định trong Quy cách sạc pin qua USB, bản sửa đổi 1.2. CÁC THIẾT BỊ ANDROID HIỆN CÓ VÀ MỚI ĐƯỢC RẤT KHUYẾN KHÍCH đáp ứng những yêu cầu này để có thể nâng cấp lên các bản phát hành nền tảng trong tương lai.
  • [SR] RẤT KHUYẾN KHÍCH không hỗ trợ các phương thức sạc độc quyền sửa đổi điện áp Vbus vượt quá mức mặc định hoặc thay đổi vai trò của nguồn/thiết bị nhận vì điều này có thể dẫn đến các vấn đề về khả năng tương tác với bộ sạc hoặc thiết bị hỗ trợ các phương thức USB Power Delivery tiêu chuẩn. Mặc dù đây là "RẤT NÊN", nhưng trong các phiên bản Android sau này, chúng tôi có thể YÊU CẦU tất cả thiết bị có cổng sạc loại C phải hỗ trợ khả năng tương tác đầy đủ với bộ sạc loại C tiêu chuẩn.
  • [SR] RẤT NÊN hỗ trợ Power Delivery để trao đổi vai trò dữ liệu và nguồn khi chúng hỗ trợ USB Type-C và chế độ máy chủ USB.
  • NÊN hỗ trợ tính năng Power Delivery (Cung cấp nguồn) để sạc điện áp cao và hỗ trợ các Chế độ thay thế như xuất hình ảnh.
  • NÊN triển khai API và quy cách Phụ kiện mở Android (AOA) như được ghi trong tài liệu về Android SDK.

Nếu các bản triển khai thiết bị có cổng USB và triển khai quy cách AOA, thì:

  • [C-2-1] PHẢI khai báo hỗ trợ cho tính năng phần cứng android.hardware.usb.accessory.
  • [C-2-2] Lớp bộ nhớ lưu trữ lớn qua USB PHẢI có chuỗi "android" ở cuối chuỗi iInterface nội dung mô tả giao diện của bộ nhớ lưu trữ lớn qua USB

7.7.2. Chế độ USB Host

Nếu các thiết bị triển khai có cổng USB hỗ trợ chế độ máy chủ lưu trữ, thì:

  • [C-1-1] PHẢI triển khai API máy chủ USB Android như được ghi trong SDK Android và PHẢI khai báo tính năng hỗ trợ cho tính năng phần cứng android.hardware.usb.host.
  • [C-1-2] PHẢI triển khai tính năng hỗ trợ kết nối các thiết bị ngoại vi USB tiêu chuẩn, tức là PHẢI:
    • Có cổng loại C trên thiết bị hoặc đi kèm(các) cáp chuyển đổi một cổng độc quyền trên thiết bị thành cổng USB loại C tiêu chuẩn (thiết bị USB Type-C).
    • Có cổng loại A trên thiết bị hoặc đi kèm(các) cáp chuyển đổi một cổng độc quyền trên thiết bị thành cổng USB loại A tiêu chuẩn.
    • Có một cổng micro-AB trên thiết bị và NÊN đi kèm với một cáp chuyển đổi sang cổng loại A tiêu chuẩn.
  • [C-1-3] KHÔNG ĐƯỢC phép vận chuyển kèm theo một bộ chuyển đổi chuyển đổi từ cổng USB loại A hoặc micro-AB sang cổng loại C (ổ cắm).
  • [C-SR] RẤT NÊN triển khai lớp âm thanh USB như được ghi trong tài liệu SDK Android.
  • PHẢI hỗ trợ sạc thiết bị ngoại vi USB được kết nối ở chế độ máy chủ; quảng cáo dòng điện nguồn ít nhất là 1,5 A như được chỉ định trong phần Termination Parameters (Thông số chấm dứt) của USB Type-C Cable and Connector Specification Revision 1.2 (Thông số kỹ thuật về cáp và giắc cắm USB Type-C, phiên bản 1.2) cho giắc cắm USB Type-C hoặc sử dụng phạm vi dòng điện đầu ra của Cổng sạc xuôi dòng (CDP) như được chỉ định trong USB Battery Charging specifications, revision 1.2 (Thông số kỹ thuật về sạc pin qua USB, phiên bản 1.2) cho giắc cắm Micro-AB.
  • NÊN triển khai và hỗ trợ các tiêu chuẩn USB Type-C.

Nếu các hoạt động triển khai thiết bị có cổng USB hỗ trợ chế độ máy chủ và lớp âm thanh USB, thì:

  • [C-2-1] PHẢI hỗ trợ lớp USB HID.
  • [C-2-2] PHẢI hỗ trợ việc phát hiện và liên kết các trường dữ liệu HID sau đây được chỉ định trong Bảng sử dụng HID qua USBYêu cầu sử dụng lệnh thoại với các hằng số KeyEvent như sau:
    • Trang sử dụng (0xC) Mã sử dụng (0x0CD): KEYCODE_MEDIA_PLAY_PAUSE
    • Trang sử dụng (0xC) Mã sử dụng (0x0E9): KEYCODE_VOLUME_UP
    • Trang sử dụng (0xC) Mã sử dụng (0x0EA): KEYCODE_VOLUME_DOWN
    • Trang sử dụng (0xC) Mã nhận dạng mức sử dụng (0x0CF): KEYCODE_VOICE_ASSIST

Nếu các hoạt động triển khai thiết bị có cổng USB hỗ trợ chế độ máy chủ và Storage Access Framework (SAF), thì:

  • [C-3-1] PHẢI nhận dạng mọi thiết bị MTP (Giao thức truyền phương tiện) được kết nối từ xa và cho phép truy cập vào nội dung của các thiết bị đó thông qua các ý định ACTION_GET_CONTENT, ACTION_OPEN_DOCUMENTACTION_CREATE_DOCUMENT. .

Nếu các thiết bị triển khai có cổng USB hỗ trợ chế độ máy chủ và USB Type-C, thì:

  • [C-4-1] PHẢI triển khai chức năng Cổng có vai trò kép theo quy định của thông số kỹ thuật USB Type-C (mục 4.5.1.3.3).
  • [SR] RẤT NÊN hỗ trợ DisplayPort, NÊN hỗ trợ tốc độ dữ liệu USB SuperSpeed và RẤT NÊN hỗ trợ Power Delivery để hoán đổi vai trò dữ liệu và nguồn.
  • [SR] KHÔNG NÊN hỗ trợ Chế độ phụ kiện của giắc cắm âm thanh như mô tả trong Phụ lục A của Quy cách về cáp và giắc cắm USB Type-C, phiên bản 1.2.
  • NÊN triển khai mô hình Try.* phù hợp nhất với kiểu dáng thiết bị. Ví dụ: thiết bị cầm tay PHẢI triển khai mô hình Try.SNK.

7.8. Âm thanh

7.8.1. Micrô

Nếu các thiết bị triển khai có micrô, thì:

  • [C-1-1] PHẢI báo cáo hằng số tính năng android.hardware.microphone.
  • [C-1-2] PHẢI đáp ứng các yêu cầu về bản ghi âm trong mục 5.4.
  • [C-1-3] PHẢI đáp ứng các yêu cầu về độ trễ âm thanh trong mục 5.6.
  • [SR] RẤT NÊN hỗ trợ tính năng ghi âm gần siêu âm như mô tả trong mục 7.8.3.

Nếu các hoạt động triển khai thiết bị bỏ qua micrô, thì:

  • [C-2-1] KHÔNG ĐƯỢC báo cáo hằng số tính năng android.hardware.microphone.
  • [C-2-2] PHẢI triển khai API ghi âm ít nhất là dưới dạng không có thao tác, theo mục 7.

7.8.2. Đầu ra âm thanh

Nếu các hoạt động triển khai thiết bị có loa hoặc cổng đầu ra âm thanh/đa phương tiện cho một thiết bị ngoại vi đầu ra âm thanh (chẳng hạn như giắc cắm âm thanh 3,5 mm có 4 đầu cắm hoặc cổng chế độ máy chủ USB bằng lớp âm thanh USB), thì:

  • [C-1-1] PHẢI báo cáo hằng số tính năng android.hardware.audio.output.
  • [C-1-2] PHẢI đáp ứng các yêu cầu về chế độ phát âm thanh trong mục 5.5.
  • [C-1-3] PHẢI đáp ứng các yêu cầu về độ trễ âm thanh trong mục 5.6.
  • [SR] RẤT NÊN hỗ trợ chế độ phát gần siêu âm như mô tả trong mục 7.8.3.

Nếu các hoạt động triển khai thiết bị không có loa hoặc cổng đầu ra âm thanh, thì:

  • [C-2-1] KHÔNG ĐƯỢC báo cáo tính năng android.hardware.audio.output.
  • [C-2-2] Ít nhất PHẢI triển khai các API liên quan đến Đầu ra âm thanh dưới dạng các thao tác không có tác dụng.

Trong phần này, "cổng đầu ra" là một giao diện vật lý, chẳng hạn như giắc âm thanh 3,5 mm, HDMI hoặc cổng chế độ máy chủ USB có lớp âm thanh USB. Việc hỗ trợ đầu ra âm thanh qua các giao thức dựa trên sóng vô tuyến như Bluetooth, Wi-Fi hoặc mạng di động không được coi là có "cổng đầu ra".

7.8.2.1. Cổng âm thanh analog

Để tương thích với tai nghe và các phụ kiện âm thanh khác sử dụng giắc cắm âm thanh 3,5 mm trên hệ sinh thái Android, nếu các chế độ triển khai thiết bị có một hoặc nhiều cổng âm thanh tương tự, thì:

  • [C-SR] Bạn NÊN CÓ ÍT NHẤT một cổng âm thanh là giắc cắm âm thanh 3,5 mm có 4 đầu cắm.

Nếu các thiết bị triển khai có giắc cắm âm thanh 3,5 mm 4 cực, thì:

  • [C-1-1] PHẢI hỗ trợ phát âm thanh qua tai nghe âm thanh nổi và tai nghe âm thanh nổi có micrô.
  • [C-1-2] PHẢI hỗ trợ giắc cắm âm thanh TRRS theo thứ tự chân cắm CTIA.
  • [C-1-3] PHẢI hỗ trợ việc phát hiện và liên kết với mã khoá cho 3 dải trở kháng tương đương sau đây giữa micrô và dây dẫn nối đất trên giắc cắm âm thanh:
    • 70 ohm trở xuống: KEYCODE_HEADSETHOOK
    • 210 – 290 ohm: KEYCODE_VOLUME_UP
    • 360 – 680 ohm: KEYCODE_VOLUME_DOWN
  • [C-1-4] PHẢI kích hoạt ACTION_HEADSET_PLUG khi cắm giắc cắm, nhưng chỉ sau khi tất cả các chân trên giắc cắm chạm vào các đoạn liên quan trên ổ cắm.
  • [C-1-5] PHẢI có khả năng truyền ít nhất 150 mV ± 10% điện áp đầu ra trên loa có trở kháng 32 ôm.
  • [C-1-6] PHẢI có điện áp thiên vị của micrô trong khoảng từ 1,8 V đến 2,9 V.
  • [C-1-7] PHẢI phát hiện và ánh xạ đến mã khoá cho dải trở kháng tương đương sau đây giữa micrô và dây dẫn nối đất trên giắc cắm âm thanh:
    • 110 – 180 ohm: KEYCODE_VOICE_ASSIST
  • [C-SR] RẤT NÊN HỖ TRỢ giắc cắm âm thanh có thứ tự chân OMTP.
  • [C-SR] RẤT NÊN hỗ trợ ghi âm bằng tai nghe âm thanh nổi có micrô.

Nếu các thiết bị triển khai có giắc cắm âm thanh 3,5 mm 4 chân và hỗ trợ micrô, đồng thời truyền android.intent.action.HEADSET_PLUG với giá trị bổ sung micrô được đặt là 1, thì:

  • [C-2-1] PHẢI hỗ trợ tính năng phát hiện micrô trên phụ kiện âm thanh đã cắm.
7.8.2.2. Cổng âm thanh kỹ thuật số

Để tương thích với tai nghe và các phụ kiện âm thanh khác sử dụng giắc cắm USB-C và triển khai (lớp âm thanh USB) trên hệ sinh thái Android theo quy định trong Quy cách tai nghe USB của Android.

Hãy xem Mục 2.2.1 để biết các yêu cầu cụ thể theo từng thiết bị.

7.8.3. Gần siêu âm

Âm thanh gần siêu âm là băng tần từ 18,5 kHz đến 20 kHz.

Cách triển khai thiết bị:

  • PHẢI báo cáo chính xác khả năng hỗ trợ âm thanh gần siêu âm thông qua API AudioManager.getProperty như sau:

Nếu PROPERTY_SUPPORT_MIC_NEAR_ULTRASOUND là "true", thì nguồn âm thanh VOICE_RECOGNITIONUNPROCESSED PHẢI đáp ứng các yêu cầu sau:

  • [C-1-1] Phản hồi công suất trung bình của micrô trong dải tần từ 18,5 kHz đến 20 kHz KHÔNG ĐƯỢC thấp hơn 15 dB so với phản hồi ở tần số 2 kHz.
  • [C-1-2] Tỷ lệ tín hiệu trên tạp âm không trọng số của micrô trong khoảng 18,5 kHz đến 20 kHz đối với âm 19 kHz ở mức -26 dBFS PHẢI không thấp hơn 50 dB.

Nếu PROPERTY_SUPPORT_SPEAKER_NEAR_ULTRASOUND là "true":

  • [C-2-1] Phản hồi trung bình của loa trong khoảng 18,5 kHz – 20 kHz KHÔNG ĐƯỢC thấp hơn 40 dB so với phản hồi ở 2 kHz.

7.8.4. Tính toàn vẹn của tín hiệu

Triển khai thiết bị: * PHẢI cung cấp đường dẫn tín hiệu âm thanh không bị gián đoạn cho cả luồng đầu vào và đầu ra trên thiết bị cầm tay, theo định nghĩa là không có lỗi nào được đo trong một phút kiểm thử cho mỗi đường dẫn. Kiểm thử bằng "Kiểm thử lỗi tự động" [OboeTester] (https://github.com/google/oboe/tree/master/apps/OboeTester).

Bài kiểm thử này yêu cầu phải có một đầu nối vòng lặp âm thanh, được dùng trực tiếp trong giắc cắm 3,5 mm và/hoặc kết hợp với một bộ chuyển đổi USB-C sang giắc cắm 3,5 mm. Bạn NÊN kiểm tra tất cả các cổng đầu ra âm thanh.

OboeTester hiện hỗ trợ các đường dẫn AAudio, vì vậy, bạn NÊN kiểm thử các tổ hợp sau để tìm lỗi bằng AAudio:

Chế độ hiệu suất Chia sẻ Tốc độ lấy mẫu đầu ra Trong Chans Out Chans
LOW_LATENCY ĐỘC QUYỀN KHÔNG XÁC ĐỊNH 1 2
LOW_LATENCY ĐỘC QUYỀN KHÔNG XÁC ĐỊNH 2 1
LOW_LATENCY ĐÃ CHIA SẺ KHÔNG XÁC ĐỊNH 1 2
LOW_LATENCY ĐÃ CHIA SẺ KHÔNG XÁC ĐỊNH 2 1
KHÔNG CÓ ĐÃ CHIA SẺ 48000 1 2
KHÔNG CÓ ĐÃ CHIA SẺ 48000 2 1
KHÔNG CÓ ĐÃ CHIA SẺ 44100 1 2
KHÔNG CÓ ĐÃ CHIA SẺ 44100 2 1
KHÔNG CÓ ĐÃ CHIA SẺ 16000 1 2
KHÔNG CÓ ĐÃ CHIA SẺ 16000 2 1

Một luồng đáng tin cậy PHẢI đáp ứng các tiêu chí sau về Tỷ lệ tín hiệu trên nhiễu (SNR) và Tổng độ méo hài (THD) cho sóng hình sin 2000 Hz.

Bộ chuyển đổi THD SNR
loa tích hợp chính, được đo bằng micrô tham chiếu bên ngoài < 3% >= 50 dB
micrô tích hợp chính, được đo bằng loa tham chiếu bên ngoài < 3% >= 50 dB
giắc cắm analog 3,5 mm tích hợp, đã được kiểm thử bằng bộ chuyển đổi vòng lặp Chưa đến 1% >= 60 dB
Bộ chuyển đổi USB đi kèm với điện thoại, được kiểm thử bằng bộ chuyển đổi vòng lặp < 1% >= 60 dB

7.9. Thực tế ảo

Android có các API và cơ sở để tạo ứng dụng "Thực tế ảo" (VR), bao gồm cả trải nghiệm VR chất lượng cao trên thiết bị di động. Các hoạt động triển khai thiết bị PHẢI triển khai đúng cách các API và hành vi này, như được trình bày chi tiết trong phần này.

7.9.1. Chế độ thực tế ảo

Android hỗ trợ Chế độ thực tế ảo, một tính năng xử lý quá trình kết xuất lập thể của thông báo và vô hiệu hoá các thành phần giao diện người dùng hệ thống một mắt trong khi ứng dụng thực tế ảo có tiêu điểm người dùng.

7.9.2. Chế độ thực tế ảo – Hiệu suất cao

Nếu các hoạt động triển khai thiết bị hỗ trợ chế độ thực tế ảo, thì:

  • [C-1-1] PHẢI có ít nhất 2 lõi vật lý.
  • [C-1-2] PHẢI khai báo tính năng android.hardware.vr.high_performance.
  • [C-1-3] PHẢI hỗ trợ chế độ hiệu suất cao bền vững.
  • [C-1-4] RẤT NÊN hỗ trợ OpenGL ES 3.2.
  • [C-1-5] PHẢI hỗ trợ android.hardware.vulkan.level 0.
  • NÊN hỗ trợ android.hardware.vulkan.level 1 trở lên.
  • [C-1-6] PHẢI triển khai EGL_KHR_mutable_render_buffer, EGL_ANDROID_front_buffer_auto_refresh, EGL_ANDROID_get_native_client_buffer, EGL_KHR_fence_sync, EGL_KHR_wait_sync, EGL_IMG_context_priority, EGL_EXT_protected_content, EGL_EXT_image_gl_colorspace và hiển thị các tiện ích trong danh sách tiện ích EGL có sẵn.
  • [C-1-8] PHẢI triển khai GL_EXT_multisampled_render_to_texture2, GL_OVR_multiview, GL_OVR_multiview2, GL_EXT_protected_textures và hiển thị các tiện ích trong danh sách tiện ích GL có sẵn.
  • [C-SR] RẤT NÊN triển khai GL_EXT_external_buffer, GL_EXT_EGL_image_array, GL_OVR_multiview_multisampled_render_to_texture và hiển thị các tiện ích trong danh sách tiện ích GL có sẵn.
  • [C-SR] RẤT NÊN HỖ TRỢ Vulkan 1.1.
  • [C-SR] RẤT NÊN triển khai VK_ANDROID_external_memory_android_hardware_buffer, VK_GOOGLE_display_timing, VK_KHR_shared_presentable_image và hiển thị tiện ích này trong danh sách các tiện ích Vulkan hiện có.
  • [C-SR] RẤT NÊN sử dụng ít nhất một họ hàng đợi Vulkan, trong đó flags chứa cả VK_QUEUE_GRAPHICS_BITVK_QUEUE_COMPUTE_BIT, đồng thời queueCount ít nhất là 2.
  • [C-1-7] GPU và màn hình PHẢI có thể đồng bộ hoá quyền truy cập vào bộ đệm trước được chia sẻ để quá trình kết xuất nội dung thực tế ảo bằng hai ngữ cảnh kết xuất và chế độ kết xuất luân phiên mắt ở tốc độ 60 khung hình/giây sẽ hiển thị mà không có hiện tượng xé hình.
  • [C-1-9] PHẢI triển khai tính năng hỗ trợ cho các cờ AHardwareBuffer AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER, AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATAAHARDWAREBUFFER_USAGE_PROTECTED_CONTENT như mô tả trong NDK.
  • [C-1-10] PHẢI triển khai hỗ trợ cho AHardwareBuffer với mọi tổ hợp cờ sử dụng AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT, AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE, AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT cho ít nhất các định dạng sau: AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM, AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM, AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM, AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT.
  • [C-SR] RẤT NÊN dùng để hỗ trợ việc phân bổ AHardwareBuffer có nhiều lớp, cờ và định dạng được chỉ định trong C-1-10.
  • [C-1-11] PHẢI hỗ trợ giải mã H.264 ít nhất là 3840 x 2160 ở tốc độ 30 khung hình/giây, được nén xuống mức trung bình là 40 Mb/giây (tương đương với 4 trường hợp 1920 x 1080 ở tốc độ 30 khung hình/giây – 10 Mb/giây hoặc 2 trường hợp 1920 x 1080 ở tốc độ 60 khung hình/giây – 20 Mb/giây).
  • [C-1-12] PHẢI hỗ trợ HEVC và VP9, PHẢI có khả năng giải mã ít nhất 1920 x 1080 ở tốc độ 30 khung hình/giây được nén xuống mức trung bình là 10 Mb/giây và NÊN có khả năng giải mã 3840 x 2160 ở tốc độ 30 khung hình/giây – 20 Mb/giây (tương đương với 4 trường hợp 1920 x 1080 ở tốc độ 30 khung hình/giây – 5 Mb/giây).
  • [C-1-13] PHẢI hỗ trợ API HardwarePropertiesManager.getDeviceTemperatures và trả về các giá trị chính xác cho nhiệt độ trên da.
  • [C-1-14] PHẢI có màn hình nhúng và độ phân giải của màn hình đó PHẢI tối thiểu là 1920 x 1080.
  • [C-SR] RẤT NÊN có độ phân giải màn hình tối thiểu là 2560 x 1440.
  • [C-1-15] Màn hình PHẢI cập nhật ít nhất 60 Hz khi ở Chế độ thực tế ảo.
  • [C-1-17] Màn hình PHẢI hỗ trợ chế độ duy trì thấp với thời gian duy trì ≤ 5 mili giây. Thời gian duy trì được xác định là khoảng thời gian mà một pixel phát ra ánh sáng.
  • [C-1-18] PHẢI hỗ trợ Bluetooth 4.2 và Tiện ích mở rộng độ dài dữ liệu Bluetooth LE mục 7.4.3.
  • [C-1-19] PHẢI hỗ trợ và báo cáo chính xác Loại kênh trực tiếp cho tất cả các loại cảm biến mặc định sau đây:
    • TYPE_ACCELEROMETER
    • TYPE_ACCELEROMETER_UNCALIBRATED
    • TYPE_GYROSCOPE
    • TYPE_GYROSCOPE_UNCALIBRATED
    • TYPE_MAGNETIC_FIELD
    • TYPE_MAGNETIC_FIELD_UNCALIBRATED
  • [C-SR] BẠN NÊN HỖ TRỢ TYPE_HARDWARE_BUFFER loại kênh trực tiếp cho tất cả các Loại kênh trực tiếp được liệt kê ở trên.
  • [C-1-21] PHẢI đáp ứng các yêu cầu liên quan đến con quay hồi chuyển, gia tốc kế và từ kế đối với android.hardware.hifi_sensors, như được chỉ định trong mục 7.3.9.
  • [C-SR] RẤT NÊN dùng để hỗ trợ tính năng android.hardware.sensor.hifi_sensors.
  • [C-1-22] PHẢI có độ trễ từ chuyển động đến photon không quá 28 mili giây.
  • [C-SR] RẤT NÊN có độ trễ chuyển động đến photon từ đầu đến cuối không quá 20 mili giây.
  • [C-1-23] PHẢI có tỷ lệ khung hình đầu tiên (tỷ lệ giữa độ sáng của các pixel trên khung hình đầu tiên sau khi chuyển từ màu đen sang màu trắng và độ sáng của các pixel màu trắng ở trạng thái ổn định) ít nhất là 85%.
  • [C-SR] NÊN CÓ tỷ lệ khung hình đầu tiên ít nhất là 90%.
  • CÓ THỂ cung cấp một lõi riêng cho ứng dụng ở nền trước và CÓ THỂ hỗ trợ API Process.getExclusiveCores để trả về số lượng lõi CPU dành riêng cho ứng dụng ở nền trước trên cùng.

Nếu được hỗ trợ lõi độc quyền, thì lõi:

  • [C-2-1] KHÔNG ĐƯỢC phép bất kỳ quy trình không gian người dùng nào khác chạy trên đó (ngoại trừ trình điều khiển thiết bị mà ứng dụng sử dụng), nhưng CÓ THỂ cho phép một số quy trình kernel chạy khi cần thiết.

7.10. Xúc giác

Hãy xem Mục 2.2.1 để biết các yêu cầu cụ thể theo từng thiết bị.

7.11. Lớp hiệu suất nội dung nghe nhìn

Bạn có thể lấy lớp hiệu suất nội dung nghe nhìn của quá trình triển khai thiết bị từ API android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS. Các yêu cầu đối với lớp hiệu suất nội dung nghe nhìn được xác định cho từng phiên bản Android bắt đầu từ R (phiên bản 30). Giá trị đặc biệt là 0 cho biết thiết bị không thuộc lớp hiệu suất nội dung nghe nhìn.

Nếu các phương thức triển khai thiết bị trả về giá trị khác 0 cho android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS, thì:

  • [C-1-1] PHẢI trả về ít nhất một giá trị là android.os.Build.VERSION_CODES.R.

  • [C-1-2] PHẢI là một cách triển khai thiết bị cầm tay.

  • [C-1-3] PHẢI đáp ứng tất cả các yêu cầu đối với "Lớp hiệu suất nội dung nghe nhìn" được mô tả trong mục 2.2.7.

Hãy xem mục 2.2.7 để biết các yêu cầu cụ thể đối với thiết bị.

8. Hiệu suất và sức mạnh

Một số tiêu chí tối thiểu về hiệu suất và nguồn điện là yếu tố quan trọng đối với trải nghiệm người dùng và ảnh hưởng đến các giả định cơ bản mà nhà phát triển sẽ có khi phát triển một ứng dụng.

8.1. Tính nhất quán trong trải nghiệm người dùng

Bạn có thể cung cấp giao diện người dùng mượt mà cho người dùng cuối nếu có một số yêu cầu tối thiểu nhất định để đảm bảo tốc độ khung hình và thời gian phản hồi nhất quán cho các ứng dụng và trò chơi. Tuỳ thuộc vào loại thiết bị, các hoạt động triển khai thiết bị CÓ THỂ có các yêu cầu có thể đo lường đối với độ trễ giao diện người dùng và việc chuyển đổi tác vụ như mô tả trong mục 2.

8.2. Hiệu suất truy cập I/O đối với tệp

Việc cung cấp một đường cơ sở chung để có hiệu suất truy cập tệp nhất quán trên bộ nhớ dữ liệu riêng tư của ứng dụng (phân vùng /data) cho phép nhà phát triển ứng dụng đặt ra kỳ vọng phù hợp, giúp họ thiết kế phần mềm. Tuỳ thuộc vào loại thiết bị, các hoạt động triển khai thiết bị CÓ THỂ có một số yêu cầu nhất định được mô tả trong mục 2 đối với các hoạt động đọc và ghi sau đây:

  • Hiệu suất ghi tuần tự. Được đo bằng cách ghi một tệp 256 MB bằng bộ nhớ đệm ghi 10 MB.
  • Hiệu suất ghi ngẫu nhiên. Được đo bằng cách ghi tệp 256 MB bằng bộ đệm ghi 4 KB.
  • Hiệu suất đọc tuần tự. Được đo bằng cách đọc một tệp 256 MB bằng bộ đệm ghi 10 MB.
  • Hiệu suất đọc ngẫu nhiên. Được đo bằng cách đọc một tệp 256 MB bằng bộ đệm ghi 4 KB.

8.3. Chế độ tiết kiệm pin

Nếu các quy trình triển khai thiết bị có các tính năng cải thiện khả năng quản lý nguồn của thiết bị có trong AOSP (ví dụ: Bộ chứa chế độ chờ ứng dụng, chế độ Nghỉ) hoặc mở rộng các tính năng không áp dụng các hạn chế nghiêm ngặt hơn Bộ chứa chế độ chờ ứng dụng hiếm khi dùng, thì:

  • [C-1-1] KHÔNG ĐƯỢC đi lệch khỏi việc triển khai AOSP đối với các thuật toán kích hoạt, duy trì, đánh thức và việc sử dụng chế độ cài đặt hệ thống chung của chế độ chờ ứng dụng và chế độ tiết kiệm pin Doze.
  • [C-1-2] KHÔNG ĐƯỢC đi lệch khỏi việc triển khai AOSP để sử dụng chế độ cài đặt chung nhằm quản lý việc điều tiết các công việc, chuông báo và mạng cho các ứng dụng trong mỗi nhóm cho Trạng thái chờ của ứng dụng.
  • [C-1-3] KHÔNG ĐƯỢC đi lệch khỏi cách triển khai AOSP về số lượng Nhóm chế độ chờ ứng dụng được dùng cho Chế độ chờ ứng dụng.
  • [C-1-4] PHẢI triển khai Nhóm Chế độ chờ của ứng dụng và Chế độ nghỉ như mô tả trong phần Quản lý nguồn.
  • [C-1-5] PHẢI trả về true cho PowerManager.isPowerSaveMode() khi thiết bị ở chế độ tiết kiệm pin.
  • [C-SR] RẤT NÊN cung cấp cho người dùng khả năng bật và tắt tính năng tiết kiệm pin.
  • [C-SR] RẤT NÊN cung cấp cho người dùng khả năng hiển thị tất cả Ứng dụng được miễn trừ khỏi Chế độ chờ ứng dụng và chế độ tiết kiệm pin Chế độ nghỉ.

Nếu các hoạt động triển khai thiết bị mở rộng các tính năng quản lý nguồn điện có trong AOSP và tiện ích đó áp dụng các hạn chế nghiêm ngặt hơn Bộ chứa chế độ chờ ứng dụng hiếm khi dùng, hãy tham khảo mục 3.5.1.

Ngoài các chế độ tiết kiệm pin, các chế độ triển khai thiết bị Android CÓ THỂ triển khai bất kỳ hoặc tất cả 4 trạng thái nguồn ở chế độ ngủ như được xác định bởi Giao diện nguồn và cấu hình nâng cao (ACPI).

Nếu các quy trình triển khai thiết bị triển khai trạng thái nguồn S4 theo định nghĩa của ACPI, thì các quy trình này:

  • [C-1-1] CHỈ ĐƯỢC PHÉP chuyển sang trạng thái này sau khi người dùng thực hiện một hành động rõ ràng để đưa thiết bị vào trạng thái không hoạt động (ví dụ: bằng cách đóng nắp là một bộ phận vật lý của thiết bị hoặc tắt xe hoặc tivi) và trước khi người dùng kích hoạt lại thiết bị (ví dụ: bằng cách mở nắp hoặc bật lại xe hoặc tivi).

Nếu các quy trình triển khai thiết bị triển khai trạng thái nguồn S3 theo định nghĩa của ACPI, thì:

  • [C-2-1] PHẢI đáp ứng yêu cầu C-1-1 ở trên hoặc PHẢI chỉ chuyển sang trạng thái S3 khi các ứng dụng bên thứ ba không cần tài nguyên hệ thống (ví dụ: màn hình, CPU).

    Ngược lại, bạn PHẢI thoát khỏi trạng thái S3 khi các ứng dụng bên thứ ba cần tài nguyên hệ thống, như mô tả trên SDK này.

    Ví dụ: trong khi các ứng dụng bên thứ ba yêu cầu giữ màn hình bật thông qua FLAG_KEEP_SCREEN_ON hoặc giữ CPU chạy thông qua PARTIAL_WAKE_LOCK, thiết bị KHÔNG ĐƯỢC chuyển sang trạng thái S3, trừ phi người dùng đã thực hiện hành động rõ ràng để đưa thiết bị vào trạng thái không hoạt động, như mô tả trong C-1-1. Ngược lại, vào thời điểm một tác vụ mà ứng dụng bên thứ ba triển khai thông qua JobScheduler được kích hoạt hoặc Giải pháp gửi thông báo qua đám mây của Firebase được gửi đến ứng dụng bên thứ ba, thiết bị PHẢI thoát khỏi trạng thái S3, trừ phi người dùng đã đặt thiết bị ở trạng thái không hoạt động. Đây không phải là những ví dụ toàn diện và AOSP triển khai nhiều tín hiệu đánh thức để kích hoạt quá trình đánh thức từ trạng thái này.

8.4. Kế toán mức tiêu thụ điện năng

Việc ghi nhận và báo cáo mức tiêu thụ điện năng chính xác hơn sẽ cung cấp cho nhà phát triển ứng dụng cả động lực và công cụ để tối ưu hoá mô hình sử dụng điện của ứng dụng.

Cách triển khai thiết bị:

  • [SR] RẤT NÊN cung cấp hồ sơ năng lượng cho từng thành phần, xác định giá trị tiêu thụ hiện tại cho từng thành phần phần cứng và mức tiêu hao pin gần đúng do các thành phần gây ra theo thời gian như được ghi lại trong trang web Dự án nguồn mở Android.
  • [SR] BẠN NÊN báo cáo tất cả các giá trị tiêu thụ điện năng theo đơn vị miliampe giờ (mAh).
  • [SR] RẤT NÊN DÙNG để báo cáo mức tiêu thụ điện năng của CPU theo UID của từng quy trình. Dự án nguồn mở Android đáp ứng yêu cầu này thông qua việc triển khai mô-đun nhân uid_cputime.
  • [SR] RẤT NÊN cung cấp thông tin về mức tiêu thụ điện này thông qua lệnh shell adb shell dumpsys batterystats cho nhà phát triển ứng dụng.
  • NÊN được quy cho chính thành phần phần cứng nếu không thể quy mức sử dụng điện của thành phần phần cứng cho một ứng dụng.

8.5. Hiệu suất ổn định

Hiệu suất có thể dao động đáng kể đối với các ứng dụng chạy trong thời gian dài có hiệu suất cao, có thể là do các ứng dụng khác đang chạy ở chế độ nền hoặc do CPU bị điều tiết vì giới hạn nhiệt độ. Android có các giao diện theo chương trình để khi thiết bị có khả năng, ứng dụng ở nền trước trên cùng có thể yêu cầu hệ thống tối ưu hoá việc phân bổ tài nguyên để giải quyết những biến động như vậy.

Cách triển khai thiết bị:

Nếu các hoạt động triển khai thiết bị báo cáo việc hỗ trợ Chế độ hiệu suất cao bền vững, thì:

  • [C-1-1] PHẢI cung cấp cho ứng dụng trên nền trước hàng đầu một mức hiệu suất nhất quán trong ít nhất 30 phút, khi ứng dụng yêu cầu.
  • [C-1-2] PHẢI tuân thủ API Window.setSustainedPerformanceMode() và các API khác có liên quan.

Nếu các hoạt động triển khai thiết bị có từ 2 lõi CPU trở lên, thì:

  • NÊN cung cấp ít nhất một lõi độc quyền mà ứng dụng nền trước hàng đầu có thể đặt trước.

Nếu các hoạt động triển khai thiết bị hỗ trợ việc dành riêng một lõi độc quyền cho ứng dụng trên nền trước hàng đầu, thì các hoạt động triển khai đó:

  • [C-2-1] PHẢI báo cáo thông qua phương thức API Process.getExclusiveCores() số nhận dạng của các lõi dành riêng mà ứng dụng nền trước trên cùng có thể đặt trước.
  • [C-2-2] KHÔNG ĐƯỢC phép bất kỳ quy trình không gian người dùng nào, ngoại trừ trình điều khiển thiết bị mà ứng dụng dùng để chạy trên các lõi dành riêng, nhưng CÓ THỂ cho phép một số quy trình hạt nhân chạy khi cần thiết.

Nếu các hoạt động triển khai thiết bị không hỗ trợ một lõi riêng biệt, thì:

9. Khả năng tương thích của mô hình bảo mật

Cách triển khai thiết bị:

  • [C-0-1] PHẢI triển khai một mô hình bảo mật nhất quán với mô hình bảo mật của nền tảng Android như được xác định trong Tài liệu tham khảo về bảo mật và quyền trong các API trong tài liệu dành cho nhà phát triển Android.

  • [C-0-2] PHẢI hỗ trợ việc cài đặt các ứng dụng tự ký mà không yêu cầu thêm bất kỳ quyền/chứng chỉ nào của bên thứ ba/cơ quan nào. Cụ thể, các thiết bị tương thích PHẢI hỗ trợ các cơ chế bảo mật được mô tả trong các mục con sau.

9.1. Quyền

Cách triển khai thiết bị:

  • [C-0-1] PHẢI hỗ trợ mô hình quyền Android như được xác định trong tài liệu dành cho nhà phát triển Android. Cụ thể, họ PHẢI thực thi từng quyền được xác định như mô tả trong tài liệu SDK; không được bỏ qua, sửa đổi hoặc bỏ qua bất kỳ quyền nào.

  • CÓ THỂ thêm các quyền bổ sung, miễn là các chuỗi mã nhận dạng quyền mới không nằm trong không gian tên android.\*.

  • [C-0-2] Quyền có protectionLevelPROTECTION_FLAG_PRIVILEGED CHỈ được cấp cho các ứng dụng được cài đặt sẵn trong(các) đường dẫn đặc quyền của hình ảnh hệ thống và trong nhóm nhỏ các quyền được đưa vào danh sách cho phép một cách rõ ràng cho từng ứng dụng. Việc triển khai AOSP đáp ứng yêu cầu này bằng cách đọc và tuân thủ các quyền được đưa vào danh sách cho phép cho từng ứng dụng từ các tệp trong đường dẫn etc/permissions/ và sử dụng đường dẫn system/priv-app làm đường dẫn đặc quyền.

Các quyền có mức độ bảo vệ nguy hiểm là quyền khi bắt đầu chạy. Các ứng dụng có targetSdkVersion > 22 yêu cầu các quyền này trong thời gian chạy.

Cách triển khai thiết bị:

  • [C-0-3] PHẢI hiển thị một giao diện chuyên biệt để người dùng quyết định có cấp quyền khi bắt đầu chạy được yêu cầu hay không, đồng thời cung cấp một giao diện để người dùng quản lý các quyền khi bắt đầu chạy.
  • [C-0-4] PHẢI có một và chỉ một cách triển khai cho cả hai giao diện người dùng.
  • [C-0-5] KHÔNG ĐƯỢC cấp bất kỳ quyền nào trong thời gian chạy cho các ứng dụng được cài đặt sẵn, trừ phi:
    • Bạn có thể nhận được sự đồng ý của người dùng trước khi ứng dụng sử dụng thông tin này.
    • Các quyền khi bắt đầu chạy được liên kết với một mẫu ý định mà ứng dụng được cài đặt sẵn được đặt làm trình xử lý mặc định.
  • [C-0-6] CHỈ ĐƯỢC cấp quyền android.permission.RECOVER_KEYSTORE cho những ứng dụng hệ thống đăng ký một Recovery Agent được bảo mật đúng cách. Tác nhân khôi phục được bảo mật đúng cách là một tác nhân phần mềm trên thiết bị, đồng bộ hoá với bộ nhớ từ xa trên thiết bị, được trang bị phần cứng bảo mật có khả năng bảo vệ tương đương hoặc mạnh hơn những gì được mô tả trong Dịch vụ kho khoá trên Google Cloud để ngăn chặn các cuộc tấn công dò tìm mật khẩu đối với yếu tố kiến thức trên màn hình khoá.

Cách triển khai thiết bị:

  • [C-0-7] PHẢI tuân thủ các thuộc tính quyền truy cập vị trí trên Android khi ứng dụng yêu cầu dữ liệu vị trí hoặc hoạt động thể chất thông qua API Android tiêu chuẩn hoặc cơ chế độc quyền. Những dữ liệu này bao gồm nhưng không giới hạn ở:

    • Vị trí của thiết bị (ví dụ: vĩ độ và kinh độ).
    • Thông tin có thể được dùng để xác định hoặc ước tính vị trí của thiết bị (ví dụ: SSID, BSSID, Cell ID hoặc vị trí của mạng mà thiết bị kết nối).
    • Hoạt động thể chất của người dùng hoặc phân loại hoạt động thể chất.

Cụ thể hơn, các phương thức triển khai thiết bị:

  • [C-0-8] PHẢI có được sự đồng ý của người dùng để cho phép ứng dụng truy cập vào dữ liệu vị trí hoặc hoạt động thể chất.
  • [C-0-9] CHỈ ĐƯỢC cấp quyền trong thời gian chạy cho ứng dụng có đủ quyền như mô tả trên SDK. Ví dụ: TelephonyManager#getServiceState yêu cầu android.permission.ACCESS_FINE_LOCATION.

Bạn có thể đánh dấu quyền là bị hạn chế để thay đổi hành vi của quyền.

  • [C-0-10] Bạn KHÔNG ĐƯỢC cấp cho ứng dụng các quyền được đánh dấu bằng cờ hardRestricted, trừ phi:

    • Tệp APK của ứng dụng nằm trong phân vùng hệ thống.
    • Người dùng chỉ định một vai trò được liên kết với các quyền hardRestricted cho một ứng dụng.
    • Trình cài đặt cấp hardRestricted cho một ứng dụng.
    • Một ứng dụng được cấp quyền hardRestricted trên một phiên bản Android cũ.
  • [C-0-11] Các ứng dụng có quyền softRestricted CHỈ ĐƯỢC PHÉP có quyền truy cập hạn chế và KHÔNG ĐƯỢC PHÉP có toàn quyền truy cập cho đến khi được đưa vào danh sách cho phép như mô tả trong SDK, trong đó toàn quyền truy cập và quyền truy cập hạn chế được xác định cho từng quyền softRestricted (ví dụ: READ_EXTERNAL_STORAGE).

Nếu các hoạt động triển khai thiết bị cung cấp cho người dùng một cách thức để chọn ứng dụng nào có thể vẽ lên trên các ứng dụng khác bằng một hoạt động xử lý ý định ACTION_MANAGE_OVERLAY_PERMISSION, thì các hoạt động đó:

  • [C-2-1] PHẢI đảm bảo rằng tất cả các hoạt động có bộ lọc ý định cho ý định ACTION_MANAGE_OVERLAY_PERMISSION đều có cùng màn hình giao diện người dùng, bất kể ứng dụng khởi tạo hoặc bất kỳ thông tin nào mà ứng dụng đó cung cấp.

9.2. UID và quy trình cách ly

Cách triển khai thiết bị:

  • [C-0-1] PHẢI hỗ trợ mô hình hộp cát ứng dụng Android, trong đó mỗi ứng dụng chạy dưới dạng một UID theo kiểu Unix duy nhất và trong một quy trình riêng biệt.
  • [C-0-2] PHẢI hỗ trợ việc chạy nhiều ứng dụng dưới dạng cùng một mã nhận dạng người dùng Linux, miễn là các ứng dụng được ký và tạo đúng cách, như được xác định trong Tài liệu tham khảo về bảo mật và quyền.

9.3. Quyền truy cập hệ thống tệp

Cách triển khai thiết bị:

9.4. Môi trường thực thi thay thế

Các hoạt động triển khai thiết bị PHẢI duy trì tính nhất quán của mô hình bảo mật và quyền của Android, ngay cả khi chúng bao gồm các môi trường thời gian chạy thực thi các ứng dụng bằng một số phần mềm hoặc công nghệ khác ngoài Định dạng thực thi Dalvik hoặc mã gốc. Hay nói cách khác:

  • [C-0-1] Bản thay thế thời gian chạy phải là các ứng dụng Android và tuân thủ mô hình bảo mật Android tiêu chuẩn, như mô tả ở nơi khác trong mục 9.

  • [C-0-2] Các môi trường thời gian chạy thay thế KHÔNG ĐƯỢC cấp quyền truy cập vào các tài nguyên được bảo vệ bằng những quyền không được yêu cầu trong tệp AndroidManifest.xml của môi trường thời gian chạy thông qua cơ chế <uses-permission>.

  • [C-0-3] Các môi trường thời gian chạy thay thế KHÔNG ĐƯỢC phép các ứng dụng sử dụng những tính năng được bảo vệ bằng các quyền Android chỉ dành cho ứng dụng hệ thống.

  • [C-0-4] Các môi trường thời gian chạy thay thế PHẢI tuân thủ mô hình hộp cát của Android và các ứng dụng đã cài đặt bằng môi trường thời gian chạy thay thế KHÔNG ĐƯỢC dùng lại hộp cát của bất kỳ ứng dụng nào khác đã cài đặt trên thiết bị, ngoại trừ thông qua các cơ chế tiêu chuẩn của Android về mã nhận dạng người dùng dùng chung và chứng chỉ ký.

  • [C-0-5] Các môi trường thời gian chạy thay thế KHÔNG ĐƯỢC khởi chạy, cấp hoặc được cấp quyền truy cập vào các hộp cát tương ứng với các ứng dụng Android khác.

  • [C-0-6] Các môi trường thời gian chạy thay thế KHÔNG ĐƯỢC khởi chạy, được cấp hoặc cấp cho các ứng dụng khác bất kỳ đặc quyền nào của siêu người dùng (root) hoặc của bất kỳ mã nhận dạng người dùng nào khác.

  • [C-0-7] Khi các tệp .apk của thời gian chạy thay thế được đưa vào hình ảnh hệ thống của các chế độ triển khai thiết bị, thì các tệp này PHẢI được ký bằng một khoá riêng biệt với khoá dùng để ký các ứng dụng khác có trong các chế độ triển khai thiết bị.

  • [C-0-8] Khi cài đặt ứng dụng, các môi trường thời gian chạy thay thế PHẢI nhận được sự đồng ý của người dùng đối với các quyền Android mà ứng dụng sử dụng.

  • [C-0-9] Khi một ứng dụng cần sử dụng một tài nguyên trên thiết bị mà có quyền tương ứng trên Android (chẳng hạn như Camera, GPS, v.v.), thì thời gian chạy thay thế PHẢI thông báo cho người dùng rằng ứng dụng sẽ có thể truy cập vào tài nguyên đó.

  • [C-0-10] Khi môi trường thời gian chạy không ghi lại các chức năng của ứng dụng theo cách này, môi trường thời gian chạy PHẢI liệt kê tất cả các quyền mà chính thời gian chạy đó nắm giữ khi cài đặt bất kỳ ứng dụng nào bằng thời gian chạy đó.

  • Các thời gian chạy thay thế NÊN cài đặt ứng dụng thông qua PackageManager vào các hộp cát Android riêng biệt (mã nhận dạng người dùng Linux, v.v.).

  • Các môi trường thời gian chạy thay thế CÓ THỂ cung cấp một hộp cát Android duy nhất được chia sẻ bởi tất cả các ứng dụng sử dụng môi trường thời gian chạy thay thế.

9.5. Hỗ trợ nhiều người dùng

Android có hỗ trợ nhiều người dùng và hỗ trợ tính năng cách ly hoàn toàn người dùng.

  • Các chế độ triển khai thiết bị CÓ THỂ nhưng KHÔNG NÊN bật chế độ nhiều người dùng nếu chúng sử dụng phương tiện di động cho bộ nhớ ngoài chính.

Nếu các hoạt động triển khai thiết bị có nhiều người dùng, thì:

  • [C-1-1] PHẢI đáp ứng các yêu cầu sau đây liên quan đến tính năng hỗ trợ nhiều người dùng.
  • [C-1-2] PHẢI triển khai một mô hình bảo mật nhất quán với mô hình bảo mật của nền tảng Android cho từng người dùng, như được xác định trong Tài liệu tham khảo về tính bảo mật và quyền trong API.
  • [C-1-3] PHẢI có các thư mục bộ nhớ ứng dụng dùng chung riêng biệt và biệt lập (còn gọi là /sdcard) cho mỗi phiên bản người dùng.
  • [C-1-4] PHẢI đảm bảo rằng các ứng dụng thuộc sở hữu của một người dùng nhất định và chạy thay cho người dùng đó không thể liệt kê, đọc hoặc ghi vào các tệp thuộc sở hữu của bất kỳ người dùng nào khác, ngay cả khi dữ liệu của cả hai người dùng được lưu trữ trên cùng một ổ đĩa hoặc hệ thống tệp.
  • [C-1-5] PHẢI mã hoá nội dung của thẻ SD khi bật chế độ nhiều người dùng bằng khoá chỉ được lưu trữ trên phương tiện không tháo rời mà chỉ hệ thống mới có thể truy cập nếu các phương thức triển khai thiết bị sử dụng phương tiện có thể tháo rời cho các API bộ nhớ ngoài. Vì điều này sẽ khiến máy tính chủ không đọc được nội dung nghe nhìn, nên các hoạt động triển khai thiết bị sẽ phải chuyển sang MTP hoặc một hệ thống tương tự để cấp cho máy tính chủ quyền truy cập vào dữ liệu của người dùng hiện tại.

9.6. Cảnh báo về tin nhắn dịch vụ

Android hỗ trợ cảnh báo người dùng về mọi tin nhắn SMS gửi đi có tính phí. Tin nhắn SMS dịch vụ là tin nhắn văn bản được gửi đến một dịch vụ đã đăng ký với nhà mạng và có thể tính phí người dùng.

Nếu các hoạt động triển khai thiết bị khai báo hỗ trợ android.hardware.telephony, thì:

  • [C-1-1] PHẢI cảnh báo người dùng trước khi gửi tin nhắn SMS đến những số điện thoại được xác định bằng biểu thức chính quy trong tệp /data/misc/sms/codes.xml trên thiết bị. Dự án nguồn mở Android thượng nguồn cung cấp một quy trình triển khai đáp ứng yêu cầu này.

9.7. Các tính năng bảo mật

Các hoạt động triển khai thiết bị PHẢI đảm bảo tuân thủ các tính năng bảo mật trong cả nhân và nền tảng như mô tả dưới đây.

Hộp cát Android bao gồm các tính năng sử dụng hệ thống kiểm soát truy cập bắt buộc (MAC) Security-Enhanced Linux (SELinux), hộp cát seccomp và các tính năng bảo mật khác trong kernel Linux. Cách triển khai thiết bị:

  • [C-0-1] PHẢI duy trì khả năng tương thích với các ứng dụng hiện có, ngay cả khi SELinux hoặc bất kỳ tính năng bảo mật nào khác được triển khai bên dưới khung Android.
  • [C-0-2] KHÔNG ĐƯỢC có giao diện người dùng hiển thị khi phát hiện thấy hành vi vi phạm bảo mật và tính năng bảo mật được triển khai bên dưới khung Android chặn thành công hành vi đó, nhưng CÓ THỂ có giao diện người dùng hiển thị khi hành vi vi phạm bảo mật không bị chặn xảy ra dẫn đến việc khai thác thành công.
  • [C-0-3] KHÔNG ĐƯỢC phép người dùng hoặc nhà phát triển ứng dụng định cấu hình SELinux hoặc bất kỳ tính năng bảo mật nào khác được triển khai bên dưới khung Android.
  • [C-0-4] KHÔNG ĐƯỢC phép một ứng dụng có thể ảnh hưởng đến một ứng dụng khác thông qua API (chẳng hạn như Device Administration API) định cấu hình một chính sách làm mất khả năng tương thích.
  • [C-0-5] PHẢI chia khung đa phương tiện thành nhiều quy trình để có thể cấp quyền truy cập hẹp hơn cho từng quy trình như mô tả trong trang web Dự án nguồn mở Android.
  • [C-0-6] PHẢI triển khai cơ chế hộp cát ứng dụng nhân cho phép lọc các lệnh gọi hệ thống bằng cách sử dụng chính sách có thể định cấu hình từ các chương trình đa luồng. Dự án nguồn mở Android ở nguồn trên đáp ứng yêu cầu này bằng cách bật seccomp-BPF với tính năng đồng bộ hoá nhóm luồng (TSYNC) như mô tả trong phần Cấu hình nhân của source.android.com.

Tính năng tự bảo vệ và tính toàn vẹn của nhân là những yếu tố không thể thiếu đối với tính bảo mật của Android. Cách triển khai thiết bị:

  • [C-0-7] PHẢI triển khai cơ chế bảo vệ chống tràn bộ đệm ngăn xếp kernel. Ví dụ về các cơ chế như vậy là CC_STACKPROTECTOR_REGULARCONFIG_CC_STACKPROTECTOR_STRONG.
  • [C-0-8] PHẢI triển khai các biện pháp bảo vệ nghiêm ngặt đối với bộ nhớ kernel, trong đó mã thực thi ở chế độ chỉ đọc, dữ liệu ở chế độ chỉ đọc không thực thi và không ghi được, còn dữ liệu có thể ghi thì không thực thi được (ví dụ: CONFIG_DEBUG_RODATA hoặc CONFIG_STRICT_KERNEL_RWX).
  • [C-0-9] PHẢI triển khai quy trình kiểm tra giới hạn kích thước đối tượng tĩnh và động của các bản sao giữa không gian người dùng và không gian hạt nhân (ví dụ: CONFIG_HARDENED_USERCOPY) trên các thiết bị ban đầu được vận chuyển với API cấp 28 trở lên.
  • [C-0-10] KHÔNG ĐƯỢC thực thi bộ nhớ không gian người dùng khi thực thi ở chế độ hạt nhân (ví dụ: PXN phần cứng hoặc được mô phỏng thông qua CONFIG_CPU_SW_DOMAIN_PAN hoặc CONFIG_ARM64_SW_TTBR0_PAN) trên các thiết bị ban đầu được phát hành với API cấp 28 trở lên.
  • [C-0-11] KHÔNG ĐƯỢC đọc hoặc ghi bộ nhớ không gian người dùng trong nhân bên ngoài các API truy cập usercopy thông thường (ví dụ: PAN phần cứng hoặc được mô phỏng thông qua CONFIG_CPU_SW_DOMAIN_PAN hoặc CONFIG_ARM64_SW_TTBR0_PAN) trên các thiết bị ban đầu đi kèm với API cấp 28 trở lên.
  • [C-0-12] PHẢI triển khai tính năng cách ly bảng trang nhân nếu phần cứng dễ bị tấn công theo CVE-2017-5754 trên tất cả các thiết bị ban đầu được vận chuyển với API cấp 28 trở lên (ví dụ: CONFIG_PAGE_TABLE_ISOLATION hoặc CONFIG_UNMAP_KERNEL_AT_EL0).
  • [C-0-13] PHẢI triển khai biện pháp tăng cường dự đoán nhánh nếu phần cứng dễ bị tấn công theo CVE-2017-5715 trên tất cả các thiết bị ban đầu đi kèm với API cấp 28 trở lên (ví dụ: CONFIG_HARDEN_BRANCH_PREDICTOR).
  • [SR] RẤT NÊN giữ dữ liệu nhân chỉ được ghi trong quá trình khởi tạo được đánh dấu là chỉ đọc sau khi khởi tạo (ví dụ: __ro_after_init).
  • [C-SR] RẤT NÊN ngẫu nhiên hoá bố cục của mã và bộ nhớ kernel, đồng thời tránh những điểm yếu có thể ảnh hưởng đến quá trình ngẫu nhiên hoá (ví dụ: CONFIG_RANDOMIZE_BASE có entropy của trình tải khởi động thông qua /chosen/kaslr-seed Device Tree node hoặc EFI_RNG_PROTOCOL).

  • [C-SR] RẤT NÊN bật tính năng đảm bảo tính toàn vẹn của luồng điều khiển (CFI) trong nhân để tăng cường bảo vệ chống lại các cuộc tấn công sử dụng lại mã (ví dụ: CONFIG_CFI_CLANGCONFIG_SHADOW_CALL_STACK).

  • [C-SR] KHÔNG NÊN tắt Tính toàn vẹn của luồng điều khiển (CFI), Ngăn xếp lệnh gọi bóng (SCS) hoặc Vệ sinh tràn số nguyên (IntSan) trên các thành phần đã bật.
  • [C-SR] NÊN BẬT CFI, SCS và IntSan cho mọi thành phần không gian người dùng nhạy cảm với bảo mật bổ sung như được giải thích trong CFIIntSan.
  • [C-SR] RẤT NÊN bật tính năng khởi tạo ngăn xếp trong nhân để ngăn chặn việc sử dụng các biến cục bộ chưa được khởi tạo (CONFIG_INIT_STACK_ALL hoặc CONFIG_INIT_STACK_ALL_ZERO). Ngoài ra, các phương thức triển khai thiết bị KHÔNG NÊN giả định giá trị mà trình biên dịch dùng để khởi tạo các biến cục bộ.
  • [C-SR] RẤT NÊN bật tính năng khởi tạo vùng nhớ khối xếp trong nhân để ngăn việc sử dụng các hoạt động phân bổ vùng nhớ khối xếp chưa được khởi tạo (CONFIG_INIT_ON_ALLOC_DEFAULT_ON) và KHÔNG NÊN giả định giá trị mà nhân dùng để khởi tạo các hoạt động phân bổ đó.

Nếu các chế độ triển khai thiết bị sử dụng nhân Linux, thì:

  • [C-1-1] PHẢI triển khai SELinux.
  • [C-1-2] PHẢI đặt SELinux thành chế độ thực thi trên toàn cầu.
  • [C-1-3] PHẢI định cấu hình tất cả các miền ở chế độ thực thi. Không được phép sử dụng miền ở chế độ cho phép, kể cả miền dành riêng cho một thiết bị/nhà cung cấp.
  • [C-1-4] KHÔNG ĐƯỢC sửa đổi, bỏ qua hoặc thay thế các quy tắc neverallow có trong thư mục system/sepolicy được cung cấp trong Dự án nguồn mở Android (AOSP) nguồn trên và chính sách này PHẢI biên dịch với tất cả các quy tắc neverallow hiện có, cho cả miền SELinux AOSP cũng như các miền dành riêng cho thiết bị/nhà cung cấp.
  • [C-1-5] PHẢI chạy các ứng dụng bên thứ ba nhắm đến API cấp 28 trở lên trong các hộp cát SELinux cho mỗi ứng dụng với các quy định hạn chế SELinux cho mỗi ứng dụng trên thư mục dữ liệu riêng tư của mỗi ứng dụng.
  • NÊN giữ lại chính sách SELinux mặc định có trong thư mục system/sepolicy của Dự án nguồn mở Android thượng nguồn và chỉ thêm vào chính sách này cho cấu hình dành riêng cho thiết bị của riêng họ.

Nếu các hoạt động triển khai thiết bị đã được ra mắt trên một phiên bản Android cũ hơn và không thể đáp ứng các yêu cầu [C-1-1] và [C-1-5] thông qua bản cập nhật phần mềm hệ thống, thì các hoạt động triển khai đó CÓ THỂ được miễn các yêu cầu này.

Nếu các hoạt động triển khai thiết bị sử dụng nhân hệ điều hành không phải Linux, thì:

  • [C-2-1] PHẢI sử dụng một hệ thống kiểm soát quyền truy cập bắt buộc tương đương với SELinux.

Android có nhiều tính năng bảo vệ chuyên sâu, đóng vai trò không thể thiếu trong việc bảo mật thiết bị.

9.8. Quyền riêng tư

9.8.1. Nhật ký sử dụng

Android lưu trữ nhật ký lựa chọn của người dùng và quản lý nhật ký đó bằng UsageStatsManager.

Cách triển khai thiết bị:

  • [C-0-1] PHẢI duy trì khoảng thời gian lưu giữ hợp lý đối với nhật ký người dùng đó.
  • [SR] NÊN GIỮ nguyên thời gian lưu giữ 14 ngày như được định cấu hình theo mặc định trong quá trình triển khai AOSP.

Android lưu trữ các sự kiện hệ thống bằng cách sử dụng giá trị nhận dạng StatsLog và quản lý nhật ký đó thông qua StatsManagerIncidentManager System API.

Cách triển khai thiết bị:

  • [C-0-2] CHỈ ĐƯỢC PHÉP bao gồm các trường được đánh dấu bằng DEST_AUTOMATIC trong báo cáo sự cố do lớp System API IncidentManager tạo.
  • [C-0-3] KHÔNG ĐƯỢC sử dụng giá trị nhận dạng sự kiện hệ thống để ghi nhật ký bất kỳ sự kiện nào khác ngoài những sự kiện được mô tả trong tài liệu SDK StatsLog. Nếu các sự kiện hệ thống bổ sung được ghi nhật ký, thì các sự kiện đó CÓ THỂ sử dụng một giá trị nhận dạng nguyên tử khác trong phạm vi từ 100.000 đến 200.000.

9.8.2. Đang ghi âm

Cách triển khai thiết bị:

  • [C-0-1] KHÔNG ĐƯỢC tải trước hoặc phân phối các thành phần phần mềm ngay khi mở hộp để gửi thông tin riêng tư của người dùng (ví dụ: tổ hợp phím, văn bản hiển thị trên màn hình, báo cáo lỗi) ra khỏi thiết bị mà không có sự đồng ý của người dùng hoặc thông báo rõ ràng liên tục.
  • [C-0-2] PHẢI hiển thị và nhận được sự đồng ý rõ ràng của người dùng cho phép ghi lại mọi thông tin nhạy cảm xuất hiện trên màn hình của người dùng bất cứ khi nào tính năng truyền màn hình hoặc ghi màn hình được bật thông qua MediaProjection hoặc các API độc quyền. KHÔNG ĐƯỢC cung cấp cho người dùng một lựa chọn để tắt thông báo yêu cầu sự đồng ý của người dùng trong tương lai.
  • [C-0-3] PHẢI có thông báo liên tục cho người dùng khi bật tính năng truyền màn hình hoặc ghi màn hình. AOSP đáp ứng yêu cầu này bằng cách hiện một biểu tượng thông báo liên tục trên thanh trạng thái.

Nếu các hoạt động triển khai thiết bị bao gồm chức năng trong hệ thống, chức năng này sẽ chụp nội dung hiển thị trên màn hình và/hoặc ghi lại luồng âm thanh phát trên thiết bị (ngoài thông qua System API ContentCaptureService) hoặc các phương tiện độc quyền khác được mô tả trong Mục 9.8.6 Chụp nội dung, thì:

  • [C-1-1] PHẢI có thông báo liên tục cho người dùng bất cứ khi nào chức năng này được bật và đang chủ động ghi lại/quay video.

Nếu các hoạt động triển khai thiết bị có một thành phần được bật ngay khi xuất xưởng, có khả năng ghi lại âm thanh xung quanh và/hoặc ghi lại âm thanh phát trên thiết bị để suy ra thông tin hữu ích về bối cảnh của người dùng, thì:

  • [C-2-1] KHÔNG ĐƯỢC lưu trữ trong bộ nhớ cố định trên thiết bị hoặc truyền ra ngoài thiết bị âm thanh thô đã ghi hoặc bất kỳ định dạng nào có thể chuyển đổi ngược lại thành âm thanh gốc hoặc bản sao gần giống, trừ phi có sự đồng ý rõ ràng của người dùng.

9.8.3. Khả năng kết nối

Nếu các thiết bị triển khai có cổng USB hỗ trợ chế độ thiết bị ngoại vi USB, thì:

  • [C-1-1] PHẢI trình bày một giao diện người dùng yêu cầu người dùng đồng ý trước khi cho phép truy cập vào nội dung của bộ nhớ dùng chung qua cổng USB.

9.8.4. Lưu lượng truy cập mạng

Cách triển khai thiết bị:

  • [C-0-1] PHẢI cài đặt sẵn các chứng chỉ gốc tương tự cho kho Tổ chức phát hành chứng chỉ (CA) mà hệ thống tin cậy như được cung cấp trong Dự án nguồn mở Android ở thượng nguồn.
  • [C-0-2] PHẢI được vận chuyển cùng với một kho CA gốc trống của người dùng.
  • [C-0-3] PHẢI hiển thị cảnh báo cho người dùng cho biết lưu lượng truy cập mạng có thể được giám sát khi người dùng thêm CA gốc.

Nếu lưu lượng truy cập của thiết bị được định tuyến qua VPN, thì các hoạt động triển khai thiết bị sẽ:

  • [C-1-1] PHẢI hiển thị cảnh báo cho người dùng cho biết một trong hai trường hợp sau:
    • Lưu lượng truy cập mạng đó có thể được giám sát.
    • Lưu lượng truy cập mạng đó đang được định tuyến thông qua ứng dụng VPN cụ thể cung cấp VPN.

Nếu các phương thức triển khai thiết bị có một cơ chế (được bật sẵn theo mặc định) định tuyến lưu lượng truy cập dữ liệu mạng thông qua một máy chủ proxy hoặc cổng VPN (ví dụ: tải trước một dịch vụ VPN có android.permission.CONTROL_VPN được cấp), thì các phương thức triển khai đó:

  • [C-2-1] PHẢI yêu cầu người dùng đồng ý trước khi bật cơ chế đó, trừ phi VPN đó được Bộ điều khiển chính sách thiết bị bật thông qua DevicePolicyManager.setAlwaysOnVpnPackage(). Trong trường hợp này, người dùng không cần phải đồng ý riêng mà CHỈ cần được thông báo.

Nếu các hoạt động triển khai thiết bị triển khai một phương thức hỗ trợ người dùng để bật/tắt chức năng "VPN luôn bật" của một ứng dụng VPN bên thứ ba, thì các hoạt động triển khai đó:

  • [C-3-1] PHẢI tắt tính năng này cho người dùng đối với những ứng dụng không hỗ trợ dịch vụ VPN luôn bật trong tệp AndroidManifest.xml bằng cách đặt thuộc tính SERVICE_META_DATA_SUPPORTS_ALWAYS_ON thành false.

9.8.5. Thông tin nhận dạng thiết bị

Cách triển khai thiết bị:

  • [C-0-1] PHẢI ngăn chặn ứng dụng truy cập vào số sê-ri của thiết bị và, nếu có thể, IMEI/MEID, số sê-ri SIM và Mã nhận dạng thuê bao di động quốc tế (IMSI), trừ phi ứng dụng đó đáp ứng một trong các yêu cầu sau:
    • là một ứng dụng nhà mạng đã ký và được nhà sản xuất thiết bị xác minh.
    • đã được cấp quyền READ_PRIVILEGED_PHONE_STATE.
    • có các đặc quyền của nhà mạng theo định nghĩa trong UICC Carrier Privileges (Đặc quyền của nhà mạng trên UICC).
    • là chủ sở hữu thiết bị hoặc chủ sở hữu hồ sơ đã được cấp quyền READ_PHONE_STATE.
    • (Chỉ dành cho số sê-ri SIM/ICCID) có yêu cầu theo quy định của địa phương rằng ứng dụng phải phát hiện những thay đổi về danh tính của người đăng ký.

9.8.6. Ghi nội dung

Thông qua System API ContentCaptureService hoặc bằng các phương tiện độc quyền khác, Android hỗ trợ một cơ chế để các hoạt động triển khai thiết bị ghi lại những lượt tương tác sau đây giữa các ứng dụng và người dùng.

  • Văn bản và hình ảnh hiển thị trên màn hình, bao gồm nhưng không giới hạn ở thông báo và dữ liệu hỗ trợ thông qua API AssistStructure.
  • Dữ liệu nghe nhìn, chẳng hạn như âm thanh hoặc video, được thiết bị ghi lại hoặc phát.
  • Sự kiện đầu vào (ví dụ: phím, chuột, cử chỉ, giọng nói, video và hỗ trợ tiếp cận).
  • Mọi sự kiện khác mà ứng dụng cung cấp cho hệ thống thông qua API Content Capture hoặc một API độc quyền có chức năng tương tự.
  • Mọi văn bản hoặc dữ liệu khác được gửi qua TextClassifier API đến TextClassifier của Hệ thống, tức là đến dịch vụ hệ thống để hiểu ý nghĩa của văn bản, cũng như tạo các hành động tiếp theo được dự đoán dựa trên văn bản.

Nếu các hoạt động triển khai thiết bị thu thập dữ liệu ở trên, thì:

  • [C-1-1] PHẢI mã hoá tất cả dữ liệu đó khi được lưu trữ trong thiết bị. Bạn CÓ THỂ thực hiện quy trình mã hoá này bằng cách sử dụng phương thức Mã hoá dựa trên tệp của Android hoặc bất kỳ mật mã nào được liệt kê là API phiên bản 26 trở lên như mô tả trong Cipher SDK.
  • [C-1-2] KHÔNG ĐƯỢC sao lưu dữ liệu thô hoặc dữ liệu đã mã hoá bằng các phương thức sao lưu của Android hoặc bất kỳ phương thức sao lưu nào khác.
  • [C-1-3] CHỈ ĐƯỢC PHÉP gửi tất cả dữ liệu đó và nhật ký của thiết bị bằng cơ chế bảo đảm quyền riêng tư. Cơ chế bảo vệ quyền riêng tư được xác định là "những cơ chế chỉ cho phép phân tích tổng hợp và ngăn chặn việc so khớp các sự kiện đã ghi lại hoặc kết quả phái sinh với từng người dùng", để ngăn chặn mọi dữ liệu trên mỗi người dùng có thể được kiểm tra (ví dụ: được triển khai bằng công nghệ bảo vệ quyền riêng tư vi phân như RAPPOR).
  • [C-1-4] KHÔNG ĐƯỢC liên kết dữ liệu đó với bất kỳ danh tính người dùng nào (chẳng hạn như Account) trên thiết bị, trừ phi có sự đồng ý rõ ràng của người dùng mỗi khi dữ liệu được liên kết.
  • [C-1-5] KHÔNG ĐƯỢC chia sẻ dữ liệu đó với các ứng dụng khác, trừ phi có sự đồng ý rõ ràng của người dùng mỗi khi dữ liệu được chia sẻ.
  • [C-1-6] PHẢI cung cấp cho người dùng khả năng xoá dữ liệu mà ContentCaptureService hoặc phương tiện độc quyền thu thập nếu dữ liệu được lưu trữ dưới bất kỳ hình thức nào trên thiết bị.

Nếu các hoạt động triển khai thiết bị bao gồm một dịch vụ triển khai System API ContentCaptureService hoặc bất kỳ dịch vụ độc quyền nào thu thập dữ liệu như mô tả ở trên, thì các hoạt động triển khai đó:

  • [C-2-1] KHÔNG ĐƯỢC phép người dùng thay thế dịch vụ chụp nội dung bằng một ứng dụng hoặc dịch vụ mà người dùng có thể cài đặt và CHỈ ĐƯỢC phép dịch vụ được cài đặt sẵn chụp dữ liệu đó.
  • [C-2-2] KHÔNG ĐƯỢC phép bất kỳ ứng dụng nào khác ngoài cơ chế dịch vụ chụp nội dung được cài đặt sẵn có thể chụp dữ liệu đó.
  • [C-2-3] PHẢI cung cấp cho người dùng khả năng tắt dịch vụ ghi lại nội dung.
  • [C-2-4] KHÔNG ĐƯỢC bỏ qua khả năng tương tác của người dùng để quản lý các quyền Android do dịch vụ chụp nội dung nắm giữ và tuân theo mô hình quyền Android như mô tả trong Mục 9.1. Quyền.
  • [C-SR] RẤT NÊN giữ các thành phần dịch vụ ghi lại nội dung riêng biệt, chẳng hạn như không liên kết dịch vụ hoặc chia sẻ mã nhận dạng quy trình, với các thành phần hệ thống khác, ngoại trừ những thành phần sau:

    • Điện thoại, Danh bạ, Giao diện người dùng hệ thống và Nội dung nghe nhìn

9.8.7. Quyền truy cập vào bảng nhớ tạm

Cách triển khai thiết bị:

  • [C-0-1] KHÔNG ĐƯỢC trả về dữ liệu bị cắt trên bảng tạm (ví dụ: thông qua API ClipboardManager) trừ phi ứng dụng là IME mặc định hoặc là ứng dụng hiện đang được lấy tiêu điểm.

9.8.8. Vị trí

Cách triển khai thiết bị:

  • [C-0-1] KHÔNG ĐƯỢC bật/tắt chế độ cài đặt vị trí trên thiết bị và chế độ cài đặt quét Wi-Fi/Bluetooth mà không có sự đồng ý rõ ràng của người dùng hoặc do người dùng chủ động thực hiện.
  • [C-0-2] PHẢI cung cấp cho người dùng khả năng truy cập thông tin liên quan đến vị trí, bao gồm cả các yêu cầu gần đây về vị trí, quyền ở cấp ứng dụng và việc sử dụng tính năng quét Wi-Fi/Bluetooth để xác định vị trí.
  • [C-0-3] PHẢI đảm bảo rằng ứng dụng sử dụng Emergency Location Bypass API [LocationRequest.setLocationSettingsIgnored()] là một phiên khẩn cấp do người dùng bắt đầu (ví dụ: gọi 911 hoặc nhắn tin đến 911). Tuy nhiên, đối với ngành ô tô, xe CÓ THỂ bắt đầu một phiên khẩn cấp mà không cần người dùng tương tác trong trường hợp phát hiện thấy tai nạn/sự cố (ví dụ: để đáp ứng các yêu cầu của eCall).
  • [C-0-4] PHẢI duy trì khả năng của Emergency Location Bypass API (API bỏ qua thông tin vị trí trong trường hợp khẩn cấp) để bỏ qua chế độ cài đặt vị trí của thiết bị mà không thay đổi chế độ cài đặt.
  • [C-0-5] PHẢI lên lịch gửi một thông báo nhắc nhở người dùng sau khi một ứng dụng ở chế độ nền đã truy cập thông tin vị trí của họ bằng quyền [ACCESS_BACKGROUND_LOCATION].

9.8.9. Ứng dụng đã cài đặt

Theo mặc định, các ứng dụng Android nhắm đến API cấp 30 trở lên không thể xem thông tin chi tiết về các ứng dụng đã cài đặt khác (xem phần Chế độ hiển thị gói trong tài liệu về Android SDK).

Cách triển khai thiết bị:

  • [C-0-1] KHÔNG ĐƯỢC cung cấp cho bất kỳ ứng dụng nào nhắm đến API cấp 30 trở lên thông tin chi tiết về bất kỳ ứng dụng đã cài đặt nào khác, trừ phi ứng dụng đó đã có thể xem thông tin chi tiết về ứng dụng đã cài đặt khác thông qua các API được quản lý. Điều này bao gồm nhưng không giới hạn ở những thông tin chi tiết do mọi API tuỳ chỉnh mà nhà triển khai thiết bị thêm vào hoặc có thể truy cập thông qua hệ thống tệp.

9.8.10. Báo cáo lỗi kết nối

Nếu các hoạt động triển khai thiết bị tạo báo cáo lỗi bằng cách sử dụng System API BUGREPORT_MODE_TELEPHONY với BugreportManager, thì:

  • [C-1-1] PHẢI nhận được sự đồng ý của người dùng mỗi khi gọi System API BUGREPORT_MODE_TELEPHONY để tạo báo cáo và KHÔNG ĐƯỢC nhắc người dùng đồng ý với tất cả các yêu cầu trong tương lai từ ứng dụng.
  • [C-1-2] PHẢI hiển thị và nhận được sự đồng ý rõ ràng của người dùng khi bắt đầu tạo báo cáo và KHÔNG ĐƯỢC trả lại báo cáo đã tạo cho ứng dụng yêu cầu mà không có sự đồng ý rõ ràng của người dùng.
  • [C-1-3] PHẢI tạo các báo cáo được yêu cầu có chứa ít nhất những thông tin sau:
    • Tệp kết xuất TelephonyDebugService
    • Tệp kết xuất TelephonyRegistry
    • Tệp kết xuất hoạt động của WifiService
    • Tệp kết xuất ConnectivityService
    • Một bản kết xuất của thực thể CarrierService trong gói gọi (nếu được liên kết)
    • Vùng đệm nhật ký của đài
  • [C-1-4] KHÔNG ĐƯỢC đưa các thông tin sau vào báo cáo được tạo:
    • Mọi loại thông tin không liên quan đến việc gỡ lỗi kết nối.
    • Mọi loại nhật ký lưu lượng truy cập của ứng dụng do người dùng cài đặt hoặc hồ sơ chi tiết về các ứng dụng/gói do người dùng cài đặt (UID được chấp nhận, tên gói thì không).
  • CÓ THỂ bao gồm thông tin bổ sung không liên kết với bất kỳ danh tính người dùng nào. (ví dụ: nhật ký của nhà cung cấp).

Nếu các hoạt động triển khai thiết bị có thêm thông tin (ví dụ: nhật ký của nhà cung cấp) trong báo cáo lỗi và thông tin đó ảnh hưởng đến quyền riêng tư/bảo mật/pin/bộ nhớ/dung lượng lưu trữ, thì các hoạt động triển khai đó:

  • [C-SR] RẤT NÊN có một chế độ cài đặt cho nhà phát triển được đặt mặc định là tắt. AOSP đáp ứng yêu cầu này bằng cách cung cấp lựa chọn Enable verbose vendor logging trong phần cài đặt cho nhà phát triển để đưa thêm nhật ký của nhà cung cấp dành riêng cho thiết bị vào báo cáo lỗi.

9.8.11. Chia sẻ blob dữ liệu

Thông qua BlobStoreManager, Android cho phép các ứng dụng đóng góp các blob dữ liệu cho Hệ thống để chia sẻ với một nhóm ứng dụng đã chọn.

Nếu các hoạt động triển khai thiết bị hỗ trợ blob dữ liệu dùng chung như mô tả trong tài liệu về SDK, thì các hoạt động này sẽ:

  • [C-1-1] KHÔNG ĐƯỢC chia sẻ các blob dữ liệu thuộc về các ứng dụng ngoài những gì chúng dự định cho phép (tức là phạm vi truy cập mặc định và các chế độ truy cập khác có thể được chỉ định bằng cách sử dụng BlobStoreManager.session#allowPackageAccess(), BlobStoreManager.session#allowSameSignatureAccess() hoặc BlobStoreManager.session#allowPublicAccess() KHÔNG ĐƯỢC sửa đổi). Quy trình triển khai tham chiếu AOSP đáp ứng các yêu cầu này.
  • [C-1-2] KHÔNG ĐƯỢC gửi ra khỏi thiết bị hoặc chia sẻ với các ứng dụng khác hàm băm bảo mật của các blob dữ liệu (được dùng để kiểm soát quyền truy cập).

9.9. Mã hoá bộ nhớ dữ liệu

Tất cả thiết bị ĐỀU PHẢI đáp ứng các yêu cầu trong mục 9.9.1. Các thiết bị chạy ở cấp độ API thấp hơn cấp độ API trong tài liệu này được miễn các yêu cầu trong mục 9.9.2 và 9.9.3; thay vào đó, các thiết bị này PHẢI đáp ứng các yêu cầu trong mục 9.9 của Tài liệu định nghĩa về khả năng tương thích của Android tương ứng với cấp độ API mà thiết bị chạy.

9.9.1. Direct Boot

Cách triển khai thiết bị:

  • [C-0-1] PHẢI triển khai các API chế độ Khởi động trực tiếp ngay cả khi các API này không hỗ trợ tính năng Mã hoá bộ nhớ.

  • [C-0-2] Các Intent ACTION_LOCKED_BOOT_COMPLETEDACTION_USER_UNLOCKED VẪN PHẢI được truyền đi để báo hiệu cho các ứng dụng có nhận biết chế độ Khởi động trực tiếp rằng người dùng có thể sử dụng các vị trí lưu trữ được Mã hoá trên thiết bị (DE) và Mã hoá thông tin đăng nhập (CE).

9.9.2. Yêu cầu về việc mã hoá

Cách triển khai thiết bị:

  • [C-0-1] PHẢI mã hoá dữ liệu riêng tư của ứng dụng (phân vùng /data), cũng như phân vùng bộ nhớ dùng chung của ứng dụng (phân vùng /sdcard) nếu đó là một phần cố định, không thể tháo rời của thiết bị.
  • [C-0-2] PHẢI bật tính năng mã hoá bộ nhớ dữ liệu theo mặc định tại thời điểm người dùng hoàn tất quá trình thiết lập ban đầu.
  • [C-0-3] PHẢI đáp ứng yêu cầu mã hoá dữ liệu lưu trữ nêu trên bằng cách triển khai một trong hai phương thức mã hoá sau:

9.9.3. Phương pháp mã hoá

Nếu các hoạt động triển khai thiết bị được mã hoá, thì:

  • [C-1-1] PHẢI khởi động mà không yêu cầu người dùng cung cấp thông tin đăng nhập và cho phép các ứng dụng có nhận biết chế độ Khởi động trực tiếp truy cập vào bộ nhớ được mã hoá của thiết bị (DE) sau khi thông báo ACTION_LOCKED_BOOT_COMPLETED được phát.
  • [C-1-2] CHỈ ĐƯỢC PHÉP truy cập vào bộ nhớ được mã hoá thông tin đăng nhập (CE) sau khi người dùng mở khoá thiết bị bằng cách cung cấp thông tin đăng nhập (ví dụ: mật khẩu, mã PIN, hình mở khoá hoặc vân tay) và thông báo ACTION_USER_UNLOCKED được phát.
  • [C-1-13] KHÔNG ĐƯỢC cung cấp bất kỳ phương thức nào để mở kho lưu trữ được bảo vệ bằng CE mà không có thông tin đăng nhập do người dùng cung cấp, khoá uỷ thác đã đăng ký hoặc việc triển khai tiếp tục khi khởi động lại đáp ứng các yêu cầu trong mục 9.9.4.
  • [C-1-4] PHẢI sử dụng tính năng Xác minh quy trình khởi động.

9.9.3.1. Mã hoá dựa trên tệp có mã hoá siêu dữ liệu

Nếu các hoạt động triển khai thiết bị sử dụng phương thức mã hoá dựa trên tệp có phương thức mã hoá siêu dữ liệu, thì:

  • [C-1-5] PHẢI mã hoá nội dung tệp và siêu dữ liệu hệ thống tệp bằng AES-256-XTS hoặc Adiantum. AES-256-XTS là Tiêu chuẩn mã hoá nâng cao với độ dài khoá mã hoá 256 bit, hoạt động ở chế độ XTS; độ dài đầy đủ của khoá là 512 bit. Adiantum đề cập đến Adiantum-XChaCha12-AES, như được chỉ định tại https://github.com/google/adiantum. Siêu dữ liệu hệ thống tệp là dữ liệu như kích thước tệp, quyền sở hữu, chế độ và thuộc tính mở rộng (xattr).
  • [C-1-6] PHẢI mã hoá tên tệp bằng AES-256-CBC-CTS hoặc Adiantum.
  • [C-1-12] Nếu thiết bị có hướng dẫn Tiêu chuẩn mã hoá nâng cao (AES) (chẳng hạn như Tiện ích mã hoá ARMv8 trên các thiết bị dựa trên ARM hoặc AES-NI trên các thiết bị dựa trên x86), thì bạn PHẢI sử dụng các lựa chọn dựa trên AES ở trên để mã hoá tên tệp, nội dung tệp và siêu dữ liệu của hệ thống tệp, chứ không được dùng Adiantum.
  • [C-1-13] PHẢI sử dụng một hàm phái sinh khoá không thể đảo ngược và có độ bảo mật cao về mật mã (ví dụ: HKDF-SHA512) để phái sinh mọi khoá con cần thiết (ví dụ: khoá cho mỗi tệp) từ khoá CE và DE. "Mạnh mẽ về mặt mật mã và không thể đảo ngược" có nghĩa là hàm phái sinh khoá có độ mạnh bảo mật ít nhất là 256 bit và hoạt động như một họ hàm giả ngẫu nhiên trên các đầu vào của hàm đó.
  • [C-1-14] KHÔNG ĐƯỢC sử dụng cùng một khoá hoặc khoá con Mã hoá dựa trên tệp (FBE) cho các mục đích mã hoá khác nhau (ví dụ: cho cả mã hoá và dẫn xuất khoá, hoặc cho hai thuật toán mã hoá khác nhau).

  • Các khoá bảo vệ các khu vực lưu trữ CE và DE cũng như siêu dữ liệu của hệ thống tệp:

  • [C-1-7] PHẢI được liên kết bằng mật mã với Kho khoá dựa trên phần cứng. Kho khoá này PHẢI được liên kết với quy trình Khởi động đã xác minh và gốc tin cậy phần cứng của thiết bị.

  • [C-1-8] Các khoá CE PHẢI được liên kết với thông tin xác thực màn hình khoá của người dùng.
  • [C-1-9] Các khoá CE PHẢI được liên kết với một mật mã mặc định khi người dùng chưa chỉ định thông tin đăng nhập màn hình khoá.
  • [C-1-10] PHẢI là duy nhất và riêng biệt, tức là khoá CE hoặc DE của người dùng không được trùng khớp với khoá CE hoặc DE của bất kỳ người dùng nào khác.
  • [C-1-11] PHẢI sử dụng các thuật toán mã hoá, độ dài khoá và chế độ được hỗ trợ bắt buộc.

  • NÊN làm cho các ứng dụng thiết yếu được cài đặt sẵn (ví dụ: Báo thức, Điện thoại, Messenger) nhận biết được chế độ Khởi động trực tiếp.

Dự án Android nguồn mở thượng nguồn cung cấp một cách triển khai ưu tiên cho tính năng Mã hoá dựa trên tệp dựa trên tính năng mã hoá "fscrypt" của nhân Linux và tính năng Mã hoá siêu dữ liệu dựa trên tính năng "dm-default-key" của nhân Linux.

9.9.3.2. Mã hoá ở cấp khối cho từng người dùng

Nếu các hoạt động triển khai thiết bị sử dụng phương thức mã hoá ở cấp khối cho mỗi người dùng, thì các hoạt động này sẽ:

  • [C-1-1] PHẢI bật chế độ hỗ trợ nhiều người dùng như mô tả trong phần 9.5.
  • [C-1-2] PHẢI cung cấp các phân vùng cho mỗi người dùng, bằng cách sử dụng phân vùng thô hoặc ổ đĩa logic.
  • [C-1-3] PHẢI sử dụng các khoá mã hoá riêng biệt và duy nhất cho mỗi người dùng để mã hoá các thiết bị khối cơ bản.
  • [C-1-4] PHẢI sử dụng AES-256-XTS để mã hoá ở cấp khối cho các phân vùng người dùng.

  • Các khoá bảo vệ thiết bị được mã hoá ở cấp khối cho mỗi người dùng:

  • [C-1-5] PHẢI được liên kết bằng mật mã với Kho khoá dựa trên phần cứng. Kho khoá này PHẢI được liên kết với quy trình Khởi động đã xác minh và gốc tin cậy phần cứng của thiết bị.

  • [C-1-6] PHẢI được liên kết với thông tin xác thực màn hình khoá tương ứng của người dùng.

Bạn có thể triển khai tính năng mã hoá ở cấp khối cho từng người dùng bằng cách sử dụng tính năng "dm-crypt" của nhân Linux trên các phân vùng cho từng người dùng.

9.9.4. Tiếp tục sau khi khởi động lại

Tính năng Tiếp tục sau khi khởi động lại cho phép mở kho lưu trữ CE của tất cả ứng dụng, kể cả những ứng dụng chưa hỗ trợ tính năng Khởi động trực tiếp, sau khi quá trình khởi động lại do OTA khởi tạo. Tính năng này cho phép người dùng nhận thông báo từ các ứng dụng đã cài đặt sau khi khởi động lại.

Việc triển khai tính năng Tiếp tục sau khi khởi động lại phải tiếp tục đảm bảo rằng khi thiết bị rơi vào tay kẻ tấn công, kẻ tấn công đó sẽ cực kỳ khó khôi phục dữ liệu được mã hoá bằng CE của người dùng, ngay cả khi thiết bị đang bật, bộ nhớ CE đã được mở khoá và người dùng đã mở khoá thiết bị sau khi nhận được bản cập nhật qua mạng. Để chống lại các cuộc tấn công nội bộ, chúng tôi cũng giả định rằng kẻ tấn công có quyền truy cập vào các khoá ký mã hoá truyền tin.

Cụ thể:

  • [C-0-1] Bộ nhớ CE KHÔNG ĐƯỢC phép đọc ngay cả đối với kẻ tấn công có thiết bị thực và có những khả năng cũng như hạn chế sau:

    • Có thể dùng khoá ký của bất kỳ nhà cung cấp hoặc công ty nào để ký các thông báo tuỳ ý.
    • Có thể khiến thiết bị nhận được bản cập nhật qua mạng (OTA).
    • Có thể sửa đổi hoạt động của mọi phần cứng (AP, bộ nhớ flash, v.v.) ngoại trừ những trường hợp được nêu chi tiết bên dưới, nhưng việc sửa đổi như vậy sẽ mất ít nhất một giờ và một chu kỳ bật/tắt nguồn sẽ xoá nội dung trong RAM.
    • Không thể sửa đổi hoạt động của phần cứng chống giả mạo (ví dụ: Titan M).
    • Không đọc được RAM của thiết bị đang hoạt động.
    • Không thể lấy thông tin xác thực của người dùng (mã PIN, hình mở khoá, mật khẩu) hoặc khiến người dùng nhập thông tin đó.

Ví dụ: một hoạt động triển khai thiết bị triển khai và tuân thủ tất cả nội dung mô tả có tại đây sẽ tuân thủ [C-0-1].

9.10. Tính toàn vẹn của thiết bị

Các yêu cầu sau đây đảm bảo tính minh bạch về trạng thái tính toàn vẹn của thiết bị. Cách triển khai thiết bị:

  • [C-0-1] PHẢI báo cáo chính xác thông qua phương thức System API PersistentDataBlockManager.getFlashLockState() về việc trạng thái trình tải khởi động của họ có cho phép cài đặt ROM hình ảnh hệ thống hay không. Trạng thái FLASH_LOCK_UNKNOWN được dành riêng cho các hoạt động triển khai thiết bị nâng cấp từ một phiên bản Android cũ hơn mà phương thức API hệ thống mới này chưa tồn tại.

  • [C-0-2] PHẢI hỗ trợ quy trình Khởi động đã xác minh để đảm bảo tính toàn vẹn của thiết bị.

Nếu các hoạt động triển khai thiết bị đã được ra mắt mà không hỗ trợ tính năng Xác minh quy trình khởi động trên một phiên bản Android cũ và không thể thêm tính năng này bằng một bản cập nhật phần mềm hệ thống, thì các hoạt động triển khai đó CÓ THỂ được miễn yêu cầu.

Xác minh quy trình khởi động là một tính năng đảm bảo tính toàn vẹn của phần mềm thiết bị. Nếu các hoạt động triển khai thiết bị hỗ trợ tính năng này, thì:

  • [C-1-1] PHẢI khai báo cờ tính năng nền tảng android.software.verified_boot.
  • [C-1-2] PHẢI thực hiện quy trình xác minh trong mỗi trình tự khởi động.
  • [C-1-3] PHẢI bắt đầu quy trình xác minh từ một khoá phần cứng bất biến là gốc tin cậy và đi lên đến phân vùng hệ thống.
  • [C-1-4] PHẢI triển khai từng giai đoạn xác minh để kiểm tra tính toàn vẹn và tính xác thực của tất cả các byte trong giai đoạn tiếp theo trước khi thực thi mã trong giai đoạn tiếp theo.
  • [C-1-5] PHẢI sử dụng các thuật toán xác minh mạnh mẽ như các đề xuất hiện tại của NIST đối với thuật toán băm (SHA-256) và kích thước khoá công khai (RSA-2048).
  • [C-1-6] KHÔNG ĐƯỢC phép hoàn tất quá trình khởi động khi quá trình xác minh hệ thống không thành công, trừ phi người dùng đồng ý thử khởi động dù sao đi nữa. Trong trường hợp đó, KHÔNG ĐƯỢC sử dụng dữ liệu từ bất kỳ khối lưu trữ nào chưa được xác minh.
  • [C-1-7] KHÔNG ĐƯỢC phép sửa đổi các phân vùng đã xác minh trên thiết bị, trừ phi người dùng đã mở khoá trình tải khởi động một cách rõ ràng.
  • [C-SR] Nếu có nhiều chip rời rạc trong thiết bị (ví dụ: đài, bộ xử lý hình ảnh chuyên dụng), thì BẠN NÊN XÁC MINH từng giai đoạn trong quá trình khởi động của mỗi chip đó.
  • [C-1-8] PHẢI sử dụng bộ nhớ chống giả mạo: để lưu trữ thông tin về việc trình tải khởi động có được mở khoá hay không. Bộ nhớ chống giả mạo có nghĩa là trình tải khởi động có thể phát hiện xem bộ nhớ có bị giả mạo từ bên trong Android hay không.
  • [C-1-9] PHẢI nhắc người dùng trong khi sử dụng thiết bị và yêu cầu xác nhận thực tế trước khi cho phép chuyển từ chế độ khoá trình tải khởi động sang chế độ mở khoá trình tải khởi động.
  • [C-1-10] PHẢI triển khai tính năng bảo vệ chống hạ cấp cho các phân vùng mà Android sử dụng (ví dụ: phân vùng khởi động, phân vùng hệ thống) và sử dụng bộ nhớ chống giả mạo để lưu trữ siêu dữ liệu dùng để xác định phiên bản hệ điều hành tối thiểu được phép.
  • [C-SR] BẠN NÊN XÁC MINH tất cả các tệp APK của ứng dụng đặc quyền bằng một chuỗi tin cậy bắt nguồn từ các phân vùng được bảo vệ bằng tính năng Xác minh quy trình khởi động.
  • [C-SR] NÊN XÁC MINH MỌI cấu phần phần mềm có thể thực thi do một ứng dụng có đặc quyền tải từ bên ngoài tệp APK của ứng dụng (chẳng hạn như mã được tải động hoặc mã đã biên dịch) trước khi thực thi hoặc NÊN KHÔNG thực thi các cấu phần phần mềm đó.
  • NÊN triển khai tính năng bảo vệ chống quay về phiên bản cũ cho mọi thành phần có phần mềm cố định liên tục (ví dụ: modem, camera) và NÊN sử dụng bộ nhớ chống giả mạo để lưu trữ siêu dữ liệu dùng để xác định phiên bản tối thiểu được phép.

Nếu các hoạt động triển khai thiết bị đã ra mắt mà không hỗ trợ C-1-8 đến C-1-10 trên một phiên bản Android cũ và không thể thêm hỗ trợ cho các yêu cầu này bằng một bản cập nhật phần mềm hệ thống, thì các hoạt động triển khai đó CÓ THỂ được miễn các yêu cầu này.

Dự án nguồn mở Android (thượng nguồn) cung cấp một cách triển khai ưu tiên cho tính năng này trong kho lưu trữ external/avb/. Bạn có thể tích hợp kho lưu trữ này vào trình tải khởi động dùng để tải Android.

Cách triển khai thiết bị:

  • [C-0-3] PHẢI hỗ trợ việc xác minh nội dung tệp bằng mật mã dựa trên một khoá đáng tin cậy mà không cần đọc toàn bộ tệp.
  • [C-0-4] KHÔNG ĐƯỢC PHÉP cho phép các yêu cầu đọc trên một tệp được bảo vệ thành công khi nội dung đọc không xác minh bằng một khoá đáng tin cậy.

Nếu các hoạt động triển khai thiết bị đã được ra mắt mà không có khả năng xác minh nội dung tệp dựa trên một khoá đáng tin cậy trên phiên bản Android cũ hơn và không thể thêm tính năng này bằng một bản cập nhật phần mềm hệ thống, thì các hoạt động triển khai đó CÓ THỂ được miễn yêu cầu này. Dự án nguồn mở Android ở thượng nguồn cung cấp một cách triển khai ưu tiên cho tính năng này dựa trên tính năng fs-verity của nhân Linux.

Cách triển khai thiết bị:

Nếu các phương thức triển khai thiết bị hỗ trợ Android Protected Confirmation API, thì:

  • [C-3-1] PHẢI báo cáo true cho API ConfirmationPrompt.isSupported().

  • [C-3-2] PHẢI đảm bảo rằng mã chạy trong hệ điều hành Android (bao gồm cả nhân của hệ điều hành này), dù là mã độc hại hay không, đều không thể tạo ra phản hồi tích cực mà không có sự tương tác của người dùng.

  • [C-3-3] PHẢI đảm bảo rằng người dùng có thể xem xét và phê duyệt thông báo được nhắc ngay cả trong trường hợp hệ điều hành Android (bao gồm cả nhân của hệ điều hành) bị xâm nhập.

9.11. Khoá và thông tin đăng nhập

Hệ thống Kho khoá Android cho phép nhà phát triển ứng dụng lưu trữ các khoá mã hoá trong một vùng chứa và sử dụng các khoá đó trong các hoạt động mã hoá thông qua KeyChain API hoặc Keystore API. Cách triển khai thiết bị:

  • [C-0-1] PHẢI cho phép nhập hoặc tạo ít nhất 8.192 khoá.
  • [C-0-2] Quá trình xác thực trên màn hình khoá PHẢI giới hạn số lần thử và PHẢI có thuật toán giảm thời gian chờ theo cấp số nhân. Sau 150 lần thử không thành công, độ trễ PHẢI ít nhất là 24 giờ cho mỗi lần thử.
  • KHÔNG NÊN giới hạn số lượng khoá có thể được tạo

Khi quá trình triển khai thiết bị hỗ trợ màn hình khoá bảo mật, thì:

  • [C-1-1] PHẢI sao lưu việc triển khai kho khoá bằng một môi trường thực thi riêng biệt.
  • [C-1-2] PHẢI có các phương thức triển khai thuật toán mã hoá RSA, AES, ECDSA và HMAC cũng như các hàm băm MD5, SHA1 và SHA-2 để hỗ trợ đúng cách các thuật toán được hệ thống Kho khoá Android hỗ trợ trong một khu vực được cách ly an toàn với mã đang chạy trên nhân và ở trên. Tính năng cách ly an toàn PHẢI chặn tất cả các cơ chế tiềm ẩn mà mã kernel hoặc không gian người dùng có thể truy cập vào trạng thái nội bộ của môi trường biệt lập, bao gồm cả DMA. Dự án nguồn mở Android (AOSP) đáp ứng yêu cầu này bằng cách sử dụng chế độ triển khai Trusty, nhưng một giải pháp khác dựa trên ARM TrustZone hoặc một chế độ triển khai bảo mật đã được bên thứ ba xem xét về khả năng cách ly dựa trên siêu giám sát viên thích hợp cũng là các lựa chọn thay thế.
  • [C-1-3] PHẢI thực hiện quy trình xác thực màn hình khoá trong môi trường thực thi biệt lập và chỉ khi thành công, mới cho phép sử dụng các khoá liên kết với quy trình xác thực. Thông tin đăng nhập trên màn hình khoá PHẢI được lưu trữ theo cách chỉ cho phép môi trường thực thi biệt lập thực hiện quy trình xác thực trên màn hình khoá. Dự án nguồn mở Android ở nguồn trên cung cấp Lớp trừu tượng phần cứng (HAL) Gatekeeper và Trusty. Bạn có thể dùng các lớp này để đáp ứng yêu cầu này.
  • [C-1-4] PHẢI hỗ trợ quy trình chứng thực khoá trong đó khoá ký chứng thực được bảo vệ bằng phần cứng bảo mật và quy trình ký được thực hiện trong phần cứng bảo mật. Bạn PHẢI chia sẻ các khoá ký chứng thực trên một số lượng thiết bị đủ lớn để ngăn các khoá này được dùng làm giá trị nhận dạng thiết bị. Một cách để đáp ứng yêu cầu này là chia sẻ cùng một khoá chứng thực,trừ phi bạn sản xuất ít nhất 100.000 đơn vị của một SKU nhất định. Nếu có hơn 100.000 đơn vị của một SKU được sản xuất, thì bạn CÓ THỂ sử dụng một khoá khác cho mỗi 100.000 đơn vị.

Xin lưu ý rằng nếu một quá trình triển khai thiết bị đã được ra mắt trên một phiên bản Android cũ hơn, thì thiết bị đó sẽ được miễn yêu cầu phải có một kho khoá được hỗ trợ bởi một môi trường thực thi biệt lập và hỗ trợ quy trình chứng thực khoá, trừ phi thiết bị đó khai báo tính năng android.hardware.fingerprint yêu cầu một kho khoá được hỗ trợ bởi một môi trường thực thi biệt lập.

  • [C-1-5] PHẢI cho phép người dùng chọn Thời gian chờ chuyển sang trạng thái ngủ để chuyển từ trạng thái đã mở khoá sang trạng thái khoá, với thời gian chờ tối thiểu cho phép là 15 giây. Các thiết bị ô tô khoá màn hình bất cứ khi nào đầu phát trung tâm tắt hoặc người dùng chuyển đổi, KHÔNG ĐƯỢC có cấu hình Thời gian chờ chuyển sang chế độ ngủ.

9.11.1. Màn hình khoá và phương thức xác thực bảo mật

Việc triển khai AOSP tuân theo mô hình xác thực theo cấp, trong đó quy trình xác thực chính dựa trên yếu tố kiến thức có thể được hỗ trợ bằng phương thức sinh trắc học mạnh thứ cấp hoặc bằng các phương thức yếu hơn ở cấp độ thứ ba.

Cách triển khai thiết bị:

  • [C-SR] BẠN NÊN đặt chỉ một trong những phương thức sau làm phương thức xác thực chính:
    • Mã PIN bằng số
    • Mật khẩu dạng chữ và số
    • Một mẫu vuốt trên lưới gồm đúng 3x3 dấu chấm

Xin lưu ý rằng các phương thức xác thực nêu trên được coi là các phương thức xác thực chính được đề xuất trong tài liệu này.

Nếu các phương thức triển khai thiết bị thêm hoặc sửa đổi các phương thức xác thực chính được đề xuất và sử dụng một phương thức xác thực mới như một cách bảo mật để khoá màn hình, thì phương thức xác thực mới đó phải:

Nếu các hoạt động triển khai thiết bị thêm hoặc sửa đổi các phương thức xác thực để mở khoá màn hình khoá dựa trên một bí mật đã biết và sử dụng một phương thức xác thực mới được coi là một cách bảo mật để khoá màn hình:

  • [C-3-1] Entropy của độ dài đầu vào ngắn nhất được phép PHẢI lớn hơn 10 bit.
  • [C-3-2] Entropy tối đa của tất cả các đầu vào có thể có PHẢI lớn hơn 18 bit.
  • [C-3-3] Phương thức xác thực mới KHÔNG ĐƯỢC thay thế bất kỳ phương thức xác thực chính nào được đề xuất (tức là mã PIN, hình mở khoá, mật khẩu) được triển khai và cung cấp trong AOSP.
  • [C-3-4] Phương thức xác thực mới PHẢI bị vô hiệu hoá khi ứng dụng Trình kiểm soát chính sách thiết bị (DPC) đã đặt chính sách chất lượng mật khẩu thông qua phương thức DevicePolicyManager.setPasswordQuality() với hằng số chất lượng hạn chế hơn PASSWORD_QUALITY_SOMETHING.
  • [C-3-5] Các phương thức xác thực mới PHẢI quay lại các phương thức xác thực chính được đề xuất (tức là mã PIN, hình mở khoá, mật khẩu) sau mỗi 72 giờ hoặc ít hơn HOẶC tiết lộ rõ ràng cho người dùng rằng một số dữ liệu sẽ không được sao lưu để bảo vệ quyền riêng tư cho dữ liệu của họ.

Nếu các phương thức triển khai thiết bị thêm hoặc sửa đổi các phương thức xác thực chính được đề xuất để mở khoá màn hình khoá và sử dụng một phương thức xác thực mới dựa trên dữ liệu sinh trắc học để được coi là một cách bảo mật để khoá màn hình, thì phương thức mới này:

  • [C-4-1] PHẢI đáp ứng tất cả các yêu cầu được mô tả trong mục 7.3.10 đối với Lớp 1 (trước đây là Tiện lợi).
  • [C-4-2] PHẢI có cơ chế dự phòng để sử dụng một trong các phương thức xác thực chính được đề xuất dựa trên một bí mật đã biết.
  • [C-4-3] PHẢI tắt và chỉ cho phép phương thức xác thực chính được đề xuất để mở khoá màn hình khi ứng dụng Bộ điều khiển chính sách thiết bị (DPC) đã đặt chính sách về tính năng khoá màn hình bằng cách gọi phương thức DevicePolicyManager.setKeyguardDisabledFeatures(), với bất kỳ cờ sinh trắc học nào được liên kết (tức là KEYGUARD_DISABLE_BIOMETRICS, KEYGUARD_DISABLE_FINGERPRINT, KEYGUARD_DISABLE_FACE hoặc KEYGUARD_DISABLE_IRIS).

Nếu các phương thức xác thực sinh trắc học không đáp ứng các yêu cầu đối với Lớp 3 (trước đây là Mạnh) như mô tả trong mục 7.3.10:

  • [C-5-1] Các phương thức PHẢI bị vô hiệu hoá nếu ứng dụng Trình kiểm soát chính sách thiết bị (DPC) đã đặt chính sách chất lượng mật khẩu thông qua phương thức DevicePolicyManager.setPasswordQuality() với hằng số chất lượng hạn chế hơn PASSWORD_QUALITY_BIOMETRIC_WEAK.
  • [C-5-2] Người dùng PHẢI được yêu cầu xác thực chính theo cách được đề xuất (ví dụ: mã PIN, hình mở khoá, mật khẩu) như mô tả trong [C-1-7] và [C-1-8] trong mục 7.3.10.
  • [C-5-3] Các phương thức này KHÔNG ĐƯỢC coi là màn hình khoá an toàn và PHẢI đáp ứng các yêu cầu bắt đầu bằng C-8 trong phần bên dưới.

Nếu các quy trình triển khai thiết bị thêm hoặc sửa đổi các phương thức xác thực để mở khoá màn hình khoá và phương thức xác thực mới dựa trên mã thông báo thực hoặc vị trí:

  • [C-6-1] Ứng dụng PHẢI có cơ chế dự phòng để sử dụng một trong các phương thức xác thực chính được đề xuất dựa trên một bí mật đã biết và đáp ứng các yêu cầu để được coi là một màn hình khoá an toàn.
  • [C-6-2] Phương thức mới PHẢI bị vô hiệu hoá và chỉ cho phép một trong các phương thức xác thực chính được đề xuất để mở khoá màn hình khi ứng dụng Bộ điều khiển chính sách thiết bị (DPC) đã đặt chính sách bằng phương thức DevicePolicyManager.setKeyguardDisabledFeatures(KEYGUARD_DISABLE_TRUST_AGENTS) hoặc phương thức DevicePolicyManager.setPasswordQuality() với hằng số chất lượng hạn chế hơn PASSWORD_QUALITY_UNSPECIFIED.
  • [C-6-3] Người dùng PHẢI được yêu cầu sử dụng một trong các phương thức xác thực chính được đề xuất (ví dụ: mã PIN, hình mở khoá, mật khẩu) ít nhất một lần sau mỗi 4 giờ hoặc ít hơn.
  • [C-6-4] Không được coi phương thức mới là màn hình khoá bảo mật và PHẢI tuân theo các ràng buộc được liệt kê trong C-8 bên dưới.

Nếu các phương thức triển khai thiết bị có màn hình khoá an toàn và bao gồm một hoặc nhiều tác nhân tin cậy triển khai TrustAgentService System API, thì các phương thức triển khai đó:

  • [C-7-1] PHẢI có chỉ báo rõ ràng trong trình đơn cài đặt và trên màn hình khoá khi phương thức khoá thiết bị bị hoãn lại hoặc có thể được mở khoá bằng(các) tác nhân tin cậy. Ví dụ: AOSP đáp ứng yêu cầu này bằng cách hiển thị nội dung mô tả bằng văn bản cho "Chế độ cài đặt tự động khoá" và "Khoá ngay bằng nút nguồn" trong trình đơn cài đặt, đồng thời hiển thị một biểu tượng dễ phân biệt trên màn hình khoá.
  • [C-7-2] PHẢI tuân thủ và triển khai đầy đủ tất cả các API tác nhân tin cậy trong lớp DevicePolicyManager, chẳng hạn như hằng số KEYGUARD_DISABLE_TRUST_AGENTS.
  • [C-7-3] KHÔNG ĐƯỢC triển khai đầy đủ chức năng TrustAgentService.addEscrowToken() trên thiết bị được dùng làm thiết bị cá nhân chính (ví dụ: thiết bị cầm tay) nhưng CÓ THỂ triển khai đầy đủ chức năng này trên các thiết bị thường được dùng chung (ví dụ: Android Television hoặc thiết bị trên ô tô).
  • [C-7-4] PHẢI mã hoá tất cả mã thông báo đã lưu trữ do TrustAgentService.addEscrowToken() thêm.
  • [C-7-5] KHÔNG ĐƯỢC lưu trữ khoá mã hoá hoặc mã thông báo uỷ thác trên cùng một thiết bị nơi khoá được dùng. Ví dụ: khoá được lưu trữ trên điện thoại được phép mở khoá tài khoản người dùng trên TV. Đối với thiết bị Automotive, bạn không được phép lưu trữ mã thông báo uỷ thác trên bất kỳ bộ phận nào của xe.
  • [C-7-6] PHẢI thông báo cho người dùng về các tác động đến bảo mật trước khi cho phép mã thông báo uỷ thác giải mã bộ nhớ dữ liệu.
  • [C-7-7] PHẢI có cơ chế dự phòng để sử dụng một trong các phương thức xác thực chính được đề xuất.
  • [C-7-8] Người dùng PHẢI được yêu cầu xác thực bằng một trong các phương thức xác thực chính được đề xuất (ví dụ: mã PIN, hình mở khoá, mật khẩu) ít nhất một lần sau mỗi 72 giờ hoặc ít hơn, trừ phi có lo ngại về sự an toàn của người dùng (ví dụ: người lái xe bị mất tập trung).
  • [C-7-9] Người dùng PHẢI được yêu cầu thực hiện một trong các phương thức xác thực chính được đề xuất (ví dụ: mã PIN, mẫu hình, mật khẩu) như mô tả trong [C-1-7] và [C-1-8] trong mục 7.3.10, trừ phi có lo ngại về sự an toàn của người dùng (ví dụ: người lái xe bị mất tập trung).
  • [C-7-10] KHÔNG ĐƯỢC coi là màn hình khoá bảo mật và PHẢI tuân theo các ràng buộc được liệt kê trong C-8 bên dưới.
  • [C-7-11] KHÔNG ĐƯỢC phép TrustAgents trên các thiết bị cá nhân chính (ví dụ: thiết bị cầm tay) mở khoá thiết bị và chỉ có thể sử dụng các TrustAgents này để giữ thiết bị đã mở khoá ở trạng thái mở khoá trong tối đa 4 giờ. Phương thức triển khai mặc định của TrustManagerService trong AOSP đáp ứng yêu cầu này.
  • [C-7-12] PHẢI sử dụng một kênh giao tiếp được bảo mật theo cách mã hoá (ví dụ: UKEY2) để truyền mã thông báo uỷ thác từ thiết bị lưu trữ sang thiết bị mục tiêu.

Nếu các phương thức triển khai thiết bị thêm hoặc sửa đổi các phương thức xác thực để mở khoá màn hình khoá không phải là màn hình khoá bảo mật như mô tả ở trên và sử dụng một phương thức xác thực mới để mở khoá keyguard:

  • [C-8-1] Phương thức mới PHẢI bị vô hiệu hoá khi ứng dụng Bộ điều khiển chính sách thiết bị (DPC) đã đặt chính sách chất lượng mật khẩu thông qua phương thức DevicePolicyManager.setPasswordQuality() với hằng số chất lượng hạn chế hơn PASSWORD_QUALITY_UNSPECIFIED.
  • [C-8-2] Họ KHÔNG ĐƯỢC đặt lại bộ hẹn giờ hết hạn mật khẩu do DevicePolicyManager.setPasswordExpirationTimeout() đặt.
  • [C-8-3] Các ứng dụng KHÔNG ĐƯỢC phép cung cấp một API để các ứng dụng bên thứ ba sử dụng nhằm thay đổi trạng thái khoá.

9.11.2. StrongBox

Hệ thống Kho khoá Android cho phép nhà phát triển ứng dụng lưu trữ các khoá mã hoá trong một bộ xử lý bảo mật chuyên dụng cũng như môi trường thực thi riêng biệt như mô tả ở trên. Bộ xử lý bảo mật chuyên dụng như vậy được gọi là "StrongBox". Các yêu cầu từ C-1-3 đến C-1-11 bên dưới xác định những yêu cầu mà thiết bị phải đáp ứng để đủ điều kiện là StrongBox.

Các thiết bị có bộ xử lý bảo mật chuyên dụng:

  • [C-SR] RẤT NÊN DÙNG để hỗ trợ StrongBox. StrongBox có thể sẽ trở thành một yêu cầu trong bản phát hành sau này.

Nếu các hoạt động triển khai thiết bị hỗ trợ StrongBox, thì:

  • [C-1-1] PHẢI khai báo FEATURE_STRONGBOX_KEYSTORE.

  • [C-1-2] PHẢI cung cấp phần cứng bảo mật chuyên dụng dùng để sao lưu kho khoá và xác thực người dùng một cách an toàn. Phần cứng bảo mật chuyên dụng này cũng có thể được dùng cho các mục đích khác.

  • [C-1-3] PHẢI có một CPU riêng biệt, không dùng chung bộ nhớ đệm, DRAM, bộ đồng xử lý hoặc các tài nguyên cốt lõi khác với bộ xử lý ứng dụng (AP).

  • [C-1-4] PHẢI đảm bảo rằng mọi thiết bị ngoại vi được chia sẻ với AP không được làm thay đổi quy trình xử lý StrongBox theo bất kỳ cách nào hoặc lấy bất kỳ thông tin nào từ StrongBox. AP CÓ THỂ vô hiệu hoá hoặc chặn quyền truy cập vào StrongBox.

  • [C-1-5] PHẢI có đồng hồ nội bộ với độ chính xác hợp lý (+/-10%) và không bị AP thao túng.

  • [C-1-6] PHẢI có một trình tạo số ngẫu nhiên thực sự tạo ra đầu ra phân phối đồng đều và không thể đoán trước.

  • [C-1-7] PHẢI có khả năng chống giả mạo, bao gồm cả khả năng chống xâm nhập vật lý và chống lỗi.

  • [C-1-8] PHẢI có khả năng chống lại các kênh phụ, bao gồm cả khả năng chống lại việc rò rỉ thông tin qua các kênh phụ về nguồn điện, thời gian, bức xạ điện từ và bức xạ nhiệt.

  • [C-1-9] PHẢI có bộ nhớ an toàn để đảm bảo tính bảo mật, tính toàn vẹn, tính xác thực, tính nhất quán và tính mới mẻ của nội dung. Bộ nhớ KHÔNG ĐƯỢC phép đọc hoặc thay đổi, trừ phi được phép theo API StrongBox.

  • Để xác thực việc tuân thủ [C-1-3] đến [C-1-9], việc triển khai thiết bị:

    • [C-1-10] PHẢI bao gồm phần cứng được chứng nhận theo Secure IC Protection Profile BSI-CC-PP-0084-2014 hoặc được phòng thử nghiệm được quốc gia công nhận đánh giá, kết hợp với Đánh giá lỗ hổng bảo mật có khả năng tấn công cao theo Ứng dụng tiêu chí chung về khả năng tấn công đối với thẻ thông minh.
    • [C-1-11] PHẢI bao gồm phần mềm cố định được đánh giá bởi một phòng thí nghiệm kiểm thử được quốc gia công nhận, kết hợp với Đánh giá lỗ hổng bảo mật có khả năng tấn công cao theo Ứng dụng tiêu chí chung về khả năng tấn công đối với thẻ thông minh.
    • [C-SR] RẤT NÊN BAO GỒM phần cứng được đánh giá bằng Mục tiêu bảo mật, Cấp độ đảm bảo đánh giá (EAL) 5, được tăng cường bằng AVA_VAN.5. Chứng nhận EAL 5 có thể sẽ trở thành một yêu cầu trong bản phát hành sau này.
  • [C-SR] RẤT NÊN cung cấp khả năng chống tấn công nội bộ (IAR), tức là nhân viên nội bộ có quyền truy cập vào khoá ký phần mềm không thể tạo ra phần mềm khiến StrongBox làm lộ bí mật, bỏ qua các yêu cầu bảo mật chức năng hoặc cho phép truy cập vào dữ liệu nhạy cảm của người dùng. Cách triển khai IAR được đề xuất là chỉ cho phép cập nhật chương trình cơ sở khi mật khẩu của người dùng chính được cung cấp thông qua IAuthSecret HAL.

9.11.3. Thông tin xác thực danh tính

Hệ thống thông tin xác thực danh tính được xác định và đạt được bằng cách triển khai tất cả các API trong gói android.security.identity.*. Các API này cho phép nhà phát triển ứng dụng lưu trữ và truy xuất tài liệu nhận dạng người dùng. Cách triển khai thiết bị:

  • [C-SR] NÊN TRIỂN KHAI HỆ THỐNG THÔNG TIN XÁC THỰC DANH TÍNH.

Nếu các hoạt động triển khai thiết bị triển khai Hệ thống thông tin xác thực danh tính, thì:

  • [C-0-1] PHẢI trả về giá trị khác rỗng cho phương thức IdentityCredentialStore#getInstance().

  • [C-0-2] PHẢI triển khai Hệ thống thông tin xác thực danh tính (ví dụ: API android.security.identity.*) bằng mã giao tiếp với một ứng dụng đáng tin cậy trong một khu vực được cách ly an toàn với mã đang chạy trên nhân và ở trên. Tính năng cách ly an toàn PHẢI chặn tất cả các cơ chế tiềm ẩn mà mã kernel hoặc không gian người dùng có thể truy cập vào trạng thái nội bộ của môi trường biệt lập, bao gồm cả DMA.

  • [C-0-3] Các thao tác mã hoá cần thiết để triển khai Hệ thống thông tin đăng nhập nhận dạng (ví dụ: API android.security.identity.*) PHẢI được thực hiện hoàn toàn trong ứng dụng đáng tin cậy và nội dung khoá riêng tư KHÔNG BAO GIỜ được rời khỏi môi trường thực thi biệt lập, trừ phi được các API cấp cao hơn yêu cầu cụ thể (ví dụ: phương thức createEphemeralKeyPair()).

  • [C-0-4] Ứng dụng đáng tin cậy PHẢI được triển khai theo cách sao cho các thuộc tính bảo mật của ứng dụng đó không bị ảnh hưởng (ví dụ: dữ liệu thông tin đăng nhập không được phát hành trừ phi các điều kiện kiểm soát quyền truy cập được đáp ứng, không thể tạo MAC cho dữ liệu tuỳ ý) ngay cả khi Android hoạt động không đúng cách hoặc bị xâm nhập.

9.12. Xóa dữ liệu

Tất cả các cách triển khai thiết bị:

  • [C-0-1] PHẢI cung cấp cho người dùng một cơ chế để thực hiện thao tác "Đặt lại dữ liệu về trạng thái ban đầu".
  • [C-0-2] PHẢI xoá tất cả dữ liệu trên hệ thống tệp dữ liệu người dùng.
  • [C-0-3] PHẢI xoá dữ liệu theo cách đáp ứng các tiêu chuẩn ngành có liên quan, chẳng hạn như NIST SP800-88.
  • [C-0-4] PHẢI kích hoạt quy trình "Xoá dữ liệu khôi phục cài đặt gốc" nêu trên khi API DevicePolicyManager.wipeData() được gọi bởi ứng dụng Trình kiểm soát chính sách thiết bị của người dùng chính.
  • CÓ THỂ cung cấp một lựa chọn xoá dữ liệu nhanh chỉ thực hiện xoá dữ liệu logic.

9.13. Chế độ khởi động an toàn

Android cung cấp Chế độ khởi động an toàn, cho phép người dùng khởi động ở chế độ chỉ cho phép các ứng dụng hệ thống được cài đặt sẵn chạy và vô hiệu hoá tất cả các ứng dụng bên thứ ba. Chế độ này (còn gọi là "Chế độ khởi động an toàn") cho phép người dùng gỡ cài đặt các ứng dụng có khả năng gây hại của bên thứ ba.

Các cách triển khai thiết bị là:

  • [SR] BẠN NÊN TRIỂN KHAI Chế độ khởi động an toàn.

Nếu các hoạt động triển khai thiết bị triển khai Chế độ khởi động an toàn, thì:

  • [C-1-1] PHẢI cung cấp cho người dùng lựa chọn chuyển sang Chế độ khởi động an toàn theo cách không bị gián đoạn bởi các ứng dụng bên thứ ba đã cài đặt trên thiết bị, trừ trường hợp ứng dụng bên thứ ba là Trình kiểm soát chính sách thiết bị và đã đặt cờ UserManager.DISALLOW_SAFE_BOOT thành true.

  • [C-1-2] PHẢI cung cấp cho người dùng khả năng gỡ cài đặt mọi ứng dụng bên thứ ba trong Chế độ an toàn.

  • NÊN cung cấp cho người dùng lựa chọn chuyển sang Chế độ khởi động an toàn từ trình đơn khởi động bằng một quy trình khác với quy trình khởi động thông thường.

9.14. Cách ly hệ thống xe ô tô

Các thiết bị Android Automotive dự kiến sẽ trao đổi dữ liệu với các hệ thống con quan trọng của xe bằng cách sử dụng HAL của xe để gửi và nhận thông báo qua các mạng của xe, chẳng hạn như bus CAN.

Bạn có thể bảo mật việc trao đổi dữ liệu bằng cách triển khai các tính năng bảo mật bên dưới các lớp khung Android để ngăn chặn tương tác độc hại hoặc vô tình với các hệ thống con này.

9.15. Gói thuê bao

"Gói thuê bao" là thông tin chi tiết về kế hoạch mối quan hệ thanh toán do nhà mạng di động cung cấp thông qua SubscriptionManager.setSubscriptionPlans().

Tất cả các cách triển khai thiết bị:

  • [C-0-1] CHỈ ĐƯỢC PHÉP trả lại các gói thuê bao cho ứng dụng nhà mạng di động đã cung cấp các gói đó ban đầu.
  • [C-0-2] KHÔNG ĐƯỢC sao lưu hoặc tải gói thuê bao lên từ xa.
  • [C-0-3] CHỈ ĐƯỢC PHÉP ghi đè, chẳng hạn như SubscriptionManager.setSubscriptionOverrideCongested(), từ ứng dụng của nhà mạng di động hiện đang cung cấp các gói thuê bao hợp lệ.

9.16. Di chuyển dữ liệu ứng dụng

Nếu các hoạt động triển khai thiết bị có khả năng di chuyển dữ liệu từ thiết bị này sang thiết bị khác và không giới hạn dữ liệu ứng dụng mà thiết bị sao chép sang những gì mà nhà phát triển ứng dụng đã định cấu hình trong tệp kê khai thông qua thuộc tính android:fullBackupContent, thì:

  • [C-1-1] KHÔNG ĐƯỢC bắt đầu chuyển dữ liệu ứng dụng từ các thiết bị mà người dùng chưa đặt phương thức xác thực chính như mô tả trong phần 9.11.1 Màn hình khoá và xác thực an toàn.
  • [C-1-2] PHẢI xác nhận một cách an toàn phương thức xác thực chính trên thiết bị nguồn và xác nhận ý định của người dùng muốn sao chép dữ liệu trên thiết bị nguồn trước khi chuyển bất kỳ dữ liệu nào.
  • [C-1-3] PHẢI sử dụng chứng thực khoá bảo mật để đảm bảo rằng cả thiết bị nguồn và thiết bị đích trong quá trình di chuyển dữ liệu giữa các thiết bị đều là thiết bị Android hợp lệ và có trình tải khởi động đã khoá.
  • [C-1-4] CHỈ ĐƯỢC PHÉP di chuyển dữ liệu ứng dụng sang cùng một ứng dụng trên thiết bị đích, có cùng tên gói VÀ chứng chỉ ký.
  • [C-1-5] PHẢI cho biết rằng thiết bị nguồn đã di chuyển dữ liệu bằng tính năng di chuyển dữ liệu giữa các thiết bị trong trình đơn cài đặt. Người dùng KHÔNG ĐƯỢC phép xoá chỉ báo này.

10. Kiểm thử khả năng tương thích của phần mềm

Các hoạt động triển khai thiết bị PHẢI vượt qua tất cả các bài kiểm thử được mô tả trong phần này. Tuy nhiên, xin lưu ý rằng không có gói kiểm thử phần mềm nào là hoàn toàn toàn diện. Vì lý do này, các nhà triển khai thiết bị NÊN thực hiện ít thay đổi nhất có thể đối với quá trình triển khai tham chiếu và ưu tiên của Android có trong Dự án nguồn mở Android. Điều này sẽ giảm thiểu nguy cơ xuất hiện lỗi gây ra sự không tương thích, đòi hỏi phải làm lại và có thể phải cập nhật thiết bị.

10.1. Bộ kiểm tra tính tương thích

Cách triển khai thiết bị:

  • [C-0-1] PHẢI vượt qua Bộ kiểm tra tính tương thích (CTS) với Android có trong Dự án nguồn mở Android, bằng cách sử dụng phần mềm vận chuyển cuối cùng trên thiết bị.

  • [C-0-2] PHẢI đảm bảo khả năng tương thích trong trường hợp có sự mơ hồ trong CTS và đối với mọi lần triển khai lại các phần của mã nguồn tham chiếu.

CTS được thiết kế để chạy trên một thiết bị thực. Giống như mọi phần mềm, CTS có thể chứa các lỗi. CTS sẽ được lập phiên bản độc lập với Định nghĩa về khả năng tương thích này và có thể phát hành nhiều bản sửa đổi của CTS cho Android 11.

Cách triển khai thiết bị:

  • [C-0-3] PHẢI vượt qua phiên bản CTS mới nhất có tại thời điểm hoàn tất phần mềm thiết bị.

  • NÊN sử dụng việc triển khai tham chiếu trong cây Android Open Source càng nhiều càng tốt.

10.2. Trình xác minh CTS

CTS Verifier có trong Bộ kiểm tra tính tương thích và được thiết kế để do người vận hành chạy nhằm kiểm thử chức năng mà hệ thống tự động không kiểm thử được, chẳng hạn như chức năng hoạt động chính xác của camera và các cảm biến.

Cách triển khai thiết bị:

  • [C-0-1] PHẢI thực thi chính xác tất cả các trường hợp áp dụng trong trình xác minh CTS.

Trình xác minh CTS có các quy trình kiểm thử cho nhiều loại phần cứng, bao gồm cả một số phần cứng không bắt buộc.

Cách triển khai thiết bị:

  • [C-0-2] PHẢI vượt qua tất cả các bài kiểm thử đối với phần cứng mà thiết bị có; ví dụ: nếu thiết bị có gia tốc kế, thì thiết bị đó PHẢI thực thi chính xác trường hợp kiểm thử Gia tốc kế trong Trình xác minh CTS.

Bạn CÓ THỂ bỏ qua hoặc bỏ sót các trường hợp kiểm thử cho những tính năng được Tài liệu định nghĩa về khả năng tương thích này ghi nhận là không bắt buộc.

  • [C-0-2] Mọi thiết bị và mọi bản dựng ĐỀU PHẢI chạy CTS Verifier một cách chính xác, như đã lưu ý ở trên. Tuy nhiên, vì nhiều bản dựng rất giống nhau, nên nhà triển khai thiết bị không cần chạy CTS Verifier một cách rõ ràng trên những bản dựng chỉ khác nhau ở những điểm không đáng kể. Cụ thể, những thiết bị triển khai khác với một thiết bị triển khai đã vượt qua CTS Verifier chỉ bằng bộ ngôn ngữ, thương hiệu, v.v. được đưa vào CÓ THỂ bỏ qua kiểm thử CTS Verifier.

11. Phần mềm có thể cập nhật

  • [C-0-1] Các quy trình triển khai thiết bị PHẢI có một cơ chế để thay thế toàn bộ phần mềm hệ thống. Cơ chế này không cần thực hiện các bản nâng cấp "trực tiếp", tức là bạn CÓ THỂ phải khởi động lại thiết bị. Bạn có thể sử dụng bất kỳ phương thức nào, miễn là phương thức đó có thể thay thế toàn bộ phần mềm được cài đặt sẵn trên thiết bị. Ví dụ: mọi phương pháp sau đây đều đáp ứng yêu cầu này:

    • Tải xuống "qua mạng không dây (OTA)" với bản cập nhật ngoại tuyến thông qua việc khởi động lại.
    • Bản cập nhật "chia sẻ Internet" qua USB từ máy tính lưu trữ.
    • Cập nhật "ngoại tuyến" thông qua việc khởi động lại và cập nhật từ một tệp trên bộ nhớ di động.
  • [C-0-2] Cơ chế cập nhật được dùng PHẢI hỗ trợ các bản cập nhật mà không xoá dữ liệu người dùng. Tức là cơ chế cập nhật PHẢI giữ nguyên dữ liệu riêng tư của ứng dụng và dữ liệu dùng chung của ứng dụng. Xin lưu ý rằng phần mềm Android nguồn mở bao gồm một cơ chế cập nhật đáp ứng yêu cầu này.

  • [C-0-3] Toàn bộ bản cập nhật PHẢI được ký và cơ chế cập nhật trên thiết bị PHẢI xác minh bản cập nhật và chữ ký dựa trên khoá công khai được lưu trữ trên thiết bị.

  • [C-SR] Bạn NÊN SỬ DỤNG cơ chế ký để băm bản cập nhật bằng SHA-256 và xác thực hàm băm dựa trên khoá công khai bằng ECDSA NIST P-256.

Nếu các hoạt động triển khai thiết bị có hỗ trợ kết nối dữ liệu không đo lượng như cấu hình 802.11 hoặc Bluetooth PAN (Mạng khu vực cá nhân), thì các hoạt động này:

  • [C-1-1] PHẢI hỗ trợ tải OTA xuống bằng cách cập nhật ngoại tuyến thông qua khởi động lại.

Đối với những thiết bị triển khai chạy Android 6.0 trở lên, cơ chế cập nhật PHẢI hỗ trợ việc xác minh rằng hình ảnh hệ thống có cùng tệp nhị phân với kết quả dự kiến sau khi cập nhật qua mạng (OTA). Việc triển khai OTA dựa trên khối trong Dự án nguồn mở Android ở thượng nguồn, được thêm vào từ Android 5.1, đáp ứng yêu cầu này.

Ngoài ra, các hoạt động triển khai thiết bị PHẢI hỗ trợ bản cập nhật hệ thống A/B. AOSP triển khai tính năng này bằng cách sử dụng HAL điều khiển khởi động.

Nếu lỗi được phát hiện trong quá trình triển khai thiết bị sau khi thiết bị được phát hành nhưng vẫn trong thời gian sử dụng hợp lý của sản phẩm (được xác định sau khi tham khảo ý kiến của Nhóm tương thích Android) và ảnh hưởng đến khả năng tương thích của các ứng dụng bên thứ ba, thì:

  • [C-2-1] Nhà triển khai thiết bị PHẢI sửa lỗi thông qua một bản cập nhật phần mềm có thể áp dụng theo cơ chế vừa mô tả.

Android có các tính năng cho phép ứng dụng Chủ sở hữu thiết bị (nếu có) kiểm soát việc cài đặt các bản cập nhật hệ thống. Nếu hệ thống con cập nhật hệ thống cho các thiết bị báo cáo android.software.device_admin thì:

12. Nhật ký thay đổi của tài liệu

Để xem nội dung tóm tắt về những thay đổi đối với Định nghĩa về khả năng tương thích trong bản phát hành này:

Để xem nội dung tóm tắt về những thay đổi đối với từng phần, hãy xem:

  1. Giới thiệu
  2. Loại thiết bị
  3. Phần mềm
  4. Đóng gói ứng dụng
  5. Đa phương tiện
  6. Công cụ và tuỳ chọn cho nhà phát triển
  7. Khả năng tương thích với phần cứng
  8. Hiệu suất và nguồn điện
  9. Mô hình bảo mật
  10. Kiểm thử khả năng tương thích của phần mềm
  11. Phần mềm có thể cập nhật
  12. Nhật ký thay đổi của tài liệu
  13. Liên hệ với chúng tôi

12.1. Mẹo xem nhật ký thay đổi

Các thay đổi được đánh dấu như sau:

  • CDD
    Những thay đổi quan trọng đối với các yêu cầu về khả năng tương thích.

  • Tài liệu
    Các thay đổi liên quan đến giao diện hoặc bản dựng.

Để xem hiệu quả nhất, hãy thêm các tham số URL pretty=fullno-merges vào URL nhật ký thay đổi.

13. Liên hệ với chúng tôi

Bạn có thể tham gia diễn đàn về khả năng tương thích của Android để yêu cầu làm rõ hoặc nêu ra mọi vấn đề mà bạn cho rằng tài liệu này chưa đề cập.