안드로이드 13
2023년 3월 20일
2. 기기 종류
개정판 보기
휴대기기 구현의 설정 애플리케이션이 활동 임베딩을 사용하여 분할 기능을 구현하는 경우 다음을 충족해야 합니다.
- [
C-17-13.2.3.1/ H-1-1 ] 분할 기능이 켜져 있을 때 Settings#ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY 의도를 처리하는 활동이 있어야 합니다(MUST). 액티비티는android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK
에 의해 보호되어야 하며 Settings#EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI 에서 파싱된 인텐트의 액티비티를 시작해야 합니다.
- [
개정판 보기
VP9 하드웨어 디코더가 있는 텔레비전 장치 구현이 VP9 디코딩 및 UHD 디코딩 프로필을 지원하는 경우:
- [ 5.3.7 /T-
2-1SR1 ] 프로필 2(10비트 색 심도)를 사용하여 초당 60프레임의 UHD 디코딩 프로필을 지원할 것을 적극 권장합니다(STRONGLY RECOMMENDED).
- [ 5.3.7 /T-
개정판 보기
자동차 기기 구현:
3. 소프트웨어
개정판 보기
새로운 요구 사항 시작
새 연락처의 기본 계정: 연락처 제공자는 새 연락처를 만들 때 기본 계정 설정을 관리하기 위한 API를 제공합니다.
기기 구현이 연락처 앱을 사전 로드하는 경우 사전 로드된 연락처 앱은 다음을 수행합니다.
[C-2-1] 계정 선택을 위한 UI를 시작하고 계정이 선택되면 설정을 연락처 제공자에 저장하기 위해
ContactsContract.Settings.ACTION_SET_DEFAULT_ACCOUNT
텐트를 처리해야 합니다(MUST).[C-2-2] 초기에 계정을 선택하여
ContactsContracts.Contacts.CONTENT_TYPE
및ContactsContract.RawContacts.CONTENT_TYPE
에 대한Intent.ACTION_INSERT and Intent.ACTION_INSERT_OR_EDIT
처리할 때 기본 계정 설정을 준수해야 합니다(MUST).
개정판 보기
[2.2.3으로 이동]
새로운 요구 사항 시작
기기 구현의 설정 애플리케이션이 활동 임베딩을 사용하여 분할 기능을 구현하는 경우 다음을 충족해야 합니다.
- [C-17-1] 분할 기능이 켜져 있을 때 Settings#ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY 인텐트를 처리하는 활동이 있어야 합니다(MUST). 액티비티는
android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK
에 의해 보호되어야 하며 Settings#EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI 에서 파싱된 인텐트의 액티비티를 시작해야 합니다.
- [C-17-1] 분할 기능이 켜져 있을 때 Settings#ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY 인텐트를 처리하는 활동이 있어야 합니다(MUST). 액티비티는
6. 개발자 도구 및 옵션 호환성
개정판 보기
- 원숭이
- [C-0-8] Monkey 프레임워크를 포함하고 애플리케이션에서 사용할 수 있도록 해야 합니다(MUST).
- 원숭이
7. 하드웨어 호환성
개정판 보기
[7.4.9로 이동]
새로운 요구 사항 시작
802.1.15.4에 대한 지원을 포함하고 타사 애플리케이션에 기능을 노출하는 기기 구현은 다음을 충족해야 합니다.
- [C-1-1] android.uwb에서 해당 Android API를 구현해야 합니다(MUST).
- [C-1-2] 하드웨어 기능 플래그 android.hardware.uwb를 보고해야 합니다(MUST).
- [C-1-3] Android 구현에 정의된 모든 관련 UWB 프로필을 지원해야 합니다(MUST).
- [C-1-4] 사용자가 UWB 라디오 켜기/끄기 상태를 전환할 수 있도록 사용자 어포던스를 제공해야 합니다(MUST).
- [C-1-5] UWB 라디오를 사용하는 앱이 UWB_RANGING 권한(NEARBY_DEVICES 권한 그룹 아래)을 보유하도록 강제해야 합니다(MUST).
- [C-1-6] FIRA , CCC , CSA 를 비롯한 표준 조직에서 정의한 관련 적합성 및 인증 테스트를 통과할 것을 적극 권장합니다(STRONGLY RECOMMENDED).
개정판 보기
장치 구현
GSM 또는 CDMA 전화 통신 포함android.hardware.telephony
기능을 보고한 후 다음을 수행합니다.- [C-6-1]
SmsManager#sendTextMessage
및SmsManager#sendMultipartTextMessage
문자 메시지 기능을 제공하기 위해CarrierMessagingService
에 대한 해당 호출을 발생시켜야 합니다(MUST).SmsManager#sendMultimediaMessage
및SmsManager#downloadMultimediaMessage
멀티미디어 메시징 기능을 제공하기 위해CarrierMessagingService
에 대한 해당 호출을 발생시켜야 합니다. - [C-6-2]
android.provider.Telephony.Sms#getDefaultSmsPackage
로 지정된 애플리케이션은 SMS 및 MMS 메시지를 보내고 받을 때 SmsManager API를 사용해야 합니다(MUST). packages/apps/Messaging의 AOSP 참조 구현은 이 요구사항을 충족합니다. - [C-6-3]
Intent#ACTION_DIAL
에 응답하는 애플리케이션은*#*#CODE#*#*
형식의 임의 다이얼러 코드 입력을 지원하고 해당TelephonyManager#ACTION_SECRET_CODE
브로드캐스트를 트리거해야 합니다. - [C-6-4]
Intent#ACTION_DIAL
에 응답하는 애플리케이션은 시각적 음성사서함 텍스트 변환을 지원하는 경우VoicemailContract.Voicemails#TRANSCRIPTION
사용하여 시각적 음성메일 텍스트 변환을 사용자에게 표시해야 합니다. - [C-6-5] SIM 카드 정보를 표시하고 제어하는 모든 사용자에게 표시되는 어포던스에서 동등한 그룹 UUID가 있는 모든 SubscriptionInfo 를 단일 구독으로 나타내야 합니다(MUST). 이러한 어포던스의 예로는
Settings#ACTION_MANAGE_ALL_SIM_PROFILES_SETTINGS
또는EuiccManager#ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS
일치하는 설정 인터페이스가 있습니다. - [C-6-6] SIM 카드 설정의 구성 또는 제어를 허용하는 모든 사용자에게 표시되는 어포던스에서 null이 아닌 그룹 UUID 및 기회적 비트가 있는 SubscriptionInfo의 제어를 표시하거나 허용하면 안 됩니다(MUST NOT).
장치 구현
GSM 또는 CDMA 전화 통신 포함android.hardware.telephony
기능을 보고 하고 시스템 상태 표시줄을 제공한 후 다음을 수행합니다.- [씨-
6-7 -1 ] SIM 상태 정보를 제공하는 모든 어포던스에서 사용자에게 표시할 주어진 그룹 UUID 에 대한 대표 활성 구독을 선택해야 합니다(MUST). 이러한 어포던스의 예로는 상태 표시줄 셀룰러 신호 아이콘 또는 빠른 설정 타일이 있습니다. - [C-SR-1] 기기가 음성 통화 중이 아닌 한 대표 구독을 활성 데이터 구독 으로 선택할 것을 적극 권장합니다(STRONGLY RECOMMENDED). 이 동안 대표 구독이 활성 음성 구독일 것을 적극 권장합니다(STRONGLY RECOMMENDED).
장치 구현
GSM 또는 CDMA 전화 통신 포함android.hardware.telephony
기능을 보고한 후 다음을 수행합니다.- [C-6-
87 ] ETSI TS 102 221에 따라 각 UICC에 대한 논리 채널의 최대 수(총 20개)를 열고 동시에 사용할 수 있어야 합니다(MUST). - [C-6-
108 ] 활성 이동통신사 앱(TelephonyManager#getCarrierServicePackageName
으로 지정됨)에 다음 동작을 자동으로 또는 명시적인 사용자 확인 없이 적용하면 안 됩니다(MUST NOT).- 네트워크 액세스 취소 또는 제한
- 권한 취소
- AOSP에 포함된 기존 전원 관리 기능 이상으로 백그라운드 또는 포그라운드 앱 실행 제한
- 앱 비활성화 또는 제거
장치 구현
GSM 또는 CDMA 전화 통신 포함android.hardware.telephony
기능 및 그룹 UUID를 공유하는 모든 활성 비기회 구독이 비활성화되거나 v기기에서 물리적으로 제거되거나 기회주의로 표시되면 기기가 다음을 수행합니다.- [씨-
78 -1] 동일한 그룹에 남아 있는 모든 활성 기회 구독을 자동으로 비활성화해야 합니다(MUST).
GSM 전화 통신은 포함하지만 CDMA 전화 통신은 포함하지 않는 기기 구현은 다음을 충족해야 합니다.
- [씨-
89 -1]PackageManager#FEATURE_TELEPHONY_CDMA
선언하면 안 됩니다(MUST NOT). - [씨-
89 -2] 선호 또는 허용된 네트워크 유형 비트마스크에서 3GPP2 네트워크 유형을 설정하려는 시도 시IllegalArgumentException
발생시켜야 합니다(MUST). - [씨-
89 -3]TelephonyManager#getMeid
에서 빈 문자열을 반환해야 합니다(MUST).
여러 포트 및 프로필이 있는 eUICC를 지원하는 기기 구현은 다음을 충족해야 합니다.
- [씨-
1110 -1]android.hardware.telephony.euicc.mep
기능 플래그를 선언해야 합니다(MUST).
- [C-6-1]
개정판 보기
기기 구현이802.1.15.4에 대한 지원을 포함하고 타사 애플리케이션에 기능을 노출하는 기기 구현은 다음을 충족해야 합니다.android.content.pm.PackageManager
클래스를 통해android.hardware.uwb
기능에 대한 지원을 보고하는 경우,새로운 요구 사항 시작
- [C-1-1] android.uwb에서 해당 Android API를 구현해야 합니다(MUST).
- [C-1-2] 하드웨어 기능 플래그 android.hardware.uwb를 보고해야 합니다(MUST).
- [C-1-3] Android 구현에 정의된 모든 관련 UWB 프로필을 지원해야 합니다(MUST).
- [C-1-4] 사용자가 UWB 라디오 켜기/끄기 상태를 전환할 수 있도록 사용자 어포던스를 제공해야 합니다(MUST).
- [C-1-5] UWB 라디오를 사용하는 앱이 UWB_RANGING 권한(NEARBY_DEVICES 권한 그룹 아래)을 보유하도록 강제해야 합니다(MUST).
- [C-SR-1] FIRA , CCC , CSA 를 비롯한 표준 조직에서 정의한 관련 적합성 및 인증 테스트를 통과할 것을 적극 권장합니다(STRONGLY RECOMMENDED).
- [C-1-
16 ] 무반사 챔버의 1m 거리에서 가시선 환경에서 측정값의 95%에 대해 거리 측정값이 +/-15cm 이내인지 확인해야 합니다(MUST). - [C-1-
27 ] 참조 장치에서 1m 떨어진 거리 측정의 중앙값이 [0.75m, 1.25m] 이내인지 확인해야 합니다. - [C-SR-2] 존재 보정 요구사항 에 지정된 측정 설정 단계를 따를 것을 적극 권장합니다(STRONGLY RECOMMENDED).
Presence Calibration Requirements 에 지정된 측정 설정 단계를 따를 것을 적극 권장합니다(STRONGLY RECOMMENDED).개정판 보기
Android USB 헤드셋 사양 에 정의된 대로 USB-C 커넥터를 사용하고 Android 에코시스템에서 (USB 오디오 클래스)를 구현하는 헤드셋 및 기타 오디오 액세서리와 호환되기 위해 .
2022년 10월 19일
2. 기기 종류
개정판 보기
휴대기기 구현이 잠금 작업 모드 에서 실행되지 않는 경우 콘텐츠가 클립보드에 복사되면 다음을 수행합니다.
- [3.8.17/H-1-1] 데이터가 클립보드에 복사되었다는 확인을 사용자에게 표시해야 합니다(예: '콘텐츠가 복사됨'이라는 미리보기 이미지 또는 경고). 또한 여기에 클립보드 데이터가 장치 간에 동기화되는지 여부를 표시합니다.
3. 소프트웨어
개정판 보기
기기 구현의 설정 애플리케이션이 활동 임베딩을 사용하여 분할 기능을 구현하는 경우 다음을 충족해야 합니다.
- [C-17-1] 분할 기능이 켜져 있을 때 Settings#ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY 인텐트를 처리하는 활동이 있어야 합니다(MUST). 액티비티는
android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK
에 의해 보호되어야 하며 Settings#EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI 에서 파싱된 인텐트의 액티비티를 시작해야 합니다.
기기 구현이
VoiceInteractionService
를 지원하고 이 API를 사용하는 애플리케이션을 한 번에 두 개 이상 설치하는 경우 다음을 충족해야 합니다.- [C-18-1] 음성 입력 및 지원을 위한 기본 앱 설정 메뉴를 표시하려면
android.settings.ACTION_VOICE_INPUT_SETTINGS
준수해야 합니다(MUST).
- [C-17-1] 분할 기능이 켜져 있을 때 Settings#ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY 인텐트를 처리하는 활동이 있어야 합니다(MUST). 액티비티는
개정판 보기
- [C-1-4] WebView를 인스턴스화하는 애플리케이션과 별개의 프로세스에서 '제공된 콘텐츠 또는 원격 URL 콘텐츠를 렌더링해야 합니다(MUST). 특히 별도의 렌더러 프로세스는 더 낮은 권한을 보유하고 별도의 사용자 ID로 실행되어야 하며 앱의 데이터 디렉토리에 대한 액세스 권한이 없고 직접적인 네트워크 액세스 권한이 없으며 Binder를 통해 필요한 최소 시스템 서비스에만 액세스할 수 있어야 합니다. WebView의 AOSP 구현은 이 요구사항을 충족합니다.
7. 하드웨어 호환성
개정판 보기
IEEE 802.11 표준에 정의된 Wi-Fi 절전 모드 지원을 포함하는 기기 구현은 다음을 충족해야 합니다.
[C-3-1] 필수앱이WifiManager.createWifiLock()
및WifiManager.WifiLock.acquire()
를 통해WIFI_MODE_FULL_HIGH_PERF
잠금 또는WIFI_MODE_FULL_LOW_LATENCY
잠금을 획득할 때마다 Wi-Fi 절전 모드를 꺼야 합니다(SHOULD) .
개정판 보기
저전력 블루투스(BLE) 지원을 포함하는 기기 구현은 다음을 충족해야 합니다.
- [C-3-5] 기기가 스캐닝 또는 광고를 위해 BLE를 적극적으로 사용하는 경우 사용자 개인 정보를 보호하기 위해 15분 이하의 RPA(해결 가능 비공개 주소) 시간 초과를 구현하고 시간 초과 시 주소를 회전해야 합니다(MUST). 타이밍 공격을 방지하기 위해 타임아웃 간격도 5~15분 사이에서 무작위로 지정해야 합니다.
7.5.5 카메라 방향
개정판 보기
기기 구현에 전면 또는 후면 카메라가 있는 경우 이러한 카메라는 다음과 같습니다.
- [C-1-1] 카메라의 긴 치수가 화면의 긴 치수와 정렬되도록 방향을 맞춰야 합니다(MUST). 즉, 기기를 가로 방향으로 잡고 있을 때 카메라는 반드시 가로 방향으로 이미지를 캡처해야 합니다. 이는 장치의 자연스러운 방향에 관계없이 적용됩니다. 즉, 세로 기본 장치뿐만 아니라 가로 기본 장치에도 적용됩니다.
다음 기준을 모두 충족하는 장치는 위의 요구 사항에서 면제됩니다.- 이 장치는 폴더블 또는 힌지 디스플레이와 같은 가변 형상 화면을 구현합니다.
- 장치의 접힘 또는 힌지 상태가 변경되면 장치가 세로 기본 방향에서 가로 기본 방향(또는 그 반대)으로 전환됩니다.
9. 보안 모델 호환성
개정판 보기
기기 구현이 보안 잠금 화면을 지원하는 경우 다음을 충족해야 합니다.
- [C-1-6] IKeymasterDevice 4.0, IKeymasterDevice 4.1, IKeyMintDevice 버전 1 또는 IKeyMintDevice 버전 2를 지원해야 합니다(MUST).
개정판 보기
기기가 Android 가상화 프레임워크 API(
android.system.virtualmachine.*
)에 대한 지원을 구현하는 경우 Android 호스트는 다음을 수행합니다.[C-1-3] 업스트림 Android 오픈소스 프로젝트(AOSP)에서 제공되는 시스템/sepolicy 내에 있는 neverallow 규칙을 수정, 생략 또는 교체하면 안 되며(MUST NOT) 정책은 존재하는 모든 neverallow 규칙으로 컴파일해야 합니다(MUST).
기기가 Android 가상화 프레임워크 API(
android.system.virtualmachine.*
)에 대한 지원을 구현하는 경우 모든 보호된 가상 머신 인스턴스:[C-2-4] 업스트림 Android 오픈소스 프로젝트(AOSP)에서 제공되는 system/sepolicy/microdroid 내에 있는 neverallow 규칙을 수정, 생략 또는 교체하면 안 됩니다(MUST NOT).
기기가 Android 가상화 프레임워크 API에 대한 지원을 구현하는 경우 키 관리에 대해 다음을 수행합니다.
- [C-6-2] DICE를 제대로 수행해야 합니다(즉, 올바른 값을 제공해야 함).
그러나 그 수준의 세부 사항까지 갈 필요는 없을 수도 있습니다.
2022년 8월 15일
2. 기기 종류
2.2.1 하드웨어 : 하드웨어 요구 사항이 다음과 같이 변경됩니다.
입력 장치:
개정판 보기
핸드헬드 장치 구현:
- [ 7.2 .3/H-0-5] 뒤로 제스처가 시작되거나 뒤로 버튼(
KEYCODE_BACK
)이 DOWN으로 눌렸을 때 현재 포커스가 있는 창에서OnBackInvokedCallback.onBackStarted()
호출해야 합니다(MUST). - [ 7.2 .3/H-0-6] 뒤로 제스처가 커밋되거나 뒤로 버튼을 놓을 때(UP)
OnBackInvokedCallback.onBackInvoked()
호출해야 합니다(MUST). - [ 7.2 .3/H-0-7] 뒤로 제스처가 커밋되지 않았거나
KEYCODE_BACK
이벤트가 취소된 경우OnBackInvokedCallback.onBackCancelled()
호출해야 합니다(MUST).
PackageManager.FEATURE_WIFI_AWARE
를 선언하여 WiFi NAN(Neighbor Awareness Networking) 프로토콜을 지원하고PackageManager.FEATURE_WIFI_RTT
선언하여 Wi-Fi 위치(Wi-Fi 왕복 시간 — RTT)를 지원하는 기기는 다음을 충족해야 합니다.[ 7.4 .2.5/H-1-1] 범위를 68번째 백분위수에서 160MHz 대역폭에서 +/-1미터(누적 분포 함수로 계산됨), 80MHz 대역폭에서 +/-2미터 이내로 정확하게 보고해야 합니다(MUST). 68번째 백분위수, 68번째 백분위수에서 40MHz 대역폭에서 +/-4미터, 10cm, 1m, 3m, 5m 거리에서 68번째 백분위수에서 20MHz 대역폭에서 +/-8미터 WifiRttManager#startRanging Android API를 통해 관찰됩니다.
[ 7.4 .2.5/H-SR] 90번째 백분위수(누적 분포 함수로 계산됨)에서 160MHz 대역폭에서 +/-1미터 이내, 80MHz에서 +/-2미터 이내로 범위를 정확하게 보고할 것을 적극 권장합니다(STRONGLY RECOMMENDED). WifiRttManager#startRanging Android API 를 통해 관찰된 대로 90번째 백분위수에서 대역폭, 90번째 백분위수에서 40MHz 대역폭에서 +/-4미터, 10cm 거리에서 90번째 백분위수에서 20MHz 대역폭에서 +/-8미터입니다.
Presence Calibration Requirements 에 지정된 측정 설정 단계를 따를 것을 적극 권장합니다(STRONGLY RECOMMENDED).
- [ 7.2 .3/H-0-5] 뒤로 제스처가 시작되거나 뒤로 버튼(
오디오 대기 시간:
개정판 보기
휴대기기 구현이
android.hardware.audio.output
및android.hardware.microphone
선언하는 경우 다음을 충족해야 합니다.- [ 5.6 /H-1-1] 평균 연속 왕복 대기 시간이 500 이어야 합니다(MUST).
800평균 절대 편차가 50 미만인 5회 측정에서 밀리초 이하100ms, 다음 데이터 경로: "스피커에서 마이크", 3.5mm 루프백 어댑터(지원되는 경우), USB 루프백(지원되는 경우).지원되는 경로가 하나 이상 있습니다.
- [ 5.6 /H-1-1] 스피커에서 마이크까지의 데이터 경로를 통한 최소 5회 측정에서 평균 탭-톤 대기 시간이 500밀리초 이하여야 합니다(MUST).
- [ 5.6 /H-1-1] 평균 연속 왕복 대기 시간이 500 이어야 합니다(MUST).
햅틱 입력:
개정판 보기
햅틱 액추에이터가 하나 이상 포함된 휴대기기 구현은 다음을 충족해야 합니다.
- [ 7.10 /H]* 편심 회전 질량(ERM) 햅틱 액추에이터(진동기)를 사용하면 안 됩니다(SHOULD NOT).
- [ 7.10 /H]* 일반적으로 기기를 손으로 잡거나 만지는 위치 근처에 액추에이터를 배치해야 합니다(SHOULD).
- [ 7.10 /H]* android.view.HapticFeedbackConstants (CLOCK_TICK, CONTEXT_CLICK, KEYBOARD_PRESS, KEYBOARD_RELEASE, KEYBOARD_TAP, LONG_PRESS, TEXT_HANDLE_MOVE, VIRTUAL_KEY, VIRTUAL_KEY_RELEASE, CONFIRM, REJECT, GESTURE_START 및)에서 명확한 햅틱을 위한 모든 공개 상수를 구현해야 합니다(SHOULD).
- [ 7.10 /H]* android.os.VibrationEffect 의 명확한 햅틱을 위한 모든 공개 상수, 즉(EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK 및 EFFECT_DOUBLE_CLICK) 및 android.os.VibrationEffect.Composition 의 풍부한 햅틱 을 위한 모든 실현 가능한 공개
PRIMITIVE_*
상수를 구현해야 합니다(SHOULD).(PRIMITIVE_CLICK 및 PRIMITIVE_TICK)(클릭, 틱, LOW_TICK, QUICK_FALL, QUICK_RISE, SLOW_RISE, SPIN, THUD). LOW_TICK 및 SPIN과 같은 이러한 프리미티브 중 일부는 진동기가 상대적으로 낮은 주파수를 지원할 수 있는 경우에만 실현 가능할 수 있습니다.
- [7.10/H]* 해당 진폭 관계를 사용하여 android.view.HapticFeedbackConstants 의 공개 상수를 권장되는 android.os.VibrationEffect 상수에 매핑하기 위한 지침을 따라야 합니다(SHOULD).
- [ 7.10 /H]* 공개 android.os.Vibrator.hasAmplitudeControl() API의 결과가 진동기의 기능을 올바르게 반영하는지 확인해야 합니다(SHOULD).
- [ 7.10 /H]* android.os.Vibrator.hasAmplitudeControl() 을 실행하여 진폭 확장성의 기능을 확인해야 합니다(SHOULD).
휴대기기 구현에 하나 이상의 선형 공진 액추에이터가 포함된 경우 다음을 충족해야 합니다.
인증 사소한 장치 제어:
개정판 보기
- [ 3.8 .16/H-1-5]
ControlsProviderService
및Control
Control.isAuthRequired
API를 통해 타사 애플리케이션에서 등록한 컨트롤에서 앱 지정 사소한 기기 컨트롤을 옵트아웃할 수 있는 사용자 어포던스를 제공해야 합니다(MUST).
- [ 3.8 .16/H-1-5]
MediaStyle 알림:
개정판 보기
핸드헬드 장치 구현이 MediaStyle 알림을 지원하는 경우:
- [3.8.3.1/H-1-SR] 사용자가 적절한 사용 가능한 미디어 경로(예: Bluetooth 장치 및 MediaRouter2Manager 에 제공된 경로) 간에 전환할 수 있도록 시스템 UI에서 액세스하는 사용자 어포던스(예: "출력 전환기")를 제공할 것을 적극 권장합니다(STRONGLY RECOMMENDED). 앱이 MediaSession 토큰 과 함께 MediaStyle 알림을 게시할 때.
2.2.4 성능 및 성능 : 포그라운드 서비스를 실행하는 앱에 대한 새로운 요구 사항입니다.
개정판 보기
2.2.7.1 미디어 : 휴대용 요구 사항 미디어 섹션이 다음과 같이 업데이트되었습니다.
개정판 보기
휴대기기 구현이
android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS
에 대해android.os.Build.VERSION_CODES.T
반환하는 경우:- [5.1/H-1-1]
CodecCapabilities.getMaxSupportedInstances()
및VideoCapabilities.getSupportedPerformancePoints()
메서드를 통해 모든 코덱 조합에서 동시에 실행할 수 있는 하드웨어 동영상 디코더 세션의 최대 수를 광고해야 합니다(MUST). - [5.1/H-1-2] 1080p 해상도@30fps에서 동시에 실행되는 모든 코덱 조합에서 하드웨어 동영상 디코더 세션(AVC, HEVC, VP9, AV1 이상)의 인스턴스 6개를 지원해야 합니다(MUST).
- [5.1/H-1-3]
CodecCapabilities.getMaxSupportedInstances()
및VideoCapabilities.getSupportedPerformancePoints()
메서드를 통해 모든 코덱 조합에서 동시에 실행할 수 있는 최대 하드웨어 동영상 인코더 세션 수를 광고해야 합니다(MUST). - [5.1/H-1-4] 1080p 해상도@30fps에서 동시에 실행되는 모든 코덱 조합에서 하드웨어 동영상 인코더 세션(AVC, HEVC, VP9, AV1 이상)의 인스턴스 6개를 지원해야 합니다(MUST).
- [5.1/H-1-5]
CodecCapabilities.getMaxSupportedInstances()
및VideoCapabilities.getSupportedPerformancePoints()
메서드를 통해 모든 코덱 조합에서 동시에 실행할 수 있는 최대 하드웨어 동영상 인코더 및 디코더 세션 수를 광고해야 합니다(MUST). - [5.1/H-1-6] 1080p@30fps 해상도에서 동시에 실행되는 모든 코덱 조합에서 하드웨어 동영상 디코더 및 하드웨어 동영상 인코더 세션(AVC, HEVC, VP9, AV1 이상)의 인스턴스 6개를 지원해야 합니다(MUST).
- [5.1/H-1-7] 부하가 있을 때 모든 하드웨어 동영상 인코더의 1080p 이하 동영상 인코딩 세션에 대해 코덱 초기화 지연 시간이 40ms 이하여야 합니다(MUST). 여기서 로드는 1080p 오디오-비디오 녹화 초기화와 함께 하드웨어 비디오 코덱을 사용하는 동시 1080p에서 720p 비디오 전용 트랜스코딩 세션으로 정의됩니다.
- [5.1/H-1-8] 부하가 있을 때 모든 오디오 인코더에 대해 128kbps 이하의 비트 전송률 오디오 인코딩 세션에 대해 코덱 초기화 지연 시간이 30ms 이하여야 합니다(MUST). 여기서 로드는 1080p 오디오-비디오 녹화 초기화와 함께 하드웨어 비디오 코덱을 사용하는 동시 1080p에서 720p 비디오 전용 트랜스코딩 세션으로 정의됩니다.
- [5.1/H-1-9] 1080p 해상도@30fps에서 동시에 실행되는 모든 코덱 조합에서 보안 하드웨어 동영상 디코더 세션(AVC, HEVC, VP9, AV1 이상)의 인스턴스 2개를 지원해야 합니다(MUST).
- [5.1/H-1-10] 모든 코덱에서 보안 하드웨어 비디오 디코더 세션 인스턴스 1개(총 4개 인스턴스)(AVC, HEVC, VP9, AV1 이상)와 함께 비보안 하드웨어 비디오 디코더 세션 인스턴스 3개를 지원해야 합니다(MUST). 1080p resolution@30fps에서 동시에 실행되는 조합.
- [5.1/ H-1-11] 기기의 모든 하드웨어 AVC, HEVC, VP9 또는 AV1 디코더에 보안 디코더를 지원해야 합니다(MUST).
- [5.1/H-1-12] 동영상 디코더 초기화 지연 시간이 40ms 이하여야 합니다(MUST).
- [5.1/H-1-13] 오디오 디코더 초기화 지연 시간이 30ms 이하여야 합니다(MUST).
- [5.1/H-1-14] AV1 하드웨어 디코더 Main 10, Level 4.1을 지원해야 합니다(MUST).
- [5.1/H-SR] AV1 하드웨어 디코더용 Film Grain을 지원하는 것이 좋습니다.
- [5.1/H-1-15] 4K60을 지원하는 하드웨어 동영상 디코더가 1개 이상 있어야 합니다(MUST).
- [5.1/H-1-16] 4K60을 지원하는 하드웨어 동영상 인코더가 1개 이상 있어야 합니다(MUST).
- [5.3/H-1-1] 로드 중인 1080p 60fps 동영상 세션에 대해 10초에 1프레임 이상(즉, 0.167% 미만의 프레임 드롭) 드롭하면 안 됩니다(MUST NOT). 부하는 하드웨어 비디오 코덱과 128kbps AAC 오디오 재생을 사용하는 동시 1080p에서 720p 비디오 전용 트랜스코딩 세션으로 정의됩니다.
- [5.3/H-1-2] 로드 중인 60fps 동영상 세션에서 동영상 해상도가 변경되는 동안 10초에 1프레임 이상 드롭하면 안 됩니다(MUST NOT). 부하는 하드웨어 비디오 코덱과 128kbps AAC 오디오 재생을 사용하는 동시 1080p에서 720p 비디오 전용 트랜스코딩 세션으로 정의됩니다.
- [5.6/H-1-1] OboeTester 탭-톤 테스트 또는 CTS Verifier 탭-톤 테스트를 사용하여 탭-톤 대기 시간이 80밀리초 이하여야 합니다(MUST).
- [5.6/H-1-2] 하나 이상의 지원되는 데이터 경로에서 왕복 오디오 지연 시간이 80밀리초 이하여야 합니다(MUST).
- [5.6/H-1-3] 짧은 지연 시간 및 스트리밍 구성을 위해 전체 데이터 경로를 통해 지원되는 경우 3.5mm 오디오 잭(있는 경우) 및 USB 오디오를 통한 스테레오 출력에 >=24비트 오디오를 지원해야 합니다(MUST). 대기 시간이 짧은 구성의 경우 앱에서 대기 시간이 짧은 콜백 모드로 AAudio를 사용해야 합니다. 스트리밍 구성의 경우 앱에서 Java AudioTrack을 사용해야 합니다. 낮은 대기 시간 및 스트리밍 구성 모두에서 HAL 출력 싱크는 대상 출력 형식에 대해
AUDIO_FORMAT_PCM_24_BIT
,AUDIO_FORMAT_PCM_24_BIT_PACKED
,AUDIO_FORMAT_PCM_32_BIT
또는AUDIO_FORMAT_PCM_FLOAT
중 하나를 수락해야 합니다. - [5.6/H-1-4] 4개 이상의 채널 USB 오디오 기기를 지원해야 합니다(DJ 컨트롤러에서 노래 미리보기에 사용됨).
- [5.6/H-1-5] 클래스 호환 MIDI 기기를 지원하고 MIDI 기능 플래그를 선언해야 합니다(MUST).
- [5.7/H-1-2] 아래 콘텐츠 복호화 기능으로
MediaDrm.SECURITY_LEVEL_HW_SECURE_ALL
지원해야 합니다(MUST).
최소 샘플 크기 4MiB 최소 하위 샘플 수 - H264 또는 HEVC 32 최소 하위 샘플 수 - VP9 9 하위 샘플의 최소 수 - AV1 288 최소 하위 샘플 버퍼 크기 1MiB 최소 일반 암호화 버퍼 크기 500KiB 최소 동시 세션 수 30 세션당 최소 키 수 20 최소 총 키 수(모든 세션) 80 최소 총 DRM 키 수(모든 세션) 6 메시지 크기 16KiB 초당 해독된 프레임 60fps - [5.1/H-1-1]
2.2.7.2 카메라 : 미디어 성능 클래스 카메라 요구 사항 업데이트.
개정판 보기
휴대기기 구현이
android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS
에 대해android.os.Build.VERSION_CODES.T
반환하는 경우:- [7.5/H-1-1] 4k@30fps에서 동영상 캡처를 지원하는 해상도가 최소 12메가픽셀인 기본 후면 카메라가 있어야 합니다(MUST). 기본 후면 카메라는 카메라 ID가 가장 낮은 후면 카메라입니다.
- [7.5/H-1-2] 최소 5메가픽셀 해상도의 기본 전면 카메라가 있어야 하며 1080p@30fps에서 동영상 캡처를 지원해야 합니다(MUST). 기본 전면 카메라는 카메라 ID가 가장 낮은 전면 카메라입니다.
- [7.5/H-1-3] 두 기본 카메라 모두에 대해
android.info.supportedHardwareLevel
속성을FULL
이상으로 지원해야 합니다(MUST). - [7.5/H-1-4] 두 기본 카메라 모두에 대해
CameraMetadata.SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
지원해야 합니다(MUST). - [7.5/H-1-5] 두 기본 카메라의 ITS 조명 조건(3000K)에서 CTS 카메라 PerformanceTest로 측정한 1080p 해상도의 camera2 JPEG 캡처 지연 시간이 1000ms 미만이어야 합니다(MUST).
- [7.5/H-1-6] 두 기본 카메라의 ITS 조명 조건(3000K)에서 CTS 카메라 성능 테스트로 측정한 카메라 2 시작 지연 시간(첫 번째 미리보기 프레임에 카메라 열기)이 500ms 미만이어야 합니다(MUST).
- [7.5/H-1-8] 기본 후면 카메라에 대해
CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_RAW
및android.graphics.ImageFormat.RAW_SENSOR
지원해야 합니다(MUST). - [7.5/H-1-9] 720p 또는 1080p @ 240fps를 지원하는 후면 기본 카메라가 있어야 합니다(MUST).
- [7.5/H-1-10] 동일한 방향을 향하고 있는 초광각 RGB 카메라가 있는 경우 기본 카메라에 대해 최소 ZOOM_RATIO가 1.0 미만이어야 합니다(MUST).
- [7.5/H-1-11] 기본 카메라에서 전면-후면 동시 스트리밍을 구현해야 합니다(MUST).
- [7.5/H-1-12] 기본 전면 및 기본 후면 카메라 모두에 대해
CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION
지원해야 합니다(MUST). - [7.5/H-1-13] 동일한 방향을 향하고 있는 RGB 카메라가 1대보다 많은 경우 기본 카메라에 대한
LOGICAL_MULTI_CAMERA
기능을 지원해야 합니다(MUST). - [7.5/H-1-14] 기본 전면 및 기본 후면 카메라 모두에 대해
STREAM_USE_CASE
기능을 지원해야 합니다(MUST).
2.2.7.3 하드웨어 : 하드웨어에 대한 미디어 성능 클래스 요구 사항 업데이트.
개정판 보기
휴대기기 구현이
android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS
에 대해android.os.Build.VERSION_CODES.T
반환하는 경우:- [7.1.1.1/H-2-1] 화면 해상도가 1080p 이상이어야 합니다(MUST).
- [7.1.1.3/H-2-1] 화면 밀도가 400dpi 이상이어야 합니다(MUST).
- [7.6.1/H-2-1] 물리적 메모리가 8GB 이상이어야 합니다(MUST).
2.2.7.4 성능 : 성능에 대한 미디어 성능 클래스 업데이트.
개정판 보기
휴대기기 구현이
android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS
에 대해android.os.Build.VERSION_CODES.T
반환하는 경우 다음을 충족해야 합니다.- [8.2/H-1-1] 최소 125MB/s의 순차 쓰기 성능을 보장해야 합니다(MUST).
- [8.2/H-1-2] 최소 10MB/s의 임의 쓰기 성능을 보장해야 합니다(MUST).
- [8.2/H-1-3] 최소 250MB/s의 순차 읽기 성능을 보장해야 합니다(MUST).
- [8.2/H-1-4] 최소 40MB/s의 임의 읽기 성능을 보장해야 합니다(MUST).
2.5.1 하드웨어 : 3축 가속도계 및 3축 자이로스코프 요구 사항과 외부 카메라 요구 사항을 업데이트합니다.
개정판 보기
자동차 기기 구현:
- [ 7.3 .1/A-0-4] Android 자동차 센서 좌표계를 준수해야 합니다(MUST).
- [ 7.3 /A-SR] 3축 가속도계와 3축 자이로스코프를 포함할 것을 적극 권장합니다(STRONGLY_RECOMMENDED).
- [ 7.3 /A-SR]
TYPE_HEADING
센서를 구현하고 보고할 것을 STRONGLY_RECOMMENDED합니다(STRONGLY_RECOMMENDED).
가속도계가 포함된 자동차 기기 구현은 다음을 충족해야 합니다.
- [ 7.3 .1/A-1-1] 최소 100Hz의 주파수까지 이벤트를 보고할 수 있어야 합니다(MUST).
3축 가속도계를 포함하는 기기 구현은 다음을 충족해야 합니다.
- [ 7.3 .1/A-SR] 제한된 축 가속도계용 복합 센서를 구현할 것을 적극 권장합니다(STRONGLY RECOMMENDED).
축이 3개 미만인 가속도계가 포함된 자동차 기기 구현은 다음을 충족해야 합니다.
- [ 7.3 .1/A-1-3]
TYPE_ACCELEROMETER_LIMITED_AXES
센서를 구현하고 보고해야 합니다(MUST). - [ 7.3 .1/A-1-4]
TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED
센서를 구현하고 보고해야 합니다(MUST).
자이로스코프를 포함하는 자동차 기기 구현은 다음을 충족해야 합니다.
3축 자이로스코프를 포함하는 자동차 기기 구현은 다음을 충족해야 합니다.
- [ 7.3 .4/A-SR] 제한된 축 자이로스코프용 복합 센서를 구현할 것을 적극 권장합니다(STRONGLY RECOMMENDED).
3축 미만의 자이로스코프를 포함하는 자동차 기기 구현은 다음을 충족해야 합니다.
- [ 7.3 .4/A-4-1]
TYPE_GYROSCOPE_LIMITED_AXES
센서를 구현하고 보고해야 합니다(MUST). - [ 7.3 .4/A-4-2]
TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED
센서를 구현하고 보고해야 합니다(MUST).
TYPE_HEADING
센서를 포함하는 자동차 기기 구현은 다음을 충족해야 합니다.외부 보기 카메라는 후방 카메라 와 같이 장치 구현 외부의 장면을 이미지화하는 카메라입니다.
블랙박스.자동차 기기 구현에 외부 카메라가 포함된 경우 이러한 카메라에 대해 다음을 충족해야 합니다.
[ 7.5 .5/A-SR] 카메라의 긴 치수가 수평선과 정렬되도록 방향을 잡을 것을 적극 권장합니다(STRONGLY RECOMMENDED).Android 동기화 프레임워크를 지원해야 합니다(SHOULD).카메라 드라이버에 하드웨어 자동 초점 또는 소프트웨어 자동 초점이 구현되어 있을 수 있습니다(MAY).
자동차 기기 구현에 하나 이상의 외부 보기 카메라가 포함되고 EVS(Exterior View System) 서비스를 로드하는 경우 이러한 카메라에 대해 다음을 수행해야 합니다.
- [ 7.5 /A-2-1] 카메라 미리보기를 회전하거나 수평 미러링하면 안 됩니다(MUST NOT).
자동차 기기 구현:
- 타사 애플리케이션에서 사용할 수 있는 하나 이상의 카메라를 포함할 수 있습니다(MAY).
자동차 장치 구현에 하나 이상의 카메라가 포함되어 있고 이를 타사 애플리케이션에서 사용할 수 있도록 하는 경우 다음을 충족해야 합니다.
2.5.5 보안 모델 : 자동차 장치의 카메라 권한에 대한 새로운 요구 사항.
개정판 보기
자동차 기기 구현이
android.hardware.camera.any
선언하는 경우 다음을 충족해야 합니다.[ 9.8.2 /A-2-1] 앱이 라이브 카메라 데이터에 액세스할 때 카메라 표시기를 표시해야 합니다(MUST). 섹션 9.1 CDD를 통한 권한 에서 호출된 역할을 보유한 앱에서만 카메라에 액세스하는 경우가 아닌 경우 카메라 표시기를 표시해야 합니다(MUST). 식별자 [C-3-X].
[ 9.8.2 /A-2-2] 가시적인 사용자 인터페이스 또는 직접적인 사용자 상호작용이 있는 시스템 앱의 카메라 표시기를 숨기면 안 됩니다(MUST).
2.6.1 태블릿 요구 사항 — 하드웨어 : 태블릿 화면 크기 요구 사항을 업데이트합니다.
개정판 보기
Android 태블릿 장치는 일반적으로 다음 기준을 모두 충족하는 Android 장치 구현을 나타냅니다.
- 대각선으로 측정한 화면 디스플레이 크기가 7인치 이상 18인치 미만이어야 합니다.
화면 크기
- [ 7.1 .1.1/Tab-0-1] 7~18인치 범위의 화면이 있어야 합니다(MUST).
3. 소프트웨어
3.2.2 빌드 매개변수 :
getSerial()
에서 업데이트된 ASCII 문자.개정판 보기
- [C-0-1] 기기 구현 전체에서 일관되고 의미 있는 값을 제공하기 위해 아래 표에는 기기 구현이 준수해야 하는 이러한 값의 형식에 대한 추가 제한사항이 포함되어 있습니다.
모수 세부 getSerial() 모델 및 제조업체가 동일한 장치에서 사용 가능하고 고유한 하드웨어 일련 번호여야 합니다(또는 반환해야 함). The value of this field MUST be encodable as 7-bit ASCII and match the regular expression “^[a-zA-Z0-9]+$” . 3.2.3.5 Conditional Application Intents : Update to requirements for conditional application intents.
See revision
If device implementations include a large display (generally having display width and height of 600dp+) and supports split functionality , then they:
- [C-17-1] MUST have an activity that handles the Settings#ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY intent when split functionality is on. The Activity MUST be protected by
android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK
and it MUST start the activity of the Intent parsed from Settings#EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI .
- [C-17-1] MUST have an activity that handles the Settings#ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY intent when split functionality is on. The Activity MUST be protected by
3.5.1 Application Restriction : Updates to application restrictions.
See revision
If device implementations implement a proprietary mechanism to restrict apps (eg changing or restricting API behaviors that are described in the SDK) and that mechanism is more restrictive than the Restricted App Standby Bucket , they:
- [C-1-1] MUST allow the user to see the list of restricted apps.
- [C-1-2] MUST provide user affordance to turn on / off all of these proprietary restrictions on each app.
- [C-1-3] MUST not automatically apply these proprietary restrictions without evidence of poor system health behavior, but MAY apply the restrictions on apps upon detection of poor system health behavior like stuck wakelocks, long running services, and other criteria. The criteria MAY be determined by device implementers but MUST be related to the app's impact on the system health. Other criteria that are not purely related to the system health, such as the app's lack of popularity in the market, MUST NOT be used as criteria.
- [C-1-4] MUST not automatically apply these proprietary restrictions for apps when a user has turned off app restrictions manually, and MAY suggest the user to apply these proprietary restrictions.
[C-1-5] MUST inform users if these proprietary restrictions are applied to an app automatically. Such information MUST be provided in the 24-hour period preceding the application of these proprietary restrictions.
[C-1-6] MUST return true for the ActivityManager.isBackgroundRestricted() method for any API calls from an app.
[C-1-7] MUST NOT restrict the top foreground app that is explicitly used by the user.
[C-1-8] MUST suspend these proprietary restrictions on an app whenever a user starts to explicitly use the app, making it the top foreground application.
[C-1-9] MUST report all these proprietary restrictions events via UsageStats.
[C-1-10] MUST provide a public and clear document or website that describes how proprietary restrictions are applied. This document or website MUST be linkable from the Android SDK documents and MUST include:
- Triggering conditions for proprietary restrictions.
- What and how an app can be restricted.
- How an app can be exempted from such restrictions.
- How an app can request an exemption from proprietary restrictions, if they support such an exemption for apps the user can install.
If an app is pre-installed on the device and has never been explicitly used by a user for more than 30 days, [C-1-3] [C-1-5] are exempted.
3.8.1 Launcher (Home Screen) : Updates to support for
monochrome/adaptive-icon
.See revision
If device implementations support monochrome icons, these icons:
- [C-6-1] MUST be used only when a user explicitly enables them (eg via Settings or wallpaper picker menu).
3.8.2 Widgets : Update to third-party app widget presence in the Launcher.
See revision
If device implementations support third-party app widgets, they:
- [C-1-2] MUST include built-in support for AppWidgets and expose user interface affordances to add, configure, view, and remove AppWidgets
directly within the Launcher.
- [C-1-2] MUST include built-in support for AppWidgets and expose user interface affordances to add, configure, view, and remove AppWidgets
3.8.3.1 Presentation of Notifications : Clarifying the definition of heads-up notifications.
See revision
Heads up notifications are notifications that are presented to the user as they come in independently of the surface the user is on.
3.8.3.3 DND (Do not Disturb) / Priority Mode : Update to include Priority Mode in DND (Do Not Disturb) requirements.
See revision
3.8.3.3. DND (Do not Disturb) / Priority Mode
If device implementations support the DND feature (also called Priority Mode), they:
3.8.6 Themes : New requirements for dynamic color tonal palettes.
See revision
If device implementations include a screen or video output, they:
[C-1-4] MUST generate dynamic color tonal palettes as specified in the AOSP documentation of
Settings.THEME_CUSTOMIZATION_OVERLAY_PACKAGES
(seeandroid.theme.customization.system_palette
andandroid.theme.customization.theme_style
).[C-1-5] MUST generate dynamic color tonal palettes using color theme styles enumerated in the
Settings.THEME_CUSTOMIZATION_OVERLAY_PACKAGES
documentation (seeandroid.theme.customization.theme_styles
), namelyTONAL_SPOT
,VIBRANT
,EXPRESSIVE
,SPRITZ
,RAINBOW
,FRUIT_SALAD
."Source color" used to generate dynamic color tonal palettes when sent with
android.theme.customization.system_palette
(as documented inSettings.THEME_CUSTOMIZATION_OVERLAY_PACKAGES
).[C-1-6] MUST have a
CAM16
chroma value of 5 or larger.SHOULD be derived from the wallpaper via
com.android.systemui.monet.ColorScheme#getSeedColors
, which provides multiple valid source colors to pick one from.SHOULD use the value
0xFF1B6EF3
, if none of the provided colors meet the above source color requirement.
3.8.17 Clipboard : Added new requirements section for content on the clipboard.
See revision
3.8.17. Clipboard
Device implementations:
- [C-0-1] MUST NOT send clipboard data to any component, activity, service, or across any network connection, without explicit user action (eg, pressing a button on the overlay), except for services mentioned in 9.8.6 Content Capture and App Search .
If device implementations generate a user-visible preview when content is copied to the clipboard for any
ClipData
item whereClipData.getDescription().getExtras()
containsandroid.content.extra.IS_SENSITIVE
, they:- [C-1-1] MUST redact the user visible preview
The AOSP reference implementation satisfies these clipboard requirements.
3.9.1.1 Device Owner Provisioning : Updates to device owner provisioning requirements.
See revision
If device implementations declare
android.software.device_admin
, they:- [C-1-1] MUST support enrolling a Device Policy Client (DPC) as a Device Owner app as described below:
- When the device implementation has neither users nor user data configured, it:
- [C-1-5] MUST enroll the DPC application as the Device Owner app or enable the DPC app to choose whether to become a Device Owner or a Profile Owner, if the device declares Near-Field Communications (NFC) support via the feature flag
android.hardware.nfc
and receives an NFC message containing a record with MIME typeMIME_TYPE_PROVISIONING_NFC
. - [C-1-8] MUST send the ACTION_GET_PROVISIONING_MODE intent after device owner provisioning is triggered so that the DPC app can choose whether to become a Device Owner or a Profile Owner, depending on the values of
android.app.extra.PROVISIONING_ALLOWED_PROVISIONING_MODES
, unless it can be determined from context that there is only one valid option.(such as for NFC based provisioning where Profile Owner provisioning is not supported). - [C-1-9] MUST send the ACTION_ADMIN_POLICY_COMPLIANCE intent to the Device Owner app if a Device Owner is established during provisioning regardless of the provisioning method used. The user must not be able to proceed in the Setup Wizard until the Device Owner app finishes.
- [C-1-5] MUST enroll the DPC application as the Device Owner app or enable the DPC app to choose whether to become a Device Owner or a Profile Owner, if the device declares Near-Field Communications (NFC) support via the feature flag
- When the device implementation has users or user data, it:
- [C-1-7] MUST not enroll any DPC application as the Device Owner App any more.
- When the device implementation has neither users nor user data configured, it:
- [C-1-2] MUST show an appropriate disclosure notice (such as referenced in AOSP ) and obtain affirmative consent from the end user prior to an app being set as Device Owner, unless the device is programmatically configured for retail demo mode prior to on-screen, end-user interaction.
require some affirmative action before or during the provisioning process to consent to an app being set as Device Owner. Consent can be via user action or by some programmatic means but appropriate disclosure notice (as referenced in AOSP) MUST be shown before device owner provisioning is initiated. Also, the programmatic device owner consent mechanism used (by enterprises) for device owner provisioning MUST NOT interfere with the Out-Of-Box Experience for non-enterprise use. [C-1-3] MUST NOT hard code the consent or prevent the use of other device owner apps.
If device implementations declare
android.software.device_admin
, but also include a proprietaryDevice Ownerdevice management solution and provide a mechanism to promote an application configured in their solution as a "Device Owner equivalent" to the standard "Device Owner" as recognized by the standard Android DevicePolicyManager APIs, they:- [C-2-1] MUST have a process in place to verify that the specific app being promoted belongs to a legitimate enterprise device management solution and has been configured in the proprietary solution to have the rights equivalent as a "Device Owner".
- [C-2-2] MUST show the same AOSP Device Owner consent disclosure as the flow initiated by
android.app.action.PROVISION_MANAGED_DEVICE
prior to enrolling the DPC application as "Device Owner". - [C-2-3] MUST NOT hard code the consent or prevent the use of other device owner apps.
MAY have user data on the device prior to enrolling the DPC application as "Device Owner".
- [C-1-1] MUST support enrolling a Device Policy Client (DPC) as a Device Owner app as described below:
3.9.4 Device Management Role Requirements : Added a section for Device Management Role Requirements.
See revision
3.9.4 Device Policy Management Role Requirements
If device implementations report
android.software.device_admin
orandroid.software.managed_users
, then they:- [C-1-1] MUST support the device policy management role as defined in section 9.1 . The application that holds the device policy management role MAY be defined by setting
config_devicePolicyManagement
to the package name. The package name MUST be followed by:
and the signing certificate unless the application is preloaded.
If a package name is not defined for
config_devicePolicyManagement
as described above:- [C-2-1] Device implementations MUST support provisioning without a device policy management role holder application ( AOSP provides a reference implementation ).
If a package name is defined for
config_devicePolicyManagement
as described above:- [C-3-1] The application MUST be installed on all profiles for a user .
- [C-3-2] Device implementations MAY define an application that updates the device policy management role holder before provisioning by setting
config_devicePolicyManagementUpdater
.
If a package name is defined for
config_devicePolicyManagementUpdater
as described above:- [C-4-1] The application MUST be preinstalled on the device.
- [C-4-2] The application MUST implement an intent filter which resolves
android.app.action.UPDATE_DEVICE_POLICY_MANAGEMENT_ROLE_HOLDER
.
- [C-1-1] MUST support the device policy management role as defined in section 9.1 . The application that holds the device policy management role MAY be defined by setting
3.18 Contacts : Adding information for new contacts.
See revision
Default account for new contacts: Contacts Provider provides APIs to manage the setting of the default account when creating a new contact.
If device implementations preload a contacts app, then the pre-loaded contacts app:
[C-2-1] MUST handle the intent
ContactsContract.Settings.ACTION_SET_DEFAULT_ACCOUNT
to launch a UI for account selection and save the setting to Contacts Provider when an account is selected.[C-2-2] MUST honor the default account setting when handling
Intent.ACTION_INSERT and Intent.ACTION_INSERT_OR_EDIT
for theContactsContracts.Contacts.CONTENT_TYPE
andContactsContract.RawContacts.CONTENT_TYPE
by initially selecting the account.
4. Application Packaging Compatibility
4. Application Packaging Compatibility : Updates to APK Signature Scheme version.
See revision
Device implementations:
[C-0-2] MUST support verifying “.apk” files using the APK Signature Scheme v3.1 , APK Signature Scheme v3 , APK Signature Scheme v2 and JAR signing .
[C-0-9] MUST support verifying .apk files using the APK Signature Scheme v4 and APK Signature Scheme v4.1 .
5. Multimedia Compatibility
5.1.2 Audio Decoding : Added new requirements for decoders capable of outputting mutli-channel audio.
See revision
If device implementations support the decoding of AAC input buffers of multichannel streams (ie more than two channels) to PCM through the default AAC audio decoder in the
android.media.MediaCodec
API, then the following MUST be supported:- [C-7-1] MUST be able to be configured by the application using the decoding with the key
KEY_MAX_OUTPUT_CHANNEL_COUNT
to control whether the content is downmixed to stereo (when using a value of 2) or is output using the native number of channels (when using a value equal or greater to that number). For instance a value of 6 or greater would configure a decoder to output 6 channels when fed 5.1 content. - [C-7-2] When decoding, the decoder MUST advertise the channel mask being used on the output format with the
KEY_CHANNEL_MASK
key, using theandroid.media.AudioFormat
constants (example:CHANNEL_OUT_5POINT1
).
If device implementations support audio decoders other than the default AAC audio decoder and are capable of outputting multi-channel audio (ie more than 2 channels) when fed compressed multi-channel content, then:
- [C-SR] The decoder is STRONGLY RECOMMENDED to be able to be configured by the application using the decoding with the key
KEY_MAX_OUTPUT_CHANNEL_COUNT
to control whether the content is downmixed to stereo (when using a value of 2) or is output using the native number of channels (when using a value equal or greater to that number). For instance a value of 6 or greater would configure a decoder to output 6 channels when fed 5.1 content. - [C-SR] When decoding, the decoder is STRONGLY RECOMMENDED to advertise the channel mask being used on the output format with the
KEY_CHANNEL_MASK
key, using the android.media.AudioFormat constants (example:CHANNEL_OUT_5POINT1
).
- [C-7-1] MUST be able to be configured by the application using the decoding with the key
5.4.1 Raw Audio Capture and Microphone Information : Updates to supported audio sources for audio input streams.
See revision
If device implementations declare
android.hardware.microphone
, they:[C-1-1] MUST allow capture of raw audio content with the following characteristics for any
AudioRecord
orAAudio
INPUT stream that is opened successfully. At a minimum, the following characteristics MUST be supported :- Format: Linear PCM, 16-bit
- Sampling rates: 8000, 11025, 16000, 44100, 48000 Hz
- Channels: Mono
- Audio Sources:
DEFAULT
,MIC
,CAMCORDER
,VOICE_RECOGNITION
,VOICE_COMMUNICATION
,UNPROCESSED
, orVOICE_PERFORMANCE
. This also applies to the equivalent Input Presets inAAudio
, for example,AAUDIO_INPUT_PRESET_CAMCORDER
. - [C-1-4] MUST honor the
MicrophoneInfo
API and properly fill in information for the available microphones on device accessible to the third-party applications via theAudioManager.getMicrophones()
API, for active AudioRecord usingMediaRecorder.AudioSources DEFAULT
,MIC
,CAMCORDER
,VOICE_RECOGNITION
,VOICE_COMMUNICATION
,UNPROCESSED
, orVOICE_PERFORMANCE
.and the currently active microphones which are accessible to the third party applications via theAudioRecord.getActiveMicrophones()
andMediaRecorder.getActiveMicrophones()
APIs.
5.4.2 Capture for Voice Recognition : Updated requirements for voice recognition audio stream and added requirements for microphone gain levels.
See revision
If device implementations declare
android.hardware.microphone
, they:- SHOULD record the voice recognition audio stream with approximately flat amplitude versus frequency characteristics: specifically, ±3 dB, from 100 Hz to 4000 Hz.
- SHOULD record the voice recognition audio stream with input sensitivity set such that a 90 dB sound power level (SPL) source at 1000 Hz yields RMS of 2500 for 16-bit samples.
- SHOULD exhibit approximately flat amplitude-versus-frequency characteristics in the mid-frequency range: specifically ±3dB from 100 Hz to 4000 Hz for each and every microphone used to record the voice recognition audio source.
- [C-SR] are STRONGLY RECOMMENDED to exhibit amplitude levels in the low frequency range: specifically from ±20 dB from 30 Hz to 100 Hz compared to the mid-frequency range for each and every microphone used to record the voice recognition audio source.
- [C-SR] are STRONGLY RECOMMENDED to exhibit amplitude levels in the high frequency range: specifically from ±30 dB from 4000 Hz to 22 KHz compared to the mid-frequency range for each and every microphone used to record the voice recognition audio source.
- SHOULD set audio input sensitivity such that a 1000 Hz sinusoidal tone source played at 90 dB Sound Pressure Level (SPL) (measured next to the microphone) yields an ideal response of RMS 2500 within a range of 1770 and 3530 for 16 bit-samples (or -22.35 db ±3dB Full Scale for floating point/double precision samples) for each and every microphone used to record the voice recognition audio source.
5.4.6 Microphone Gain Levels : Moved requirements for Microphone Gain Levels to section 5.4.2.
See revision
5.4.6. Microphone Gain Levels [Moved to 5.4.2]
If device implementations declare
android.hardware.microphone
, they:- SHOULD exhibit approximately flat amplitude-versus-frequency characteristics in the mid-frequency range: specifically ±3dB from 100 Hz to 4000 Hz for each and every microphone used to record the voice recognition audio source.
- [C-SR] are STRONGLY RECOMMENDED to exhibit amplitude levels in the low frequency range: specifically from ±20 dB from 5 Hz to 100 Hz compared to the mid-frequency range for each and every microphone used to record the voice recognition audio source.
- [C-SR] are STRONGLY RECOMMENDED to exhibit amplitude levels in the high frequency range: specifically from ±30 dB from 4000 Hz to 22 KHz compared to the mid-frequency range for each and every microphone used to record the voice recognition audio source.
- SHOULD set audio input sensitivity such that a 1000 Hz sinusoidal tone source played at 90 dB Sound Pressure Level (SPL) yields a response with RMS of 2500 for 16 bit-samples (or -22.35 dB Full Scale for floating point/double precision samples) for each and every microphone used to record the voice recognition audio source.
5.5.4 Audio Offload : Updates to the audio offload playback requirements.
See revision
If device implementations support audio offload playback , they:
- [C-SR] Are STRONGLY RECOMMENDED to trim the played gapless audio content between two clips with the same format when specified by the AudioTrack gapless API and the media container for MediaPlayer.
5.6 Audio Latency : Updates to the audio latency requirements.
See revision
For the purposes of this section, use the following definitions:
- cold output jitter . The variability among separate measurements of cold output latency values.
- cold input jitter . The variability among separate measurements of cold input latency values.
If device implementations declare
android.hardware.audio.output
, they MUST meet or exceed the following requirements:- [C-1-2] Cold output latency of 500 milliseconds or less.
- [C-1-3] Opening an output stream using
AAudioStreamBuilder_openStream()
MUST take less than 1000 milliseconds.
If device implementations declare
android.hardware.audio.output
they are STRONGLY RECOMMENDED to meet or exceed the following requirements:- [C-SR] Cold output latency of 100 milliseconds or less over the speaker data path.
Existing and new devices that run this version of Android are VERY STRONGLY RECOMMENDED to meet these requirements now. In a future platform release, we will require Cold output latency of 200 ms or less as a MUST. [C-SR] Minimize the cold output jitter.
If device implementations include
android.hardware.microphone
, they MUST meet these input audio requirements:- [C-3-2] Cold input latency of 500 milliseconds or less.
- [C-3-3] Opening an input stream using
AAudioStreamBuilder_openStream()
MUST take less than 1000 milliseconds.
If device implementations include
android.hardware.microphone
, they are STRONGLY RECOMMENDED to meet these input audio requirements:- [C-SR] Cold input latency of 100 milliseconds or less over the microphone data path.
Existing and new devices that run this version of Android are VERY STRONGLY RECOMMENDED to meet these requirements now. In a future platform release we will require Cold input latency of 200 ms or less as a MUST.
- [C-SR] Continuous input latency of 30 milliseconds or less.
- [C-SR] Minimize the cold input jitter.
5.10 Professional Audio : Updates to audio latency requirements for professional audio support.
See revision
If device implementations report support for feature
android.hardware.audio.pro
via the android.content.pm.PackageManager class, they:- [C-1-2] MUST have the continuous round-trip audio latency, as defined in section 5.6 Audio Latency of 25 milliseconds or less
and SHOULD be 10 milliseconds or lessover at least one supported path. - [C-1-5] MUST meet latencies and USB audio requirements using the AAudio native audio API and
AAUDIO_PERFORMANCE_MODE_LOW_LATENCY
. - [C-1-8] MUST have an average Tap-to-tone latency of 80 milliseconds or less over at least 5 measurements over the speaker to microphone data path.
- [C-SR] Are STRONGLY RECOMMENDED to provide a consistent level of CPU performance while audio is active and CPU load is varying. This should be tested using the Android app SynthMark . SynthMark uses a software synthesizer running on a simulated audio framework that measures system performance. See the SynthMark documentation for an explanation of the benchmarks. The SynthMark app needs to be run using the “Automated Test” option and achieve the following results: * voicemark.90 >= 32 voices * latencymark.fixed.little <= 15 msec * latencymark.dynamic.little <= 50 msec
SHOULD have a latency from touch input to audio output of less than or equal to 40 ms.
If device implementations include a 4 conductor 3.5mm audio jack, they:
- [C-2-1] MUST have a mean Continuous Round-trip Audio Latency, as defined in section 5.6 Audio Latency , of 20 milliseconds or less, over 5 measurements with a Mean Absolute Deviation less than 5 milliseconds over the audio jack path using an audio loopback dongle .
- [C-1-2] MUST have the continuous round-trip audio latency, as defined in section 5.6 Audio Latency of 25 milliseconds or less
5.12 HDR Video : Added a new section for HDR Video requirements.
6. Developer Tools and Options Compatibility
6.1 Developer Tools : Updates to connectivity and GPU Kernel requirements.
See revision
If device implementations support adb connections to a host machine via Wi-Fi or Ethernet , they:
- [C-4-1] MUST have the
AdbManager#isAdbWifiSupported()
method returntrue
.
If device implementations support adb connections to a host machine via Wi-Fi or Ethernet , and includes at least one camera, they:
- [C-5-1] MUST have the
AdbManager#isAdbWifiQrSupported()
method returntrue
.
GPU work information
Device implementations:
- [C-6-1] MUST implement the shell command
dumpsys gpu --gpuwork
to display the aggregated GPU work data returned by thepower/gpu_work_period
kernel tracepoint, or display no data if the tracepoint is not supported. The AOSP implementation isframeworks/native/services/gpuservice/gpuwork/
.
- [C-6-1] MUST implement the shell command
- [C-4-1] MUST have the
7. Hardware Compatibility
7.1.4.1 OpenGL ES : Update to recommended extensions.
See revision
If device implementations support any of the OpenGL ES versions, they:
- SHOULD support the
EGL_IMG_context_priority
andEGL_EXT_protected_content
extensions.
- SHOULD support the
7.1.4.2 Vulkan : Updates to version supported for Vulkan.
See revision
If device implementations support OpenGL ES 3.1, they:
- [SR] Are STRONGLY RECOMMENDED to include support for Vulkan 1.3 .
Vulkan 1.1 - MUST NOT support a Vulkan Variant version (ie the variant part of the Vulkan core version MUST be zero).
If device implementations include a screen or video output, they:
- [SR] Are STRONGLY RECOMMENDED to include support for Vulkan 1.3 .
Vulkan 1.1
If device implementations include support for Vulkan 1.0 or higher, they:
- SHOULD support
VkPhysicalDeviceProtectedMemoryFeatures
andVK_EXT_global_priority
. - [C-1-12] MUST NOT enumerate support for the
VK_KHR_performance_query
extension. - [C-SR] Are STRONGLY RECOMMENDED to satisfy the requirements specified by the Android Baseline 2021 profile.
- [SR] Are STRONGLY RECOMMENDED to include support for Vulkan 1.3 .
7.2.3 Navigation Keys :
See revision
Device implementations:
- [C-SR] Are STRONGLY RECOMMENDED to provide all navigation functions as cancellable. 'Cancellable' is defined as the user's ability to prevent the navigation function from executing (eg going home, going back, etc.) if the swipe is not released past a certain threshold.
If the back navigation function is provided and the user cancels the Back gesture, then:
- [C-8-1]
OnBackInvokedCallback.onBackCancelled()
MUST be called. - [C-8-2]
OnBackInvokedCallback.onBackInvoked()
MUST NOT be called. - [C-8-3] KEYCODE_BACK event MUST NOT be dispatched.
If the back navigation function is provided but the foreground application does NOT have an
OnBackInvokedCallback
registered, then:- The system SHOULD provide an animation for the foreground application that suggests that the user is going back, as provided in AOSP.
If device implementations provide support for the system API
setNavBarMode
to allow any system app withandroid.permission.STATUS_BAR
permission to set the navigation bar mode, then they:- [C-9-1] MUST provide support for kid-friendly icons or button-based navigation as provided in the AOSP code.
7.3.1 Accelerometer : Updates to sensor requirements for accelerometers.
See revision
If device implementations include an accelerometer,
a 3-axis accelerometer,they:[C-1-2] MUST implement and reportTYPE_ACCELEROMETER
sensor.[SR] are STRONGLY RECOMMENDED to implement theTYPE_SIGNIFICANT_MOTION
composite sensor.[SR] are STRONGLY RECOMMENDED to implement and reportTYPE_ACCELEROMETER_UNCALIBRATED
sensor. Android devices are STRONGLY RECOMMENDED to meet this requirement so they will be able to upgrade to the future platform release where this might become REQUIRED.SHOULD implement theTYPE_SIGNIFICANT_MOTION
,TYPE_TILT_DETECTOR
,TYPE_STEP_DETECTOR
,TYPE_STEP_COUNTER
composite sensors as described in the Android SDK document.
If device implementations include a 3-axis accelerometer, they:
- [C-2-1] MUST implement and report
TYPE_ACCELEROMETER
sensor. - [C-SR] Are STRONGLY RECOMMENDED to implement the
TYPE_SIGNIFICANT_MOTION
composite sensor. - [C-SR] Are STRONGLY RECOMMENDED to implement and report
TYPE_ACCELEROMETER_UNCALIBRATED
sensor. Android devices are STRONGLY RECOMMENDED to meet this requirement so they will be able to upgrade to the future platform release where this might become REQUIRED. - SHOULD implement the
TYPE_SIGNIFICANT_MOTION
,TYPE_TILT_DETECTOR
,TYPE_STEP_DETECTOR
,TYPE_STEP_COUNTER
composite sensors as described in the Android SDK document.
If device implementations include an accelerometer with less than 3 axes, they:
- [C-3-1] MUST implement and report
TYPE_ACCELEROMETER_LIMITED_AXES
sensor. - [C-SR] Are STRONGLY_RECOMMENDED to implement and report
TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED
sensor.
If device implementations include a 3-axis accelerometer and any of the
TYPE_SIGNIFICANT_MOTION
,TYPE_TILT_DETECTOR
,TYPE_STEP_DETECTOR
,TYPE_STEP_COUNTER
composite sensors are implemented:- [C-4-1] The sum of their power consumption MUST always be less than 4 mW.
If device implementations include a 3-axis accelerometer and a 3-axis gyroscope sensor, they:
- [C-5-1] MUST implement the
TYPE_GRAVITY
andTYPE_LINEAR_ACCELERATION
composite sensors.
If device implementations include a 3-axis accelerometer, a 3-axis gyroscope sensor, and a magnetometer sensor, they:
- [C-6-1] MUST implement a
TYPE_ROTATION_VECTOR
composite sensor.
7.3.4 Gyroscopes : Updates to sensor requirements for gyroscopes.
See revision
If device implementations include a gyroscope, they:
- [C-1-1] MUST be able to report events up to a frequency of at least 50 Hz.
- [C-1-4] MUST have a resolution of 12-bits or more.
- [C-1-5] MUST be temperature compensated.
- [C-1-6] MUST be calibrated and compensated while in use, and preserve the compensation parameters between device reboots.
- [C-1-7] MUST have a variance no greater than 1e-7 rad^2 / s^2 per Hz (variance per Hz, or rad^2 / s). The variance is allowed to vary with the sampling rate, but MUST be constrained by this value. In other words, if you measure the variance of the gyro at 1 Hz sampling rate it SHOULD be no greater than 1e-7 rad^2/s^2.
- [C-SR] Calibration error is STRONGLY RECOMMENDED to be less than 0.01 rad/s when device is stationary at room temperature.
- [C-SR] Are STRONGLY RECOMMENDED to have a resolution of 16-bits or more.
- SHOULD report events up to at least 200 Hz.
If device implementations include a 3-axis gyroscope, they:
- [C-2-1] MUST implement the
TYPE_GYROSCOPE
sensor.
If device implementations include a gyroscope with less than 3 axes, they:
- [C-3-1] MUST implement and report
TYPE_GYROSCOPE_LIMITED_AXES
sensor. - [C-SR] Are STRONGLY_RECOMMENDED to implement and report
TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED
sensor.
If device implementations include a 3-axis gyroscope, an accelerometer sensor and a magnetometer sensor, they:
- [C-4-1] MUST implement a
TYPE_ROTATION_VECTOR
composite sensor.
If device implementations include a 3-axis accelerometer and a 3-axis gyroscope sensor, they:
- [C-5-1] MUST implement the
TYPE_GRAVITY
andTYPE_LINEAR_ACCELERATION
composite sensors.
7.3.10 Biometric Sensors : Updates to sensor requirements for biometric sensors.
See revision
Biometric sensors can be classified as Class 3 (formerly Strong ), Class 2 (formerly Weak ), or Class 1 (formerly Convenience ) based on their spoof and imposter acceptance rates, and on the security of the biometric pipeline. This classification determines the capabilities the biometric sensor has to interface with the platform and with third-party applications. Sensors need to meet additional requirements as detailed below if they wish to be classified as either Class 1 , Class 2 or Class 3 .
Sensors are classified as Class 1 by default, and need to meet additional requirements as detailed below if they wish to be classified as either Class 2 or Class 3 . Both Class 2 and Class 3 biometrics get additional capabilities as detailed below.If device implementations wish to treat a biometric sensor as Class 1 (formerly Convenience ), they:
- [C-1-11] MUST have a spoof and imposter acceptance rate not higher than 30%, with (1) a spoof and imposter acceptance rate for Level A presentation attack instrument (PAI) species not higher than 30%, and (2) a spoof and imposter acceptance rate of Level B PAI species not higher than 40%, as measured by the Android Biometrics Test Protocols.
If device implementations wish to treat a biometric sensor as Class 2 (formerly Weak ), they:
- [C-2-2] MUST have a spoof and imposter acceptance rate not higher than 20%, with (1) a spoof and imposter acceptance rate for Level A presentation attack instrument (PAI) species not higher than 20%, and (2) a spoof and imposter acceptance rate of Level B PAI species not higher than 30%, as measured by the Android Biometrics Test Protocols .
If device implementations wish to treat a biometric sensor as Class 3 (formerly Strong ), they:
- [C-3-3] MUST have a spoof and imposter acceptance rate not higher than 7%, with (1) a spoof and imposter acceptance rate for Level A presentation attack instrument (PAI) species not higher than 7%, and (2) a spoof and imposter acceptance rate of Level B PAI species not higher than 20%, as measured by the Android Biometrics Test Protocols .
7.3.13 IEEE 802.1.15.4 (UWB) : Added a new requirements section for UWB.
See revision
7.3.13. IEEE 802.1.15.4 (UWB)
If device implementations include support for 802.1.15.4 and expose the functionality to a third-party application, they:
- [C-1-1] MUST implement the corresponding Android API in android.uwb.
- [C-1-2] MUST report the hardware feature flag android.hardware.uwb.
- [C-1-3] MUST support all the relevant UWB profiles defined in Android implementation.
- [C-1-4] MUST provide a user affordance to allow the user to toggle the UWB radio on/off state.
- [C-1-5] MUST enforce that apps using UWB radio hold UWB_RANGING permission (under NEARBY_DEVICES permission group).
- [C-1-6] Are STRONGLY RECOMMENDED to pass the relevant conformance and certification tests defined by standard organizations, including FIRA , CCC and CSA .
7.4.1 Telephony : Updates to telephony requirements for GSM and CDMA telephony, and cellular usage settings.
See revision
If device implementations support eUICCs or eSIMs/embedded SIMs and include a proprietary mechanism to make eSIM functionality available for third-party developers, they:
- [C-3-1] MUST declare the
android.hardware.telephony.euicc
feature flag.provide a complete implementation of theEuiccManager API
.
If device implementations include GSM or CDMA telephony, then:
- [C-6-1] The
SmsManager#sendTextMessage
andSmsManager#sendMultipartTextMessage
MUST result in corresponding calls toCarrierMessagingService
for providing text messaging functionality.SmsManager#sendMultimediaMessage
andSmsManager#downloadMultimediaMessage
MUST result in corresponding calls toCarrierMessagingService
for providing multimedia messaging functionality. - [C-6-2] The application designated by
android.provider.Telephony.Sms#getDefaultSmsPackage
MUST use SmsManager APIs when sending and receiving SMS and MMS messages. The AOSP reference implementation in packages/apps/Messaging meets this requirement. - [C-6-3] The application which responds to
Intent#ACTION_DIAL
MUST support entry of arbitrary dialer codes formatted as*#*#CODE#*#*
and trigger a correspondingTelephonyManager#ACTION_SECRET_CODE
broadcast. - [C-6-4] The application which responds to
Intent#ACTION_DIAL
MUST useVoicemailContract.Voicemails#TRANSCRIPTION
to display visual voicemail transcription to users if it supports visual voicemail transcriptions. - [C-6-5] MUST represent all SubscriptionInfo with equivalent group UUIDs as a single subscription in all user-visible affordances that display and control SIM card information. Examples of such affordances include settings interfaces that match
Settings#ACTION_MANAGE_ALL_SIM_PROFILES_SETTINGS
orEuiccManager#ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS
. - [C-6-6] MUST NOT display or allow control of any SubscriptionInfo with a non-null group UUID and opportunistic bit in any user-visible affordances that allow configuration or control of SIM card settings.
If the device device implementations include GSM or CDMA telephony and provide a system status bar, then:
- [C-6-7] MUST select a representative active subscription for a given group UUID to display to the user in any affordances that provide SIM status information. Examples of such affordances include the status bar cellular signal icon or quick settings tile.
- [C-SR] It is STRONGLY RECOMMENDED that the representative subscription is chosen to be the active data subscription unless the device is in a voice call, during which it is STRONGLY RECOMMENDED that the representative subscription is the active voice subscription.
If device implementations include GSM or CDMA telephony, then:
- [C-6-8] MUST be capable of opening and concurrently utilizing the maximum number of logical channels (20 in total) for each UICC per ETSI TS 102 221.
- [C-6-10] MUST NOT apply any of the following behaviors to active carrier apps (as designated by
TelephonyManager#getCarrierServicePackageName
) automatically or without explicit user confirmation:- Revoke or limit network access
- Revoke permissions
- Restrict background or foreground app execution beyond the existing power management features included in AOSP
- Disable or uninstall the app
If device device implementations include GSM or CDMA telephony and all active, non-opportunistic subscriptions that share a group UUID are disabled, physically removed from the device, or marked opportunistic, then the device:
- [C-7-1] MUST automatically disable all remaining active opportunistic subscriptions in the same group.
If device implementations include GSM telephony but not CDMA telephony, they:
- [C-8-1] MUST NOT declare
PackageManager#FEATURE_TELEPHONY_CDMA
. - [C-8-2] MUST throw an
IllegalArgumentException
upon attempts to set any 3GPP2 network types in preferred or allowed network type bitmasks. - [C-8-3] MUST return an empty string from
TelephonyManager#getMeid
.
If the device implementations support eUICCs with multiple ports and profiles, they:
- [C-11-1] MUST declare the
android.hardware.telephony.euicc.mep
feature flag.
- [C-3-1] MUST declare the
7.4.1.1 Number Blocking Compatibility : Updates to the number blocking requirements.
See revision
If device implementations report the
android.hardware.telephony feature
, they:- [C-1-4] MUST NOT write to the platform call log provider for a blocked call.
- [C-1-4] MUST write to the platform call log provider for a blocked call and MUST filter calls with
BLOCKED_TYPE
out of the default call log view in the pre-installed dialer app. - SHOULD provide a user affordance to show blocked calls in the pre-installed dialer app.
7.4.1.3 Cellular NAT-T Keepalive Offload : New section for Cellular NAT-T Keepalive Offload.
See revision
7.4.1.3. Cellular NAT-T Keepalive Offload
Device implementations:
- SHOULD include support for Cellular keepalive offload.
If device implementations include support for Cellular keepalive offload and exposes the functionality to third-party apps, they:
- [C-1-1] MUST support the SocketKeepAlive API.
- [C-1-2] MUST support at least one concurrent keepalive slot over cellular.
- [C-1-3] MUST support as many concurrent cellular keepalive slots as are supported by the Cellular Radio HAL.
- [C-SR] Are STRONGLY RECOMMENDED to support at least three cellular keepalive slots per radio instance.
If device implementations do not include support for cellular keepalive offload, they:
- [C-2-1] MUST return ERROR_UNSUPPORTED.
7.4.2.5 Wi-Fi Location (Wi-Fi Round Trip Time - RTT) : Updates to Wi-Fi location accuracy.
See revision
If device implementations include support for Wi-Fi Location and expose the functionality to third-party apps, then they:
- [C-1-4] MUST be accurate to within 2 meters at 80 MHz bandwidth at the 68th percentile (as calculated with the Cumulative Distribution Function).
- [C-SR] Are STRONGLY RECOMMENDED to report it accurately to within 1.5 meters at 80 MHz bandwidth at the 68th percentile (as calculated with the Cumulative Distribution Function).
7.4.2.6 Wi-Fi Keepalive Offload : Updated to add cellular keepalive offload requirements.
See revision
Device implementations:
- SHOULD include support for Wi-Fi keepalive offload.
If device implementations include support for Wi-Fi keepalive offload and expose the functionality to third-party apps, they:
- [C-1-1] MUST support the SocketKeepAlive API.
- [C-1-2] MUST support at least three concurrent keepalive slots over Wi-Fi
and at least one keepalive slot over cellular.If device implementations do not include support for Wi-Fi keepalive offload, they:
- [C-2-1] MUST return
ERROR_UNSUPPORTED
.
7.4.2.9 Trust On First Use (TOFU) : Added Trust on First Use requirements section.
See revision
7.4.2.9 Trust On First Use (TOFU)
If device implementations support Trust on first usage (TOFU) and allow the user to define WPA/WPA2/WPA3-Enterprise configurations, then they:
- [C-4-1] MUST provide the user an option to select to use TOFU.
7.4.3 Bluetooth : Update to Bluetooth requirements.
See revision
If device implementations support Bluetooth Audio profile, they:
- SHOULD support Advanced Audio Codecs and Bluetooth Audio Codecs (eg LDAC) with A2DP.
If device implementations return
true
for theBluetoothAdapter.isLeAudioSupported()
API, then they:- [C-7-1] MUST support unicast client.
- [C-7-2] MUST support 2M PHY.
- [C-7-3] MUST support LE Extended advertising.
- [C-7-4] MUST support at least 2 CIS connections in a CIG.
- [C-7-5] MUST enable BAP unicast client, CSIP set coordinator, MCP server, VCP controller, CCP server simultaneously.
- [C-SR] Are STRONGLY RECOMMENDED to enable HAP unicast client.
If device implementations return
true
for theBluetoothAdapter.isLeAudioBroadcastSourceSupported()
API, then they:- [C-8-1] MUST support at least 2 BIS links in a BIG.
- [C-8-2] MUST enable BAP broadcast source, BAP broadcast assistant simultaneously.
- [C-8-3] MUST support LE Periodic advertising.
If device implementations return
true
for theBluetoothAdapter.isLeAudioBroadcastAssistantSupported()
API, then they:- [C-9-1] MUST support PAST (Periodic Advertising Sync Transfer).
- [C-9-2] MUST support LE Periodic advertising.
If device implementations declare
FEATURE_BLUETOOTH_LE
, they:- [C-10-1] MUST have RSSI measurements be within +/-9dB for 95% of the measurements at 1m distance from a reference device transmitting at
ADVERTISE_TX_POWER_HIGH
in line of sight environment. - [C-10-2] MUST include Rx/Tx corrections to reduce per-channel deviations so that the measurements on each of the 3 channels, on each of the antennas (if multiple are used), are within +/-3dB of one another for 95% of the measurements.
- [C-SR] Are STRONGLY RECOMMENDED to measure and compensate for Rx offset to ensure the median BLE RSSI is -60dBm +/-10 dB at 1m distance from a reference device transmitting at
ADVERTISE_TX_POWER_HIGH
, where devices are oriented such that they are on 'parallel planes' with screens facing the same direction. - [C-SR] Are STRONGLY RECOMMENDED to measure and compensate for Tx offset to ensure the median BLE RSSI is -60dBm +/-10 dB when scanning from a reference device positioned at 1m distance and transmitting at
ADVERTISE_TX_POWER_HIGH
, where devices are oriented such that they are on 'parallel planes' with screens facing the same direction.
Presence Calibration Requirements 에 지정된 측정 설정 단계를 따를 것을 적극 권장합니다(STRONGLY RECOMMENDED).
If device implementations support Bluetooth version 5.0, then they:
- [C-SR] Are STRONGLY RECOMMENDED to provide support for:
- LE 2M PHY
- LE Codec PHY
- LE Advertising Extension
- Periodic advertising
- At least 10 advertisement sets
- At least 8 LE concurrent connections. Each connection can be in either connection topology roles.
- LE Link Layer Privacy
- A "resolving list" size of at least 8 entries
7.4.9 UWB : Added a requirements section for UWB hardware.
See revision
7.4.9. UWB
If device implementations report support for feature
android.hardware.uwb
via theandroid.content.pm.PackageManager
class, then they:- [C-1-1] MUST ensure the distance measurements are within +/-15 cm for 95% of the measurements in the line of sight environment at 1m distance in a non-reflective chamber.
- [C-1-2] MUST ensure that the median of the distance measurements at 1m from the reference device is within [0.75m, 1.25m], where ground truth distance is measured from the top edge of the DUT held face up and tilted 45 degrees.
Presence Calibration Requirements 에 지정된 측정 설정 단계를 따를 것을 적극 권장합니다(STRONGLY RECOMMENDED).
7.5 Cameras : Updates to the requirements for HDR 10-bit output capability.
See revision
If device implementations support HDR 10-bit output capability, then they:
- [C-2-1] MUST support at least the HLG HDR profile for every camera device that supports 10-bit output.
- [C-2-2] MUST support 10-bit output for either the primary rear-facing or the primary front-facing camera.
- [C-SR] Are STRONGLY RECOMMENDED to support 10-bit output for both primary cameras.
- [C-2-3] MUST support the same HDR profiles for all BACKWARD_COMPATIBLE-capable physical sub-cameras of a logical camera, and the logical camera itself.
For Logical camera devices which support 10-bit HDR that implement the
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
API, they:- [C-3-1] MUST support switching between all the backwards-compatible physical cameras via the
CONTROL_ZOOM_RATIO
control on the logical camera.
7.7.2 USB Host Mode : Revisions for dual role ports.
See revision
If device implementations include a USB port supporting host mode and USB Type-C, they:
- [C-4-1] MUST implement Dual Role Port functionality as defined by the USB Type-C specification (section 4.5.1.3.3). For Dual Role Ports, On devices that include a 3.5mm audio jack, the USB sink detection (host mode) MAY be off by default but it MUST be possible for the user to enable it.
7.11 Media Performance Class : Updated to include Android T.
See revision
If device implementations return non-zero value for
android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS
, they:- [C-1-3] MUST meet all requirements for "Media Performance Class" described in section 2.2.7 .
In other words, media performance class in Android T is only defined for handheld devices at version T, S or R.
See section 2.2.7 for device-specific requirements.
9. Security Model Compatibility
9.1 Permissions : Extend accepted paths for permissions allowlists for preinstalled apps to APEX files.
See revision
- [C-0-2] Permissions with a
protectionLevel
ofPROTECTION_FLAG_PRIVILEGED
MUST only be granted to apps preinstalled in the privileged path(s) of the system image (as well as APEX files ) and be within the subset of the explicitly allowlisted permissions for each app. The AOSP implementation meets this requirement by reading and honoring the allowlisted permissions for each app from the files in theetc/permissions/
path and using thesystem/priv-app
path as the privileged path.
- [C-0-2] Permissions with a
9.7 Security Features : Updates to initialization requirements to maintain kernel integrity.
See revision
Kernel integrity and self-protection features are integral to Android security. Device implementations:
- [C-SR] Are STRONGLY RECOMMENDED to enable stack initialization in the kernel to prevent uses of uninitialized local variables (
CONFIG_INIT_STACK_ALL
orCONFIG_INIT_STACK_ALL_ZERO
). Also, device implementations SHOULD NOT assume the value used by the compiler to initialize the locals.
- [C-SR] Are STRONGLY RECOMMENDED to enable stack initialization in the kernel to prevent uses of uninitialized local variables (
9.8.7 Privacy — Clipboard Access : Automatically clear clipboard data after 60 minutes following a cut/copy/paste activity to protect user privacy.
See revision
Device implementations:
- [C-0-1] MUST NOT return a clipped data from the clipboard (eg via the
ClipboardManager
API) unless the 3rd-party app is the default IME or is the app that currently has focus. - [C-0-2] MUST clear clipboard data at most 60 minutes after it has last been placed in a clipboard or read from a clipboard.
- [C-0-1] MUST NOT return a clipped data from the clipboard (eg via the
9.11 Keys and Credentials : Updates to the secure lock screen requirements, including the addition of ECDH and 3DES to crypto algorithms.
See revision
When the device implementation supports a secure lock screen, it:
- [C-1-2] MUST have implementations of RSA, AES, ECDSA, ECDH (if IKeyMintDevice is supported), 3DES, and HMAC cryptographic algorithms and MD5, SHA1, and SHA-2 family hash functions to properly support the Android Keystore system's supported algorithms in an area that is securely isolated from the code running on the kernel and above. Secure isolation MUST block all potential mechanisms by which kernel or userspace code might access the internal state of the isolated environment, including DMA. The upstream Android Open Source Project (AOSP) meets this requirement by using the Trusty implementation, but another ARM TrustZone-based solution or a third-party reviewed secure implementation of a proper hypervisor-based isolation are alternative options.
9.11.1 Secure Lock Screen, Authentication, and Virtual Devices : Added requirements section for virtual devices and authentication transfers.
See revision
If device implementations add or modify the authentication methods to unlock the lock screen and a new authentication method is based on a physical token or the location:
- [C-6-3] The user MUST be challenged for one of the recommended primary authentication methods (egPIN, pattern, password) at least once every 4 hours or less. When a physical token meets the requirements for TrustAgent implementations in CX, timeout restrictions defined in C-9-5 apply instead.
If device implementations allow applications to create secondary virtual displays and do not support associated input events, such as via
VirtualDeviceManager
, they:- [C-9-1] MUST lock these secondary virtual display(s) when the device's default display is locked, and unlock these secondary virtual display(s) when the device's default display is unlocked.
If device implementations allow applications to create secondary virtual displays and support associated input events, such as via VirtualDeviceManager , they:
- [C-10-1] MUST support separate lock states per virtual device
- [C-10-2] MUST disconnect all virtual devices upon idle timeout
- [C-10-3] MUST have an idle timeout
- [C-10-4] MUST lock all displays when the user initiates a lockdown , including via the lockdown user affordance required for handheld devices (see Section 2.2.5[9.11/H-1-2] )
- [C-10-5] MUST have separate virtual device instances per user
- [C-10-6] MUST disable the creation of associated input events via
VirtualDeviceManager
when indicated byDevicePolicyManager.setNearbyAppStreamingPolicy
- [C-10-7] MUST use a separate clipboard solely for each virtual device (or disable the clipboard for virtual devices)
- [C-10-11] MUST disable authentication UI on virtual devices, including knowledge factor entry and biometric prompt
- [C-10-12] MUST restrict intents initiated from a virtual device to display only on the same virtual device
- [C-10-13] MUST not use a virtual device lock state as user authentication authorization with the Android Keystore System. See
KeyGenParameterSpec.Builder.setUserAuthentication*
.
When device implementations allow the user to transfer the primary authentication knowledge-factor from a source device to a target device, such as for initial setup of the target device, they:
- [C-11-1] MUST encrypt the knowledge-factor with protection guarantees similar to those described in the Google Cloud Key Vault Service security whitepaper when transferring the knowledge-factor from the source device to the target device such that the knowledge-factor cannot be remotely decrypted or used to remotely unlock either device.
- [C-11-2] MUST, on the source device , ask the user to confirm the knowledge-factor of the source device before transferring the knowledge-factor to the target device.
- [C-11-3] MUST, on a target device lacking any set primary authentication knowledge-factor, ask the user to confirm a transferred knowledge-factor on the target device before setting that knowledge-factor as the primary authentication knowledge-factor for the target device and before making available any data transferred from a source device.
If device implementations have a secure lock screen and include one or more trust agents, which call the
TrustAgentService.grantTrust()
System API with theFLAG_GRANT_TRUST_TEMPORARY_AND_RENEWABLE
flag they:- [C-12-1] MUST only call
grantTrust()
with the flag when connected to a proximate physical device with a lockscreen of its own, and when the user has authenticated their identity against that lockscreen. Proximate devices can use on-wrist or on-body detection mechanisms after a one-time user unlock to satisfy the user authentication requirement. - [C-12-2] MUST put the device implementation into the
TrustState.TRUSTABLE
state when the screen is turned off (such as via a button press or display time out) and the TrustAgent has not revoked trust. The AOSP satisfies this requirement. - [C-12-3] MUST only move the device from
TrustState.TRUSTABLE
to theTrustState.TRUSTED
state if the TrustAgent is still granting trust based on the requirements in C-12-1. - [C-12-4] MUST call
TrustManagerService.revokeTrust()
after a maximum of 24 hours from granting trust, an 8 hour idle window, or when the underlying connection to the proximate physical device is lost.
If device implementations allow applications to create secondary virtual displays and support associated input events such as via VirtualDeviceManager and the displays are not marked with VIRTUAL_DISPLAY_FLAG_SECURE, they:
- [C-13-8] MUST block activities with the attribute android:canDisplayOnRemoteDevices or the meta-data android.activity.can_display_on_remote_devices set to false from being started on the virtualdevice.
- [C-13-9] MUST block activities which do not explicitly enable streaming and which indicate they show sensitive content, including via SurfaceView#setSecure, FLAG_SECURE, or SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS, from being started on the virtual device.
- [C-13-10] MUST disable installation of apps initiated from virtual devices.
9.11.2 Strongbox : Making insider attack resistance (IAR) a necessary requirement.
See revision
To validate compliance with [C-1-3] through [C-1-9], device implementations:
- [C-SR] are STRONGLY RECOMMENDED to provide insider attack resistance (IAR), which means that an insider with access to firmware signing keys cannot produce firmware that causes the StrongBox to leak secrets, to bypass functional security requirements or otherwise enable access to sensitive user data. The recommended way to implement IAR is to allow firmware updates only when the primary user password is provided via the IAuthSecret HAL. IAR will become a MUST requirement in Android 14 (AOSP experimental).
9.11.3 Identity Credential : Added information about the Identity Credential system reference implementation.
See revision
The Identity Credential System is defined and achieved by implementing all APIs in the
android.security.identity.*
package. These APIs allows app developers to store and retrieve user identity documents. Device implementations:The upstream Android Open Source Project provides a reference implementation of a trusted application ( libeic ) that can be used to implement the Identity Credential system.
9.11.4 ID Attestation : Added a section for ID attestation requirement.
See revision
9.11.4. ID Attestation
Device implementations MUST support ID attestation .
9.17 Android Virtualization Framework : Added a requirements section for Android Virtualization Framework.
See revision
9.17. Android Virtualization Framework
If the device implements support for the Android Virtualization Framework APIs (
android.system.virtualmachine.*
), the Android host:- [C-1-1] MUST support all the APIs defined by the
android.system.virtualmachine.*
package. - [C-1-2] MUST NOT modify the Android SELinux and permission model for the management of Protected Virtual Machines.
- [C-1-3] MUST NOT modify, omit, or replace the neverallow rules present within the system/sepolicy provided in the upstream Android Open Source Project (AOSP) and the policy MUST compile with all neverallow rules present.
- [C-1-4] MUST NOT allow untrusted code (eg 3p apps) to create and run a Protected Virtual Machine. Note: This might change in future Android releases.
- [C-1-5] MUST NOT allow a Protected Virtual Machine to execute code that is not part of the factory image or their updates. Anything that is not covered by Android Verified Boot (eg files downloaded from the Internet or sideloaded) MUST NOT be allowed to be run in a Protected Virtual Machine.
If the device implements support for the Android Virtualization Framework APIs (
android.system.virtualmachine.*
), then any Protected Virtual Machine instance:- [C-2-1] MUST be able to run all operating systems available in the virtualization APEX in a Protected Virtual Machine.
- [C-2-2] MUST NOT allow a Protected Virtual Machine to run an operating system that is not signed by the device implementor or OS vendor.
- [C-2-3] MUST NOT allow a Protected Virtual Machine to execute data as code (eg SELinux neverallow execmem).
- [C-2-4] MUST NOT modify, omit, or replace the neverallow rules present within the system/sepolicy/microdroid provided in the upstream Android Open Source Project (AOSP).
- [C-2-5] MUST implement Protected Virtual Machine defense-in-depth mechanisms (eg SELinux for pVMs) even for non-Microdroid operating systems.
- [C-2-6] MUST ensure that the pVM firmware refuses to boot if it cannot verify the initial image.
- [C-2-7] MUST ensure that the pVM firmware refuses to boot if the integrity of the instance.img is compromised.
If the device implements support for the Android Virtualization Framework APIs (
android.system.virtualmachine.*
), then the hypervisor:- [C-3-1] MUST NOT allow any pVM to have access to a page belonging to another entity (ie other pVM or hypervisor), unless explicitly shared by the page owner. This includes the host VM. This applies to both CPU and DMA accesses.
- [C-3-2] MUST wipe a page after it is used by a VM and before it is returned to the host (eg the pVM is destroyed).
- [C-3-3] MUST ensure that the pVM firmware is loaded and executed prior to any code in a pVM.
- [C-3-4] MUST ensure that BCC and CDIs provided to a pVM instance can only be derived by that particular instance.
If the device implements support for the Android Virtualization Framework APIs, then across all areas:
- [C-4-1] MUST NOT provide functionality to a pVM that allows bypassing the Android Security Model.
If the device implements support for the Android Virtualization Framework APIs, then:
- [C-5-1] MUST support Isolated Compilation of an ART runtime update.
If the device implements support for the Android Virtualization Framework APIs, then for Key Management:
- [C-6-1] MUST root DICE chain at a point that the user cannot modify, even on unlocked devices. (To ensure it cannot be spoofed).
- [C-6-2] MUST do DICE properly ie provide the correct values. But it might not have to go to that level of detail.
- [C-1-1] MUST support all the APIs defined by the
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2023-03-30(UTC)
[{ "type": "thumb-down", "id": "missingTheInformationINeed", "label":"필요한 정보가 없음" },{ "type": "thumb-down", "id": "tooComplicatedTooManySteps", "label":"너무 복잡함/단계 수가 너무 많음" },{ "type": "thumb-down", "id": "outOfDate", "label":"오래됨" },{ "type": "thumb-down", "id": "translationIssue", "label":"번역 문제" },{ "type": "thumb-down", "id": "samplesCodeIssue", "label":"샘플/코드 문제" },{ "type": "thumb-down", "id": "otherDown", "label":"기타" }] [{ "type": "thumb-up", "id": "easyToUnderstand", "label":"이해하기 쉬움" },{ "type": "thumb-up", "id": "solvedMyProblem", "label":"문제가 해결됨" },{ "type": "thumb-up", "id": "otherUp", "label":"기타" }] - [C-2-1] MUST return