최종 업데이트: 2025년 12월 2일
2. 기기 유형
2.2. 휴대기기 요구사항
2.2.1. 하드웨어
64비트 ABI 지원(32비트 ABI 보유와 관계없이)을 선언하고 ActivityManager.isLowRamDevice()에 false를 반환하는 휴대기기 구현은 다음을 충족해야 합니다.
- [7.1.4.2/H-2-1] Vulkan 1.1을 지원해야 합니다(MUST).
2.2.3. 소프트웨어
앱이 모든 프로모션 특성을 충족하는 경우 앱의 실시간 업데이트 알림을 프로모션할 수 있습니다. 이러한 알림은 이 문서에서 프로모션된 실시간 업데이트 알림이라고 설명합니다. 휴대기기 구현은 다음 요구사항에 따라 프로모션된 실시간 업데이트 알림을 눈에 띄게 표시해야 합니다(MUST).
API 수준 36.1 이상을 선언하는 휴대기기 구현은 다음을 충족해야 합니다.
[3.8.3.1/H-0-1] 잠금 화면의 눈에 띄는 위치에 프로모션된 실시간 업데이트 알림을 표시해야 합니다(MUST).
[3.8.3.1/H-0-12] 프로모션된 실시간 업데이트 알림이 다른 알림 사이에 표시될 때 알림 스택의 상단에 헤드업 알림을 표시하거나 색상이 지정된 알림 위에 표시해야 합니다(
setColorized가true인 경우)(MUST).- 하나 이상의 앱이 프로모션된 실시간 업데이트 알림을 받을 수 있는 경우 알림 창과 잠금 화면에 표시되는 프로모션된 실시간 업데이트 알림의 순서를 결정할 수 있습니다(MAY).
[3.8.3.1/H-0-2] 펼쳐진 상태로 프로모션된 실시간 업데이트 알림을 표시해야 합니다(MUST).
[3.8.3.1/H-0-3] 위의 펼쳐진 알림을 접는 사용자 어포던스를 제공하면 안 됩니다(MUST NOT).
[3.8.3.1/H-0-4]
StyleSpan또는UnderlineSpan에서 제공하는 대로 프로모션된 실시간 업데이트 알림에 텍스트 콘텐츠의 기본 스타일(굵게, 기울임꼴, 밑줄)을 표시해야 합니다(MUST).[3.8.3.1/H-0-5] 프로모션된 실시간 업데이트 알림에 표준 작업 객체(
Notification.Action을 통해)만 표시해야 하고(MUST) 알림에 포함되어 있더라도 입력 상자, 답장 버튼, 상황별 작업(addRemoteInput()및setContextual()을 통해)과 같은 비표준 작업 객체는 숨겨야 합니다(MUST).[3.8.3.1/H-0-6]
Notification.getSmallIcon()을 포함해야 하는(MUST) 프로모션된 실시간 업데이트 알림에 대해 SDK 문서에서 상태 칩이라고도 하는 간결한 표현을 표시해야 합니다(MUST).[3.8.3.1/H-0-7] 다른 필드는 간결한 표현에 선택사항이지만 간결한 표현을 펼칠 수 있는 경우
Notification.getShortCriticalText()(있는 경우) 또는Notification.when(Notification.getShortCriticalText가 없는 경우)을 표시해야 합니다(MUST).[3.8.3.1/H-0-8] 프로모션된 실시간 업데이트 알림이 두 개 이상 있는 경우 상태 표시줄에 하나 이상을 간결한 표현으로 표시해야 합니다(MUST).
[3.8.3.1/H-0-9] 사용자가 간결한 표현을 탭하면 연결된 알림을 표시하거나(기본) 연결된 앱을 열어야 합니다(
Notification.contentIntent를 통해)(MUST).[3.8.3.1/H-0-13] 알림 창에서 사용할 수 있는 콘텐츠와 동일한 콘텐츠를 모두 연결된 알림에 표시해야 합니다(MUST).
[3.8.3.1/H-0-10] 개별 앱의 알림 프로모션 표시를 사용 중지하고 사용 설정하는 사용자 어포던스를 제공해야 합니다(MUST).
[3.8.3.1/H-0-11] 프로모션 특성을 충족하지 않거나 부분적으로만 충족하는 프로모션되지 않은 실시간 업데이트 알림을 포함하되 이에 국한되지 않는 모든 실시간 업데이트 알림을 올바르게 렌더링해야 합니다(MUST). 프로모션되지 않은 알림은 프로모션되지 않은 상태로 표시되어야 합니다(MUST).
2.2.5. 보안 모델
android.hardware.telephony 지원을 선언하는 기기 구현은 다음을 충족해야 합니다.
- [9.5/H-1-1]
UserManager.isHeadlessSystemUserMode를true로 설정하면 안 됩니다(MUST NOT).
2.5. 자동차 요구사항
2.5.1. 하드웨어
Automotive 기기 구현:
- [7.1.1.1/A-0-3] 적어도 모든 내장 디스플레이의 가장 높은 해상도만큼 그래픽 버퍼의 GPU 구성을 지원해야 합니다(MUST).
Vulkan 지원을 포함하는 Automotive 기기 구현은 다음을 충족해야 합니다.
- [7.1.4.2/A-1-1] Android 기준 2021 프로필에 명시된 요구사항을 충족해야 합니다(MUST).
Configuration.isScreenHdr()을 통한 HDR(High Dynamic Range) 디스플레이 지원을 주장하는 Automotive 기기 구현은 다음을 충족해야 합니다.
- [7.1.4.5/A-1-1]
EGL_EXT_gl_colorspace_bt2020_pq,EGL_EXT_surface_SMPTE2086_metadata,EGL_EXT_surface_CTA861_3_metadata,VK_EXT_swapchain_colorspace,VK_EXT_hdr_metadata확장 프로그램 지원을 알려야 합니다(MUST).
Automotive 기기 구현:
- [7.1.4.6/A-0-1] 기기가 시스템 속성
graphics.gpu.profiler.support를 통해 GPU 프로파일링 기능을 지원하는지 보고해야 합니다(MUST).
시스템 속성 graphics.gpu.profiler.support를 통해 지원을 선언하는 Automotive 기기 구현은 다음을 충족해야 합니다.
[7.1.4.6/A-1-1] Perfetto 문서에 정의된 GPU 카운터 및 GPU RenderStages의 스키마를 준수하는 protobuf 트레이스를 출력으로 보고해야 합니다(MUST).
[7.1.4.6/A-1-2]
gpu counter trace패킷 proto에 따라 기기의 GPU 카운터에 관한 준수 값을 보고해야 합니다(MUST).[7.1.4.6/A-1-3] 렌더 단계 트레이스 패킷 proto에 따라 기기의 GPU RenderStages에 대한 준수 값을 보고해야 합니다(MUST).
[7.1.4.6/A-1-4] power/gpu_frequency 포맷으로 지정된 GPU 주파수 tracepoint를 보고해야 합니다(MUST).
Automotive 기기 구현:
- [7.1.5/A-0-1] 업스트림 Android 오픈소스 코드에서 구현된 기존 앱 호환성 모드 지원을 포함해야 합니다(MUST). 즉, 기기 구현이 호환성 모드가 활성화되는 트리거 또는 기준점을 변경하면 안 되며(MUST NOT) 호환성 모드 자체의 동작을 변경해서도 안 됩니다(MUST NOT).
주변기기 모드에서 컨트롤러 조작을 지원하는 USB 포트를 포함하는 Automotive 기기 구현은 다음을 충족해야 합니다.
- [7.7.1/A-1-1] Android Open Accessory(AOA) API를 구현해야 합니다(MUST).
호스트 모드를 지원하는 USB 포트를 포함하는 Automotive 기기 구현은 다음을 충족해야 합니다.
- [7.7.2/A-1-1] Android SDK 문서에 설명된 USB 오디오 클래스를 구현해야 합니다(MUST).
USB 주변기기가 연결되어 있는 동안 호출되는 AudioManager.getDevices() API는 다음을 충족해야 합니다.
[7.8.2.2/A-1-1] USB 오디오 터미널 유형 필드가
0x0302인 경우AudioDeviceInfo.TYPE_USB_HEADSET유형 및isSink()역할의 기기를 나열해야 합니다(MUST).[7.8.2.2/A-1-2] USB 오디오 터미널 유형 필드가
0x0402인 경우AudioDeviceInfo.TYPE_USB_HEADSET유형 및isSink()역할의 기기를 나열해야 합니다(MUST).[7.8.2.2/A-1-3] USB 오디오 터미널 유형 필드가
0x0603인 경우AudioDeviceInfo.TYPE_USB_HEADSET유형 및isSink()역할의 기기를 나열해야 합니다(MUST).[7.8.2.2/A-1-4] USB 오디오 터미널 유형 필드가
0x0400인 경우AudioDeviceInfo.TYPE_USB_HEADSET유형 및isSink()역할의 기기를 나열해야 합니다(MUST).
2.5.3. 소프트웨어
Automotive 기기 구현:
- [3.2.3.1/A-0-2] SDK 문서의 설명처럼
ACTION_GET_CONTENT,ACTION_OPEN_DOCUMENT,ACTION_OPEN_DOCUMENT_TREE,ACTION_CREATE_DOCUMENT인텐트를 처리하는 앱을 보유해야 하며DocumentsProviderAPI를 사용하여 문서 제공자 데이터에 액세스할 수 있도록 사용자에게 어포던스를 제공해야 합니다(MUST).
설정 애플리케이션이 활동 삽입을 사용하여 분할 기능을 구현하는 Automotive 기기 구현은 다음을 충족해야 합니다.
- [3.2.3.1/A-1-1] 분할 기능이 사용 설정된 경우
Settings#ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY인텐트를 처리하는 활동이 있어야 합니다(MUST). 활동은android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK로 보호되어야 하며(MUST)Settings#EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI에서 파싱된 인텐트의 활동을 시작해야 합니다(MUST).
2.5.4. 성능 및 전력
[8.1/A-0-1] 일관적인 프레임 지연 시간. 프레임을 렌더링하기 위한 비일관적인 프레임 지연 시간 또는 지연이 초당 5프레임보다 자주 발생하면 안 되며(MUST NOT), 초당 1프레임 아래여야 합니다(SHOULD).
[8.1/A-0-2] 사용자 인터페이스 지연 시간. 기기 구현이 Android 호환성 테스트 모음(CTS)에서 정의한 10K 목록 항목 목록을 36초 이내에 스크롤하여 지연 시간이 짧은 사용자 환경을 보장해야 합니다(MUST).
[8.1/A-0-3] 작업 전환. 여러 앱이 실행된 경우, 실행 이후에 이미 실행 중인 애플리케이션을 다시 실행하는 데 소요되는 시간이 1초 미만이어야 합니다(MUST).
Automotive 기기 구현:
android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS에 android.os.Build.VERSION_CODES.U 이상을 반환하는 Automotive 기기 구현은 다음을 충족해야 합니다.
2.5.5. 보안 모델
여러 사용자를 지원하는 Automotive 기기 구현은 다음을 충족해야 합니다.
마이크 또는 카메라 액세스 표시 없이 쿼리 감지를 위해 시스템 API VisualQueryDetectionService 또는 다른 메커니즘을 지원하는 Automotive 기기 구현은 다음을 충족해야 합니다.
[9.8/A-1-1] 쿼리 감지 서비스가 시스템(
ContentCaptureService) 또는 기기 내 음성 인식 서비스(SpeechRecognizer#createOnDeviceSpeechRecognizer()에서 생성)로만 데이터를 전송하도록 해야 합니다(MUST).[9.8/A-1-2] 오디오 또는 동영상 정보가
ContentCaptureService나 기기 내 음성 인식 서비스를 제외하고VisualQueryDetectionService외부로 전송되도록 허용하면 안 됩니다(MUST NOT).[9.8/A-1-3] 기기가 디지털 어시스턴트 애플리케이션에 참여하려는 사용자 의도를 감지하면(예: 카메라를 통한 사용자 존재 감지) 시스템 UI에 사용자 알림을 표시해야 합니다(MUST).
[9.8/A-1-4] 마이크 표시기를 표시하고 사용자 쿼리가 감지된 직후 UI에 감지된 사용자 쿼리를 표시해야 합니다(MUST).
[9.8/A-1-5] 사용자가 설치할 수 있는 애플리케이션이 시각적 쿼리 감지 서비스를 제공하는 것을 허용하면 안 됩니다(MUST NOT).
3. 소프트웨어
3.4. 웹 호환성
3.4.1. WebView 호환성
android.webkit.Webview API의 온전한 구현을 제공하는 기기 구현은 다음을 충족해야 합니다.
[C-1-3] SDK 수준 35 이하를 타겟팅하는 앱의 경우 WebView에서 보고된 사용자 에이전트 문자열은 다음 형식이어야 합니다(MUST).
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$(VERSION)문자열 값은android.os.Build.VERSION.RELEASE값과 같아야 합니다(MUST).$(MODEL)문자열은 비어 있을 수 있지만(MAY) 비어 있지 않은 경우에는android.os.Build.MODEL값과 같아야 합니다(MUST).'Build/$(BUILD)'는 생략될 수 있지만(MAY) 있는 경우
$(BUILD)문자열은android.os.Build.ID와 같은 값이어야 합니다(MUST).$(CHROMIUM_VER)문자열 값은 업스트림 Android 오픈소스 프로젝트의 Chromium 버전이어야 합니다(MUST).기기 구현은 사용자 에이전트 문자열에서 모바일을 생략할 수 있습니다(MAY).
3.8. 사용자 인터페이스 호환성
3.8.14. 멀티 윈도우
- [C-1-2] 이 SDK에 설명된
AndroidManifest.xml파일의 앱에 의해 설정된android:resizeableActivity를 선정해야 합니다(MUST).
3.9. 기기 관리
3.9.1 기기 프로비저닝
3.9.1.2. 관리 프로필 프로비저닝
android.software.managed_users를 선언하는 기기 구현은 다음을 충족해야 합니다.
-
[C-1-1]
android.software.device_admin을 선언하고 DPC(기기 정책 컨트롤러) 애플리케이션이 새 관리 프로필의 소유자가 될 수 있도록 허용하는 API를 구현해야 합니다(MUST).
3.9.4. 기기 정책 관리 역할 요구사항
android.software.device_admin
또는 을 선언하는 기기 구현은 다음을 충족해야 합니다.android.software.managed_users
- [C-1-1] 섹션 9.1에 정의된 기기 정책 관리 역할을 지원해야 합니다(MUST). 기기 정책 관리 역할이 있는 애플리케이션은 패키지 이름으로
config_devicePolicyManagement를 설정하여 정의할 수 있습니다(MAY). 애플리케이션이 미리 로드되지 않는 한 패키지 이름 뒤에는 콜론(:)과 서명 인증서가 있어야 합니다(MUST).
3.9.5. 기기 정책 해결 프레임워크
android.software.device_admin
또는 을 선언하는 기기 구현은 다음을 충족해야 합니다.android.software.managed_users
- [C-1-1] 기기 정책 해결 프레임워크에 설명된 대로 기기 정책 충돌을 해결해야 합니다(MUST).
3.18. 연락처
맞춤 로컬 계정: 기기에만 저장되고 AccountManager의 계정과 연결되지 않은 원시 연락처의 계정으로, ACCOUNT_NAME 및 ACCOUNT_TYPE 열이 최소 하나 이상의 모두 null이 아닌 값으로 설정된 상태로 생성됩니다.
맞춤 로컬 계정을 사용하는 기기 구현은 다음을 충족해야 합니다.
- [C-1-3] 기본 로컬 계정을 사용하는 서드 파티 애플리케이션이 삽입한 원시 연락처(즉,
ACCOUNT_NAME및ACCOUNT_TYPE에 null 값 설정)는 맞춤 로컬 계정에 삽입되어야 합니다(MUST).
- [C-1-3] 계정 지정 없이 서드 파티 애플리케이션이 삽입한 원시 연락처는 기기의 기본 연락처 계정에 삽입되어야 합니다(MUST). 기본 연락처 계정이
DEFAULT_ACCOUNT_STATE_LOCAL또는DEFAULT_ACCOUNT_STATE_NOT_SET인 경우 이러한 원시 연락처는 맞춤 로컬 계정에 저장되어야 합니다(MUST).
5. 멀티미디어 호환성
5.1. 미디어 코덱
5.1.3. 오디오 코덱 세부정보
| 형식/코덱 | 세부정보 | 지원해야 하는 파일 유형/컨테이너 형식 |
|---|---|---|
| G.711 μ 법칙 및 A 법칙 | 8kHz에서 샘플링된 모노/스테레오/5.1 콘텐츠 지원 |
|
| MPEG-4 AAC 프로필 (AAC LC) |
표준 샘플링 레이트가 8~48kHz인 모노/스테레오/5.0/5.1 콘텐츠 지원 |
|
| MPEG-4 HE AAC 프로필(AAC+) | 표준 샘플링 레이트가 16~48kHz인 모노/스테레오/5.0/5.1 콘텐츠 지원 |
|
| MPEG-4 HE AACv2 프로필(향상된 AAC+) |
표준 샘플링 레이트가 16~48kHz인 모노/스테레오/5.0/5.1 콘텐츠 지원 |
|
| AAC ELD(개선된 저지연 AAC) | 표준 샘플링 레이트가 16~48kHz인 모노/스테레오 콘텐츠 지원 |
|
| USAC | 표준 샘플링 레이트가 7.35~48kHz인 모노/스테레오 콘텐츠 지원 | MPEG-4(.mp4, .m4a) |
| AMR-NB | 8kHz에서 샘플링된 4.75~12.2kbps | 3GPP(.3gp) |
| AMR-WB | AMR-WB(Adaptive Multi-Rate - Wideband) 음성 코덱 정의처럼 16kHz에서 샘플링된 초당 6.60kbit~23.85kbit인 9레이트 | 3GPP(.3gp) |
| FLAC | 인코더와 디코더 모두 최소 모노 및 스테레오 모드가 지원되어야 합니다(MUST). 최대 192kHz의 샘플링 레이트와 16비트 및 24비트 해상도를 지원해야 합니다(MUST). FLAC 24비트 오디오 데이터 처리를 부동 소수점 오디오 구성과 함께 제공해야 합니다(MUST). |
|
| MP3 | 모노/스테레오 8-320Kbps 상수(CBR) 또는 가변 비트 전송률(VBR) |
|
| MIDI | MIDI 유형 0 및 1. DLS 버전 1 및 2. XMF 및 모바일 XMF. 벨소리 형식 RTTTL/RTX, OTA, iMelody 지원 |
|
| Vorbis | 디코딩: 샘플링 레이트가 8,000, 12,000, 16,000, 24,000, 48,000Hz인 모노, 스테레오, 5.0, 5.1 콘텐츠를 지원합니다. 인코딩: 샘플링 레이트가 8,000, 12,000, 16,000, 24,000, 48,000Hz인 모노 및 스테레오 콘텐츠를 지원합니다. |
|
| PCM/WAVE | PCM 코덱은 16비트 선형 PCM 및 16비트 부동을 지원해야 합니다(MUST). WAVE 추출기는 16비트, 24비트, 32비트 선형 PCM, 32비트 부동(최대 하드웨어 제한 레이트)을 지원해야 합니다. 샘플링 레이트는 8kHz~192kHz에서 지원되어야 합니다(MUST). | WAVE(.wav) |
| Opus | 디코딩: 샘플링 레이트가 8,000, 12,000, 16,000, 24,000, 48,000Hz인 모노, 스테레오, 5.0, 5.1 콘텐츠를 지원합니다. 인코딩: 샘플링 레이트가 8,000, 12,000, 16,000, 24,000, 48,000Hz인 모노 및 스테레오 콘텐츠를 지원합니다. |
|
5.5. 오디오 재생
5.5.4. 오디오 오프로드
오디오 오프로드 재생을 지원하는 기기 구현은 다음을 충족해야 합니다.
- [C-SR-2] AAC, MP3, OPUS, PCM 형식의 오프로드 재생을 구현할 것을 적극 권장합니다(STRONGLY RECOMMENDED).
5.6. 오디오 재생
| 기기 및 선언 | RTL(ms) | MAD(ms) | 루프백 경로 |
|---|---|---|---|
| 휴대기기 | 스피커/마이크, 아날로그 3.5mm(지원되는 경우), USB(지원되는 경우) | ||
| >= MPC_T (13) | 80 | 15 | 하나 이상의 경로 |
| FEATURE_AUDIO_LOW_LATENCY | 50 | 10 | 하나 이상의 경로 |
| FEATURE_AUDIO_PRO | 25 | 5 | 하나 이상의 경로 |
| FEATURE_AUDIO_PRO | 20 | 5 | 아날로그(지원되는 경우) |
| FEATURE_AUDIO_PRO | 25 | 5 | USB(아날로그가 지원되지 않는 경우) |
5.12. HDR 동영상
기기 구현이 FEATURE_HdrEditing을 지원하는 코덱을 포함하는 경우 기기는 다음을 충족해야 합니다.
HDR 디스플레이 요구사항
ADATASPACE_TRANSFER_HLG로 인코딩된 버퍼 콘텐츠를 수신하고 해당 콘텐츠가 SurfaceControl.Transaction#setBuffer를 통해 디스플레이로 전송되는 기기 구현은 다음을 충족해야 합니다.
- [C-8-1] BT. 2408-7의 그래픽 흰색 권장사항을 따라야 하며 SDR 콘텐츠의 4.926배를 초과하지 않을 때만 해당 콘텐츠를 표시해야 합니다(MUST).
6. 개발자 도구 및 옵션 호환성
6.1. 개발자 도구
기기 구현은 다음을 충족해야 합니다.
- [C-0-10] 다음 이벤트를 생략 없이 기록해야 하며,
cmd stats셸 명령어 및StatsManager시스템 API 클래스가 이벤트를 액세스하고 사용할 수 있어야 합니다(MUST).- ActivityForegroundStateChanged
- AnomalyDetected
- AppBreadcrumbReported
- AppCrashOccurred
- AppStartOccurred
- BatteryLevelChanged
- BatterySaverModeStateChanged
- BleScanResultReceived
- BleScanStateChanged
- ChargingStateChanged
- DeviceIdleModeStateChanged
- ForegroundServiceStateChanged
- GpsScanStateChanged
- InputDeviceUsageReported
- JobStateChanged
- KeyboardConfigured
- KeyboardSystemsEventReported
- PluggedStateChanged
- PressureStallInformation
- ScheduledJobStateChanged
- ScreenStateChanged
- SyncStateChanged
- SystemElapsedRealtime
- TouchpadUsage
- UidProcessStateChanged
- WakelockStateChanged
- WakeupAlarmOccurred
- WifiLockStateChanged
- WifiMulticastLockStateChanged
- WifiScanStateChanged
7. 하드웨어 호환성
7.1. 디스플레이 및 그래픽
7.1.3. 화면 방향
두 화면 방향을 모두 지원하는 기기 구현은 다음을 충족해야 합니다.
- [C-1-1] 애플리케이션의 동적 방향을 가로 모드 또는 세로 모드 화면 방향으로 지원해야 합니다(MUST). 즉, 기기는 애플리케이션이 요청하는 특정 화면 방향을 지원해야 합니다.
7.3. 센서
7.3.5. 기압계
시스템 속성 sensor.barometer.high_quality.implemented를 선언하는 기기 구현은 다음을 충족해야 합니다.
[C-2-1] 절대 정확도 +/- 1hPa로 300hPa~1100hPa 범위의 압력 측정값을 보고해야 합니다(MUST).
[C-2-2] 100hPa 범위에 대해 0.15hPa의 상대 정확도가 있어야 합니다(MUST). 이는 해수면에서 약 1000m 변화에 대해 약 1m 정확도와 동일합니다.
[C-2-3] 사용자가 기기를 탭하거나 누르거나 쥘 때 +/- 0.5hPa 이내로 안정적이어야 합니다(MUST).
[C-2-4] 사용자가 기기를 손에 들거나 주머니에 넣고 걸을 때 +/- 0.15hPa 이내로 안정적이어야 합니다(MUST).
[C-2-5] 5Hz가 넘는 활성화의 경우 300밀리초를 초과하는 시간 상수로 스무딩하면 안 되며(MUST NOT) 스무딩은 센서 활성화 전반에서 누출되면 안됩니다(MUST NOT).
[C-2-6] 블루투스나 모바일 데이터 연결, Wi-Fi와 같은 일반적인 소스에서 발생하는 일상 조명 및 무선 주파수에 노출될 때 +/- 0.15hPa 이내로 안정적이어야 합니다(MUST).
7.3.14. 맞춤 센서[새로운 섹션]
차별화된 환경을 제공할 수 있도록 Android 또는 Wear OS에서 지원되지 않는 추가 센서를 기기 구현에 포함할 수 있으며(MAY) 미리 로드된 앱에서 이러한 센서에 액세스할 수 있습니다.
이러한 센서의 경우 센서 ID는 다음을 충족해야 합니다.
- [C-0-1] 65536보다 높아야 합니다(MUST).
맞춤 센서가 건강 또는 피트니스 관련 용도인 경우 다음을 충족해야 합니다.
- [C-0-2] 플랫폼 권한이나 시스템 권한으로 보호되어야 합니다(MUST).
7.4. 데이터 연결
7.4.3. 블루투스
FEATURE_BLUETOOTH_LE를 선언하는 기기 구현은 다음을 충족해야 합니다.
FEATURE_BLUETOOTH_LE_CHANNEL_SOUNDING를 선언하는 기기 구현은 다음을 충족해야 합니다.
[C-11-1] 하드웨어 기능 플래그
android.hardware.bluetooth_le.channel_sounding을 보고해야 합니다(MUST).[C-11-2] 누적 분포 함수로 계산한 대로 1m 거리의 90번째 백분위수에서 +/- 0.5m 이내까지 정확하게 범위를 보고해야 합니다(MUST).
7.5. 카메라
기기 구현에 하나 이상의 카메라가 포함되고 사전 설치된 카메라 애플리케이션이 MediaStore.ACTION_MOTION_PHOTO_CAPTURE 또는 MediaStore.ACTION_MOTION_PHOTO_CAPTURE_SECURE 인텐트를 처리하는 경우 기기 구현은 다음을 충족해야 합니다.
[C-1-4] 이러한 인텐트를 처리할 때 사전 설치된 카메라 앱이 이미지 메타데이터에서 사용자 위치를 삭제한 후
ACCESS_FINE_LOCATION이 없는 수신 애플리케이션에 이를 전송하도록 해야 합니다(MUST).[C-1-5] 반환된 모션 사진이 모션 사진 형식 1.0 사양을 사용하는지 확인해야 합니다(MUST).
9. 보안 모델 호환성
9.1. 권한
심박수나 피부 온도와 같은 건강 관련 생체 인식 데이터를 노출하는 데이터 센서가 기기에 포함되는 경우 이러한 생체 인식 데이터는 다음을 충족해야 합니다.
[C-0-16]
HealthPermissions에 상응하는 권한이 있는 경우android.permission-group.HEALTH의 플랫폼 권한으로 보호되어야 합니다(MUST).[C-0-17] 원하는 데이터 유형과 일치하는 플랫폼 권한이 없다면 맞춤 시스템 권한으로 보호되어야 합니다(MUST). 예:
ELECTROCARDIOGRAM
android.software.managed_users를 보고하는 기기는 다음을 충족해야 합니다.
[C-1-1] 다음 권한은 관리자가 자동으로 부여하면 안 됩니다(MUST NOT).
- 위치(
ACCESS_BACKGROUND_LOCATION,ACCESS_COARSE_LOCATION,ACCESS_FINE_LOCATION) - 카메라(
CAMERA) - 마이크(
RECORD_AUDIO) - 생체 신호 센서(
BODY_SENSORS) - 건강 (
HealthPermissions) - 신체 활동(
ACTIVITY_RECOGNITION)
- 위치(
9.5. 멀티 사용자 지원
기기 구현이 위에서 설명한 추가 사용자 프로필을 만들고 하나 이상의 카메라를 포함하며 사전 설치된 카메라 애플리케이션이 MediaStore.ACTION_MOTION_PHOTO_CAPTURE 또는 MediaStore.ACTION_MOTION_PHOTO_CAPTURE_SECURE 인텐트를 처리하는 경우 기기 구현은 다음을 충족해야 합니다.
- [C-5-1] 기본 사용자의 애플리케이션이 추가 사용자 프로필에서 발생하는 이러한 인텐트를 처리하도록 허용해야 합니다(MUST).
9.7. 보안 기능
커널 무결성 및 자체 보호 기능은 Android 보안의 필수 요소입니다. 기기 구현은 다음을 충족해야 합니다.
- [C-0-8] 실행 가능한 코드가 읽기 전용이고, 읽기 전용 데이터가 실행 불가 및 쓰기 불가이고, 쓰기 가능 데이터가 실행 불가인 엄격한 커널 메모리 보호를 구현해야 합니다(MUST)
(예:(예:CONFIG_DEBUG_RODATA또는CONFIG_STRICT_KERNEL_RWX)rodata및CONFIG_STRICT_KERNEL_RWX가 모두 사용 설정됨) .
9.8. 개인 정보 보호
9.8.2. 녹화
기기 구현은 다음을 충족해야 합니다.
- [C-0-2]
MediaProjection.createVirtualDisplay(),VirtualDeviceManager.createVirtualDisplay()MediaProjection.createVirtualDisplay()또는 독점 API를 통해 화면 전송 또는 화면 녹화 캡처 세션이시작사용 설정될 때마다 사용자의 화면에 표시되는 민감한 정보가 캡처될 수 있도록 사용자 경고를 표시하고 명시적인 사용자 동의를 획득해야 합니다(MUST).
- [C-0-4] 사용자가
android.app.role.COMPANION_DEVICE_APP_STREAMING또는android.app.role.COMPANION_DEVICE_NEARBY_DEVICE_STREAMING기기 프로필과associate()하도록 허용한 시스템 앱에서 세션이 시작되지 않는 한 화면을 캡처하기 위한 향후 사용자 동의 메시지를 사용 중지하는 어포던스를 사용자에게 제공하면 안 됩니다(MUST NOT).
9.11. 키 및 사용자 인증 정보
보안 잠금 화면을 지원하는 기기 구현은 다음을 충족해야 합니다.
[C-1-6] 다음 중 하나를 지원해야 합니다(MUST).
- IKeymasterDevice 3.0
- IKeymasterDevice 4.0
- IKeymasterDevice 4.1
- IKeyMintDevice 버전 1
- IKeyMintDevice 버전 2
- [C-1-6] IKeymasterDevice 3.0 이상 또는 IKeyMintDevice 버전 1 이상을 지원해야 합니다(MUST).
- [C-SR-1] IKeyMintDevice 버전 1을 지원할 것을 적극 권장합니다(STRONGLY RECOMMENDED).
9.11.1. 보안 잠금 화면, 인증, 가상 기기
애플리케이션이 보조 가상 디스플레이를 만들도록 허용하고 VirtualDeviceManager 등을 통해 연결된 입력 이벤트를 지원할 수 있는 기기 구현은 다음을 충족해야 합니다.
[C-10-2] 유휴 상태 시간 제한 시 모든 가상 기기의 연결을 해제해야 합니다(MUST).
[C-10-3] 유휴 상태 시간 제한이 있어야 합니다(MUST).
[C-10-7] 다음 중 하나를 실행해야 합니다(MUST).
- 클립보드 사용을 중지합니다.
- 클립보드를 지원하는 각 기기의 별도의 클립보드를 사용 설정합니다.
- [C-10-15] 여러 기기에서 클립보드 데이터에 액세스할 때 알림을 표시해야 하며(MUST) 초기 공유 시간으로부터 측정된 1분 후에는 콘텐츠에 액세스할 수 없어야 합니다(MUST).
- [C-10-15] 클립보드 데이터가 액세스된 기기와 클립보드가 생성된 기기 모두에서 클립보드 데이터에 액세스할 때 알림을 표시해야 합니다(MUST).
9.18. 개발자 인증[새로운 섹션]
API 수준 36.1 이상을 선언하는 기기 구현은 다음을 충족해야 합니다.
- 알려진 개발자로부터 애플리케이션이 시작되었음을 인증하는 개발자 인증자 서비스를 지원할 수 있습니다(MAY).
API 수준 36.1 이상을 선언하고 config.xml에서 config_developerVerificationServiceProviderPackageName을 정의하여 개발자 인증자를 구성하는 기기 구현은 다음을 충족해야 합니다.
- [9.18/C-1-1] 신규 설치와 기존 애플리케이션 업데이트를 모두 포함하는 모든 애플리케이션 패키지 설치에 대해 구성된
android.content.pm.verify.developer.DeveloperVerifierService를 호출해야 합니다(MUST).
API 수준 36.1 이상을 선언하는 기기 구현은 다음을 충족해야 합니다.
config.xml에서config_developerVerificationPolicyDelegatePackageName를 정의하여 활성 정책을 설정하는 위임자를 구성할 수도 있습니다(MAY).
개발자 인증자가 구성된 경우 기기 구현은 다음을 충족해야 합니다.
- [9.18/C-2-1] 개발자 인증자 또는 구성된 위임자만
android.content.pm.PackageInstaller에 정의된 설치 정책을 설정하도록 허용해야 합니다(MUST).
패키지 설치 세션의 일부로 인증자가 호출되는 경우 기기 구현은 다음을 충족해야 합니다.
[9.18/C-3-1] 다음의 경우 애플리케이션 패키지의 설치를 방지해야 합니다(MUST).
- 설치에서 개발자 신원 확인이 실패합니다.
- 설치 세션의 개발자 인증 정책이
DEVELOPER_VERIFICATION_POLICY_NONE이외의 값으로 설정됩니다. - 9.18/C-3-2 또는 9.18/C-3-3이 적용되지 않는 한
[9.18/C-3-2] 다음의 경우 정책 또는 인증 상태와 관계없이 애플리케이션 패키지의 설치를 방해하면 안 됩니다(MUST NOT).
- 패키지는 Android 디버그 브리지(ADB)를 통해 설치됩니다.
- 패키지는 구성된 개발자 인증자 또는 설치 프로그램입니다.
[9.18/C-3-3] 다음 조건을 모두 충족하는 경우 애플리케이션 패키지의 설치를 방해하면 안 됩니다(MUST NOT).
- 정책이
DEVELOPER_VERIFICATION_POLICY_BLOCK_FAIL_WARN또는DEVELOPER_VERIFICATION_POLICY_BLOCK_FAIL_OPEN으로 설정됩니다. - 인증이 완료되지 않은 것으로 보고됩니다.
- 설치 프로그램은
DEVELOPER_VERIFICATION_USER_RESPONSE_INSTALL_ANYWAY를 보고하여 사용자가 설치를 계속하도록 명시적으로 요청했음을 나타냅니다.
- 정책이
관리 기기의 기기 소유자 또는 관리 프로필의 프로필 소유자가 시작한 설치의 정책 또는 인증 상태와 관계없이 애플리케이션 패키지 설치를 허용할 수 있습니다(MAY). 하지만 9.18/C-3-1에 설명된 대로 설치를 방지할 것을 적극 권장합니다(STRONGLY RECOMMENDED).