Android 13 개발자 프리뷰에 오신 것을 환영합니다. Android 13을 최고의 버전으로 만들 수 있도록 의견을 제공해 주세요.

호환성 프레임워크 변경사항(Android 13)

그림 1. 전환할 수 있는 변경사항이 나열된 개발자 옵션의 앱 호환성 변경사항 화면

이 페이지에서는 Android 13의 호환성 프레임워크에 포함된 전환 가능한 변경사항을 설명합니다. 이 목록을 개발자 옵션 및 ADB 명령어와 함께 사용하여 Android 13을 지원하고 타겟팅할 준비를 할 때 앱을 테스트하고 디버그하세요.

다음은 호환성 프레임워크 도구를 사용하여 실행할 수 있는 작업입니다.

  • 앱의 targetSdkVersion을 실제로 변경하지 않고 타겟팅된 변경사항을 테스트합니다. 전환을 사용해 타겟팅된 특정 동작 변경사항을 강제로 사용 설정하여 기존 앱에 미치는 영향을 평가할 수 있습니다.
  • 테스트에서 특정 변경사항에만 중점을 둡니다. 타겟팅된 모든 변경사항을 한 번에 처리할 필요 없이 전환을 사용하면 테스트하려는 변경사항을 제외하고 타겟팅된 모든 변경사항을 사용 중지할 수 있습니다.
  • adb를 통해 전환을 관리합니다. adb 명령어를 사용하여 자동화된 테스트 환경에서 전환 가능한 변경사항을 사용 설정하거나 사용 중지할 수 있습니다.
  • 표준 변경 ID를 사용하여 더 빠르게 디버그합니다. 전환 가능한 각 변경사항에는 로그 출력에서 근본 원인을 빠르게 디버그하는 데 사용할 수 있는 고유 ID와 이름이 있습니다.

이러한 각 사용 사례에 맞는 도구를 사용하는 방법에 관한 자세한 내용은 호환성 프레임워크 도구를 참고하세요.

호환성 프레임워크에 포함된 동작 변경사항

이 섹션의 목록에서는 Android 13의 호환성 프레임워크에 포함된 전환 가능한 변경사항을 설명합니다.

기본 상태로 변경사항 목록을 필터링할 수 있습니다.

Android 13의 호환성 프레임워크에서 전환 가능한 변경사항

ALWAYS_SANDBOX_DISPLAY_APIS

변경 ID: 185004937
기본 상태: 모든 앱에서 사용 중지됩니다.

윈도잉 모드와 관계없이 이 변경이 적용된 패키지에서 항상 Display API 샌드박스를 적용하도록 강제합니다. Display API는 항상 앱 경계를 제공합니다.

이 변경사항에 관한 자세한 내용은 Display#getRealSize 및 getRealMetrics: 지원 중단 및 샌드박스를 참고하세요.

CAMERA_MIC_INDICATORS_NOT_PRESENT

변경 ID: 162547999
기본 상태: 모든 앱에서 사용 중지됩니다.

이 기기가 카메라 및 마이크 표시기를 지원한다고 나타냅니다. 변경 ID가 없으면 CompatChanges#isChangeEnabled 메서드가 true를 반환하므로 있는 경우에는 false입니다.

DEFER_BOOT_COMPLETED_BROADCAST_CHANGE_ID

변경 ID: 203704822
기본 상태: Android 13 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 13 이상을 타겟팅하는 앱의 경우 UID에 속한 임의의 프로세스가 처음으로 시작될 때까지 LOCKED_BOOT_COMPLETEDBOOT_COMPLETED 브로드캐스트가 연기됩니다.

DOWNSCALED

변경 ID: 168419799
기본 상태: 모든 앱에서 사용 중지됩니다.

이 변경사항은 앱별로 발생하는 모든 버퍼 축소 변경의 게이트키퍼가 됩니다. 변경사항을 사용 중지하면 다음 배율이 작동하지 않습니다.

앱 패키지에 이 변경사항을 사용 설정하면 앱은 사용할 수 있는 가장 높은 배율로 크기가 강제 조절됩니다. 예를 들어, 80%와 70%가 사용 설정되어 있으면 80%가 사용됩니다.

DOWNSCALE_30

변경 ID: 189970040
기본 상태: 모든 앱에서 사용 중지됩니다.

DOWNSCALED도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 앱이 실제 디스플레이의 세로 및 가로 해상도의 30%를 사용하여 디스플레이에서 실행되고 있다고 가정합니다.

DOWNSCALE_35

변경 ID: 189969749
기본 상태: 모든 앱에서 사용 중지됩니다.

DOWNSCALED도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 앱이 실제 디스플레이의 세로 및 가로 해상도의 35%를 사용하여 디스플레이에서 실행되고 있다고 가정합니다.

DOWNSCALE_40

변경 ID: 189970038
기본 상태: 모든 앱에서 사용 중지됩니다.

DOWNSCALED도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 앱이 실제 디스플레이의 세로 및 가로 해상도의 40%를 사용하여 디스플레이에서 실행되고 있다고 가정합니다.

DOWNSCALE_45

변경 ID: 189969782
기본 상태: 모든 앱에서 사용 중지됩니다.

DOWNSCALED도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 앱이 실제 디스플레이의 세로 및 가로 해상도의 45%를 사용하여 디스플레이에서 실행되고 있다고 가정합니다.

DOWNSCALE_50

변경 ID: 176926741
기본 상태: 모든 앱에서 사용 중지됩니다.

DOWNSCALED도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 앱이 실제 디스플레이의 세로 및 가로 해상도의 50%를 사용하여 디스플레이에서 실행되고 있다고 가정합니다.

DOWNSCALE_55

변경 ID: 189970036
기본 상태: 모든 앱에서 사용 중지됩니다.

DOWNSCALED도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 앱이 실제 디스플레이의 세로 및 가로 해상도의 55%를 사용하여 디스플레이에서 실행되고 있다고 가정합니다.

DOWNSCALE_60

변경 ID: 176926771
기본 상태: 모든 앱에서 사용 중지됩니다.

DOWNSCALED도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 앱이 실제 디스플레이의 세로 및 가로 해상도의 60%를 사용하여 디스플레이에서 실행되고 있다고 가정합니다.

DOWNSCALE_65

변경 ID: 189969744
기본 상태: 모든 앱에서 사용 중지됩니다.

DOWNSCALED도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 앱이 실제 디스플레이의 세로 및 가로 해상도의 65%를 사용하여 디스플레이에서 실행되고 있다고 가정합니다.

DOWNSCALE_70

변경 ID: 176926829
기본 상태: 모든 앱에서 사용 중지됩니다.

DOWNSCALED도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 앱이 실제 디스플레이의 세로 및 가로 해상도의 70%를 사용하여 디스플레이에서 실행되고 있다고 가정합니다.

DOWNSCALE_75

변경 ID: 189969779
기본 상태: 모든 앱에서 사용 중지됩니다.

DOWNSCALED도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 앱이 실제 디스플레이의 세로 및 가로 해상도의 75%를 사용하여 디스플레이에서 실행되고 있다고 가정합니다.

DOWNSCALE_80

변경 ID: 176926753
기본 상태: 모든 앱에서 사용 중지됩니다.

DOWNSCALED도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 앱이 실제 디스플레이의 세로 및 가로 해상도의 80%를 사용하여 디스플레이에서 실행되고 있다고 가정합니다.

DOWNSCALE_85

변경 ID: 189969734
기본 상태: 모든 앱에서 사용 중지됩니다.

DOWNSCALED도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 앱이 실제 디스플레이의 세로 및 가로 해상도의 85%를 사용하여 디스플레이에서 실행되고 있다고 가정합니다.

DOWNSCALE_90

변경 ID: 182811243
기본 상태: 모든 앱에서 사용 중지됩니다.

DOWNSCALED도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 앱이 실제 디스플레이의 세로 및 가로 해상도의 90%를 사용하여 디스플레이에서 실행되고 있다고 가정합니다.

DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED

변경 ID: 161145287
기본 상태: Android 13 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 13 이상을 타겟팅하는 앱의 경우 이제 코드에서 보호되지 않는 브로드캐스트의 수신기를 등록할 때 Context.RECEIVER_EXPORTED 또는 Context.RECEIVER_NOT_EXPORTED를 명시적으로 설정해야 합니다.

이 변경사항에 관한 자세한 내용은 컨텍스트 등록된 수신기의 안전한 내보내기 섹션을 참고하세요.

FORCE_DISABLE_HEVC_SUPPORT

변경 ID: 174227820
기본 상태: 모든 앱에서 사용 중지됩니다.

앱이 HEVC 미디어 기능을 지원하지 않도록 강제 사용 중지합니다. 앱은 매니페스트에서 지원되는 미디어 기능을 선언해야 하지만 이 플래그는 앱이 HEVC를 지원하지 않도록 강제하는 데 사용할 수 있으므로 HEVC로 인코딩된 미디어에 액세스하는 동안 트랜스코딩을 강제합니다. 이 플래그를 설정하면 앱의 OS 수준 기본값이 재정의됩니다. 기본적으로 사용 중지되어 있어 OS 기본값이 우선 적용됩니다. 이 플래그와 FORCE_ENABLE_HEVC_SUPPORT를 설정하는 것은 정의되지 않은 상태이므로 OS에서 두 플래그를 모두 무시합니다.

FORCE_ENABLE_HEVC_SUPPORT

변경 ID: 174228127
기본 상태: 모든 앱에서 사용 중지됩니다.

앱이 HEVC 미디어 기능을 지원하도록 강제 사용 설정합니다. 앱은 매니페스트에서 지원되는 미디어 기능을 선언해야 하지만 이 플래그는 앱이 HEVC를 지원하도록 강제하는 데 사용할 수 있으므로 HEVC로 인코딩된 미디어에 액세스하는 동안 트랜스코딩을 방지합니다. 이 플래그를 설정하면 앱의 OS 수준 기본값이 재정의됩니다. 이 기능은 기본적으로 사용 중지되어 있어 OS 기본값이 우선 적용됩니다. 이 플래그와 FORCE_DISABLE_HEVC_SUPPORT를 설정하는 것은 정의되지 않은 상태이므로 OS에서 두 플래그를 모두 무시합니다.

FORCE_NON_RESIZE_APP

변경 ID: 181136395
기본 상태: 모든 앱에서 사용 중지됩니다.

이 변경사항이 적용되는 패키지는 크기를 조절할 수 없습니다.

FORCE_RESIZE_APP

변경 ID: 174042936
기본 상태: 모든 앱에서 사용 중지됩니다.

적용되는 패키지의 크기가 조절되도록 강제합니다. 전체 화면 윈도잉 모드에서만 크기 조절이 허용되고 앱을 크기 조절이 가능한 멀티 윈도우 모드로 강제하지 않습니다.

KEYSTORE_OPERATION_CREATION_MAY_FAIL

변경 ID: 169897160
기본 상태: 모든 앱에서 사용 중지됩니다.

사용 설정하면 새로운 제거 전략에 따라 키 저장소 작업 생성이 실패할 수 있습니다. 키 저장소는 암호화 작업 생성이 항상 성공한다는 가정하에 작동했습니다. 그러나 KeyMint 백엔드에는 제한된 수의 작업 슬롯만 있습니다.

'무한' 작업 슬롯의 모양을 유지하기 위해 키 저장소 데몬은 사용 가능한 작업 슬롯이 없다면 가장 오래전에 사용된 작업을 제거합니다. 따라서 우수한 작업이 조기에 종료될 수 있습니다. 이로 인해 AndroidKeystore가 서비스 거부(DoS) 및 의도하지 않은 라이브 잠금에 노출되었습니다. 예를 들어 전원 관리 최적화로 인해 여러 앱이 동시에 절전 모드가 해제되어 암호화 작업을 실행하려고 하면 아무런 진전 없이 다른 앱의 작업을 종료하기 시작합니다.

라이브 잠금을 해제하고 DoS 시도를 방지하기 위해 작업 슬롯을 거의 사용하지 않는 클라이언트가 선호되도록 제거 전략을 변경했습니다. 따라서 5초 이상 비활성 상태로 있지 않은 단일 작업은 거의 항상 제거 전략에 구속받지 않고 완료됩니다. 이러한 작업도 제거할 수 있는 파일 시스템 암호화와 관련된 작업이 여전히 있지만 아주 드문 경우입니다. 이 새로운 제거 전략 작업의 부작용으로 이제 클라이언트가 모든 기존 작업보다 낮은 제거력을 보유하면 생성이 실패할 수 있습니다.

제거 전략: 적절한 후보를 찾기 위해 호출자와 기존의 각 작업의 malus를 계산합니다. malus는 제거력(호출자)이나 제거 저항(기존 작업)의 역입니다. 호출자가 작업을 제거할 수 있으려면 자체 malus보다 높은 malus가 있는 작업을 찾아야 합니다. 제거 전략에 관한 자세한 내용은 operation.rs 구현을 참고하세요. Android 11(API 수준 30) 이하에서는 KeyStore2가 여유 작업 슬롯을 위해 키 저장소 데몬을 폴링합니다. Android 11(API 수준 30) 이하를 타겟팅하는 앱에서는 여전히 암호화와 서명 객체 초기화가 항상 성공하는 것처럼 보입니다. 그러나 작업을 가져오는 데는 시간이 더 오래 걸릴 수 있습니다. 모든 Android 버전은 공정한 작업 슬롯 예약과 성공적으로 작업을 완료할 더 나은 기회에서 혜택을 받습니다.

NATIVE_HEAP_ZERO_INIT

변경 ID: 178038272
기본 상태: 모든 앱에서 사용 중지됩니다.

네이티브 힙 메모리 할당 시, 0으로 자동 초기화하도록 사용 설정합니다.

NATIVE_MEMTAG_ASYNC

변경 ID: 135772972
기본 상태: 모든 앱에서 사용 중지됩니다.

이 프로세스에서 비동기(ASYNC) 메모리 태그 확인을 사용 설정합니다. 이 플래그는 ARM Memory Tagging Extension(MTE)을 지원하는 하드웨어에만 영향을 미칩니다.

NATIVE_MEMTAG_SYNC

변경 ID: 177438394
기본 상태: 모든 앱에서 사용 중지됩니다.

이 프로세스에서 동기(SYNC) 메모리 태그 확인을 사용 설정합니다. 이 플래그는 ARM Memory Tagging Extension(MTE)을 지원하는 하드웨어에만 영향을 미칩니다. NATIVE_MEMTAG_ASYNC와 이 옵션이 모두 사용 설정되면 이 옵션이 우선하며 MTE는 SYNC 모드에서 사용 설정됩니다.

NEVER_SANDBOX_DISPLAY_APIS

변경 ID: 184838306
기본 상태: 모든 앱에서 사용 중지됩니다.

이 변경사항이 적용된 패키지는 레터박스 또는 SCM 활동에 Display API 샌드박스를 적용하지 않도록 합니다. Display API는 계속해서 DisplayArea 경계를 제공합니다.

이 변경사항에 관한 자세한 내용은 Display#getRealSize 및 getRealMetrics: 지원 중단 및 샌드박스를 참고하세요.

NOTIFICATION_LOG_ASSISTANT_CANCEL

변경 ID: 195579280
기본 상태: Android 13 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 13 이상을 타겟팅하는 앱의 경우, 보다 일반적인 REASON_LISTENER_CANCEL을 사용하는 대신 어시스턴트의 알림 취소에 관해 제공되는 보다 구체적인 이유를 리스너가 이해할 수 있도록 지원합니다.

NOTIFICATION_PERM_CHANGE_ID

변경 ID: 194833441
기본 상태: Android 13 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 13 이상을 타겟팅하는 앱의 경우 런타임 권한 또는 알림과 관련된 동작 변경사항을 사용하도록 설정합니다.

이 변경사항에 관한 자세한 내용은 새로운 알림 런타임 권한 페이지를 참고하세요.

OVERRIDE_CAMERA_RESIZABLE_AND_SDK_CHECK

변경 ID: 191513214
기본 상태: 모든 앱에서 사용 중지됩니다.

이 변경 ID를 사용 설정하면 변경사항이 적용되는 패키지가 현재 android:resizeableActivity 값과 M 이하의 타겟 SDK를 무시하고 활동을 크기 조절이 불가능한 것으로 간주하도록 강제합니다. 이 경우 카메라 회전 및 자르기 값은 현재 디스플레이 회전을 고려하여 필요한 보정에만 의존합니다.

OVERRIDE_CAMERA_ROTATE_AND_CROP_DEFAULTS

변경 ID: 189229956
기본 상태: 모든 앱에서 사용 중지됩니다.

이 변경 ID를 사용 설정하면 변경사항이 적용되는 패키지가 기본 카메라 회전 및 자르기 동작을 재정의하고 항상 CaptureRequest.SCALER_ROTATE_AND_CROP_NONE를 반환하도록 강제합니다. 가능한 모든 재정의 조합과 함께 기본 동작은 아래 표에 설명되어 있습니다.

OVERRIDE_MIN_ASPECT_RATIO

변경 ID: 174042980
기본 상태: 모든 앱에서 사용 중지됩니다.

이 변경사항은 지정된 최소 가로세로 비율을 강제로 적용하는 모든 변경의 게이트키퍼가 됩니다. 이 변경을 사용 설정하면 다음과 같은 가로세로 비율이 적용될 수 있습니다.

이 변경사항이 앱 패키지에 사용 설정되면 앱의 매니페스트에 지정된 최소 가로세로 비율이 최대 가로세로 비율보다 더 높지 않은 경우 사용할 수 있는 최대 가로세로 비율로 재정의됩니다.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

변경 ID: 180326787
기본 상태: 모든 앱에서 사용 중지됩니다.

OVERRIDE_MIN_ASPECT_RATIO도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 활동의 최소 가로세로 비율이 OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE에 정의된 큰 값으로 설정됩니다.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

변경 ID: 180326845
기본 상태: 모든 앱에서 사용 중지됩니다.

OVERRIDE_MIN_ASPECT_RATIO도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 활동의 최소 가로세로 비율이 OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE에 정의된 중간 값으로 설정됩니다.

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

변경 ID: 203647190
기본 상태: 모든 앱에서 사용 설정됩니다.

OVERRIDE_MIN_ASPECT_RATIO도 사용 설정된 경우 패키지에 이 변경사항을 사용 설정하면 활동의 최소 가로세로 비율을 특정 값(예: OVERRIDE_MIN_ASPECT_RATIO_LARGE, OVERRIDE_MIN_ASPECT_RATIO_MEDIUM)으로 강제하는 기타 모든 변경사항을 세로 모드 방향도 있는 활동으로 제한합니다.

RATE_LIMIT_TOASTS

변경 ID: 174840628
기본 상태: 이 변경사항은 전환할 수 없습니다. 호환성 프레임워크에서만 기록됩니다.

제한된 시간에 너무 많은 토스트 메시지로 사용자에게 과도한 부담을 주지 않도록 Toast.show() 호출 수에 비율 제한을 사용 설정합니다. 정해진 시간에 허용된 것보다 많은 토스트 메시지를 표시하려고 하면 토스트 메시지가 삭제됩니다.

SUPPORT_DEREGISTERING_LOSING_PDN_STATE

변경 ID: 201522903
기본 상태: Android 13 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 13 이상을 타겟팅하는 앱의 경우 API에서 DEREGISTERING_REASON_LOSING_PDN 상태(예: DelegateRegistrationState#addDeregisteringFeatureTagDelegateRegistrationState#getDeregisteringFeatureTags)를 지원합니다.

SUPPORT_PUBLISHING_STATE

변경 ID: 202894742
기본 상태: Android 13 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 13 이상을 타겟팅하는 앱의 경우 API에서 게시 상태(예: RcsUceAdapter#PUBLISH_STATE_PUBLISHINGsupport)를 지원합니다.

SUPPORT_REGISTERING_DELEGATE_STATE

변경 ID: 205194548
기본 상태: Android 13 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 13 이상을 타겟팅하는 앱의 경우 API에서 REGISTERING 상태(예: DelegateRegistrationState#addRegisteringFeatureTagsDelegateRegistrationState#getRegisteringFeatureTagssupport)를 지원합니다.