내년 초 출시될 대형 화면용 기능 출시인 12L을 준비하세요. 지금 사용해 보기

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

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

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

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

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

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

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

이 섹션의 목록에서는 Android 12의 호환성 프레임워크에 포함된 각 동작 변경사항을 설명합니다.

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

Android 12의 호환성 프레임워크에 추가된 동작 변경사항

ALWAYS_SANDBOX_DISPLAY_APIS

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

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

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

BLOCK_FLAG_SLIPPERY

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

Android 12(API 수준 31)에서 실행되는 앱의 경우 FLAG_SLIPPERY가 앱의 창에서 사용되고 있는지 확인합니다. 이 플래그는 지원되지 않는 필드이므로 시스템 구성요소에서만 사용될 것으로 예상됩니다. 이 경우 플래그가 제한됩니다.

BLOCK_GPS_STATUS_USAGE

변경 ID: 144027538
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 모든 GpsStatus API 사용을 GnssStatus API로 바꿔야 합니다.

BLOCK_IMMUTABLE_PENDING_INTENTS

변경 ID: 171317480
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 Location API로 전달되는 변경 불가능한 PendingIntent 객체가 IllegalArgumentException.을 생성합니다.

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

변경 ID: 169887240
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 LocationRequest 시스템 API를 PendingIntent 위치 요청과 함께 사용할 수 없습니다.

BLOCK_UNTRUSTED_TOUCHES

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

시스템 보안 및 우수한 사용자 환경을 유지하기 위해 Android 12에서는 오버레이가 안전하지 않은 방식으로 앱을 차단하는 터치 이벤트를 앱에서 사용하지 못하도록 합니다.

이 변경사항에 관한 자세한 내용은 신뢰할 수 없는 터치 이벤트가 차단됨을 참고하세요.

CAMERA_MIC_INDICATORS_NOT_PRESENT

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

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

CHANGE_ID_AUTH_STATE_DENIED

변경 ID: 181350407
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 클라이언트 앱의 경우 앱의 승인이 거부된 상태에서 nanoapp으로 메시지를 전송하려고 하면 SecurityException이 발생합니다.

CHANGE_ID_SAMPLING_RATE_SENSORS_PERMISSION

변경 ID: 136069189
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 HIGH_SAMPLING_RATE_SENSORS 권한이 없고 디버그 모드로 실행되며 200Hz보다 빠른 샘플링 레이트를 요청하면 SecurityException이 발생합니다.

DELIVER_HISTORICAL_LOCATIONS

변경 ID: 73144566
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 위치 클라이언트가 일부 상황에서 이전 위치(현재 시간 전)를 수신할 수 있습니다.

DISPLAY_INFO_NR_ADVANCED_SUPPORTED

변경 ID: 181658987
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 TelephonyDisplayInfo 변경사항에 이전 버전과의 호환성을 제공합니다.

DISPLAY_MODE_RETURNS_PHYSICAL_REFRESH_RATE

변경 ID: 170503758
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 더 바람직하다면 플랫폼에서 앱의 프레임 속도를 새로고침 빈도의 제수로 제한할 수 있습니다(예: 앱에서 Surface.setFrameRate(float, int)를 호출한 경우). 앱에서는 제한된 프레임 속도에서 Choreographer.postFrameCallback(Choreographer.FrameCallback) 콜백과 백 프레셔가 발생합니다. 앱은 Display.getRefreshRate()Display.Mode.getRefreshRate()를 사용하여 디스플레이 새로고침 빈도를 파악합니다. Display.getRefreshRate()는 항상 실제 디스플레이 새로고침 빈도가 아닌 애플리케이션 프레임 속도를 반환하므로 앱에서 프레임 속도를 올바르게 실행할 수 있습니다. Display.Mode.getRefreshRate()는 이전 버전으로 컴파일된 경우 앱 프레임 속도를 반환하며 Android 12(API 수준 31)부터는 실제 디스플레이 새로고침 빈도를 반환합니다.

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%를 사용하여 디스플레이에서 실행되고 있다고 가정합니다.

DO_NOT_DOWNSCALE_TO_1080P_ON_TV

변경 ID: 157629738
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 Android TV 앱은 1080p보다 큰 창 크기를 비롯한 모든 창 크기를 처리해야 합니다. 이전 버전의 Android를 타겟팅하는 앱은 1080p보다 큰 창을 수신할 수 없으므로 필요한 경우 창이 1080p로 축소됩니다.

DROP_CLOSE_SYSTEM_DIALOGS

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

앱 및 시스템과 상호작용할 때 사용자 제어를 개선하기 위해 Android 12부터 ACTION_CLOSE_SYSTEM_DIALOGS 인텐트 작업이 지원 중단됩니다.

이 변경사항에 관한 자세한 내용은 앱이 시스템 대화상자를 닫을 수 없음을 참고하세요.

ENABLE_CHECKS_FOR_PRIVATE_FILES

변경 ID: 172100307
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱은 미디어 제공자를 사용하여 비공개 파일을 삽입하거나 업데이트할 수 없습니다.

ENABLE_DEFERRED_SCAN

변경 ID: 180326732
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

MediaProvider#update()의 일부로 트리거된 스캔을 연기하려면 이 옵션을 사용 설정하세요.

ENABLE_GET_CALL_STATE_PERMISSION_PROTECTION

변경 ID: 157233955
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 TelecomManager#getCallState, TelephonyManager.getCallStateForSubscription(), TelephonyCallback.CallStateListener와 같은 호출 상태를 쿼리하고 알리는 API에서 READ_PHONE_STATE 보호를 사용 설정합니다.

ENABLE_GET_PHONE_ACCOUNT_PERMISSION_PROTECTION

변경 ID: 183407956
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 getPhoneAccount(PhoneAccountHandle)에서 READ_PHONE_NUMBERS 또는 READ_PRIVILEGED_PHONE_STATE 보호를 사용 설정합니다.

ENABLE_INCLUDE_ALL_VOLUMES

변경 ID: 182734110
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

최근 MediaProvider#query에 마운트 해제된 볼륨에서 파일의 데이터베이스 행을 포함하려면 이 옵션을 사용 설정하세요.

ENABLE_RAW_MANAGE_EXTERNAL_STORAGE_ACCESS

변경 ID: 178209446
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

원시 외부 저장소 액세스를 요청하기 위해 앱이 Manifest.permission.MANAGE_EXTERNAL_STORAGE 권한을 유지하도록 하려면 이 옵션을 사용 설정하세요.

ENFORCE_MINIMUM_WINDOW_ON_INEXACT_ALARMS

변경 ID: 185199076
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 모든 부정확한 알람에는 몇 분 정도로 예상되는 최소 창 크기가 있어야 합니다. 실제로 더 작은 창이 필요한 모든 알람은 정확한 알람과 같으며 제공된 상응하는 API(예: setExact(int, long, PendingIntent))를 사용해야 합니다. 더 짧은 창이 지정된 부정확한 알람은 시스템에서 창을 길게 설정합니다.

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

변경 ID: 142191088
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱은 기기 제조업체가 AndroidManifest.xmluses-native-library 태그를 사용하여 정의한 공개 네이티브 공유 라이브러리의 종속 항목을 선언해야 합니다. 종속 항목 중 하나라도 충족되지 않으면(예: 종속 항목 중 하나가 존재하지 않음) 패키지 관리자가 앱을 설치하지 않습니다. 종속 항목은 태그의 android:required 속성을 사용하여 선택사항으로 지정할 수 있습니다. 이 경우 종속 항목을 충족하지 못해도 설치가 중지되지 않습니다.

앱이 설치되면 앱 매니페스트에서 지정된 네이티브 공유 라이브러리만 앱과 함께 제공됩니다. 앱 매니페스트에 표시되지 않는 네이티브 공유 라이브러리에서 dlopen을 호출하면 실제로 기기에 있는 경우에도 실패합니다.

ENFORCE_STRICT_QUERY_BUILDER

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

사용 설정하면 SQLiteQueryBuilder가 악성 인수를 대상으로 모든 CalendarProvider2 쿼리 선택을 확인합니다.

FGS_BG_START_RESTRICTION_CHANGE_ID

변경 ID: 170668199
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 앱이 백그라운드에서 실행되는 동안 포그라운드 서비스를 시작할 수 있는 시점을 제한합니다.

FGS_START_EXCEPTION_CHANGE_ID

변경 ID: 174041399
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 앱이 백그라운드에서 실행되는 동안 포그라운드 서비스를 시작하려고 하면 시스템에서 IllegalStateException을 발생시킬 수 있습니다.

FINISH_INPUT_NO_FALLBACK_CONNECTION

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

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 기기가 non-interactive가 될 때 InputConnection을 완료합니다.

현재 input method로 사용 설정된 경우 기기가 비대화형이 될 때마다 현재 입력 연결이 finished 상태가 됩니다.

사용 설정되지 않으면 기기가 비대화형이 될 때 현재 입력 연결이 대신 자동으로 비활성화되고 기기가 다시 대화형이 될 때 onFinishInput()onStartInput() 쌍이 전달됩니다.

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
기본 상태: 모든 앱에서 사용 중지됩니다.

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

HIDE_PROP_ICUBINARY_DATA_PATH

변경 ID: 171979766
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 android.icu.impl.ICUBinary.dataPath 속성 액세스 권한을 삭제합니다.

IGNORE_ALLOW_BACKUP_IN_D2D

변경 ID: 183147249
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 기기 간(D2D) 이전 중에 앱에서 android:allowBackup이 무시됩니다.

IGNORE_FULL_BACKUP_CONTENT_IN_D2D

변경 ID: 180523564
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 android:fullBackupContent를 사용하여 지정된 포함 및 제외 규칙이 기기 간(D2D) 전송 중에 무시됩니다.

IME_AUTOFILL_DEFAULT_SUPPORTED_LOCALES_IS_EMPTY

변경 ID: 169273070
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 getSupportedLocales()가 설정되지 않으면 기본 시스템 언어 대신 빈 언어 목록을 반환합니다.

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

변경 ID: 158482162
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 isBackupServiceActive()에 필요한 BACKUP 권한이 BackupManager의 클라이언트 측이 아닌 서비스 측에서 시행됩니다.

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 버전은 공정한 작업 슬롯 예약과 성공적으로 작업을 완료할 더 나은 기회에서 혜택을 받습니다.

LOCK_DOWN_CLOSE_SYSTEM_DIALOGS

변경 ID: 174664365
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 앱에도 android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS 권한이 없으면 Intent.ACTION_CLOSE_SYSTEM_DIALOGS를 전송할 수 없습니다. 이 버전은 앱이 Android 12(API 수준 31) 이상을 타겟팅하기 시작하면 앱에서 Intent.ACTION_CLOSE_SYSTEM_DIALOGS 인텐트 전송을 중지할 것으로 예상하는 더 제한된 버전의 #DROP_CLOSE_SYSTEM_DIALOGS입니다.

LOCK_DOWN_COLLAPSE_STATUS_BAR

변경 ID: 173031413
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 보안상의 이유로 상태 표시줄 패널을 축소하려면 Manifest.permission.STATUS_BAR 권한이 필요합니다. 이는 사용자가 중요한 알림에 액세스하지 못하도록 멀웨어에서 악용되었습니다.

LOW_POWER_EXCEPTIONS

변경 ID: 168936375
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 저전력으로 표시된 모든 LocationRequest 객체가 호출자에 LOCATION_HARDWARE 권한이 없으면 자동으로 요청의 저전력 부분을 삭제하는 대신 예외를 발생시킵니다.

MISSING_EXPORTED_FLAG

변경 ID: 150232615
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 인텐트 필터가 정의될 때마다 android:exported 속성에 명시적 값을 지정해야 합니다.

이 변경사항에 관한 자세한 내용은 더 안전한 구성요소 내보내기를 참고하세요.

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_CANCELLATION_REASONS

변경 ID: 175319604
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

알림 리스너가 더 구체적인 새 취소 사유를 파악할 수 있도록 허용합니다.

NOTIFICATION_TRAMPOLINE_BLOCK

변경 ID: 167676448
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

앱 성능과 UX를 개선하기 위해 Android 12를 타겟팅하는 앱은 서비스나 broadcast receiver를 알림 트램펄린으로 사용할 수 없습니다.

이 변경사항에 관한 자세한 내용은 서비스 또는 broadcast receiver에서 알림 트램펄린을 만들 수 없음을 참고하세요.

NULL_TELEPHONY_THROW_NO_CB

변경 ID: 182185642
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

현재 프로세스의 타겟 SDK 버전이 Android 12(API 수준 31) 이상인지 확인하는 데 사용됩니다.

이 변경사항은 다음 메서드에 적용됩니다.

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에 정의된 중간 값으로 설정됩니다.

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

변경 ID: 160794467
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 앱에서 만드는 각 PendingIntent 객체의 변경 가능 여부를 지정해야 합니다. 이 추가 요구사항은 앱의 보안을 강화합니다.

이 변경사항에 관한 자세한 내용은 대기 중인 인텐트는 변경 가능 여부를 선언해야 함을 참고하세요.

PREVENT_SETTING_PASSWORD_QUALITY_ON_PARENT

변경 ID: 165573442
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 관리자 앱은 DevicePolicyManager.getParentProfileInstance(ComponentName)를 호출하여 가져온 DevicePolicyManager 인스턴스에서 DevicePolicyManager.setPasswordQuality(ComponentName, int)를 사용하여 비밀번호 품질을 설정할 수 없습니다. 대신 DevicePolicyManager.setRequiredPasswordComplexity(int)를 사용하여 기기 전체에 대략적인 비밀번호 요구사항을 설정해야 합니다.

RATE_LIMIT_TOASTS

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

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

REQUIRE_EXACT_ALARM_PERMISSION

변경 ID: 171306433
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 setExactAndAllowWhileIdle(int, long, PendingIntent)setAlarmClock(AlarmClockInfo, PendingIntent) 등 정확한 알람을 설정하는 API를 사용하려면 앱에 Manifest.permission.SCHEDULE_EXACT_ALARM 권한이 있어야 합니다.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_ACTIVE_DATA_SUB_ID

변경 ID: 182478738
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 TelephonyCallback.ActiveDataSubscriptionIdListener를 호출하려면 앱에 Manifest.permission.READ_PHONE_STATE 권한이 있어야 합니다.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_CELL_INFO

변경 ID: 184323934
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 TelephonyCallback.CellInfoListener를 호출하려면 앱에 Manifest.permission.READ_PHONE_STATE 권한이 있어야 합니다.

REQUIRE_READ_PHONE_STATE_PERMISSION_FOR_DISPLAY_INFO

변경 ID: 183164979
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 TelephonyCallback.DisplayInfoListener를 호출하려면 앱에 Manifest.permission.READ_PHONE_STATE 권한이 있어야 합니다.

RESTRICT_ADB_BACKUP

변경 ID: 171032338
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 디버그 가능(true로 설정된 android:debuggable)으로 실행되고 다른 앱에서 사용할 수 없는 앱에 adb backup이 자동으로 사용 설정됩니다.

RESTRICT_DOMAINS

변경 ID: 175408749
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 업데이트된 앱 링크 확인 API 양식이 필요합니다. 이 요구사항은 앱에서 다음 사항이 모두 포함된 인텐트 필터 내에서 도메인을 선언해야 한다는 의미입니다.

  • android:autoVerify="true"
  • Intent.ACTION_VIEW
  • Intent.CATEGORY_BROWSABLE
  • Intet.CATEGORY_DEFAULT
  • 다른 체계가 없는 IntentFilter.SCHEME_HTTP 또는 IntentFilter.SCHEME_HTTPS

이전 버전의 Android에서는 Intent.CATEGORY_BROWSABLE이 요구사항이 아니었고 다른 체계가 허용되었으며 인텐트 필터에서 autoVerifytrue로 설정하면 암시적으로 모든 인텐트 필터가 autoVerify="true"로 설정된 것으로 간주했습니다.

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

변경 ID: 151105954
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 noteOp(String, int, String), noteProxyOp(String, String), startOp(String, int, String)로 전송된 모든 attributionTags가 메서드의 매개변수로 지정된 패키지의 매니페스트에서 정의되도록 강제합니다.

이 변경사항을 사용 설정하려면 noteOp(String, int, String)를 호출하는 패키지와 메서드의 매개변수로 지정된 패키지에 모두 이 변경사항이 사용 설정되어 있어야 합니다.

SELINUX_LATEST_CHANGES

변경 ID: 143539591
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 최신 SELinux 변경사항을 선택합니다. Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 이 변경사항을 사용 중지하는 것은 작동하지 않습니다. 공유 사용자 ID를 사용하는 앱에는 영향을 미치지 않습니다.

SETTINGS_API_V2

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

AndroidManifest.xml 인텐트 필터에서 autoVerify=true로 표시된 도메인을 확인하기 위한 새로운 사용자 환경설정 API는 현재 플랫폼 미리보기에서 아직 구현되지 않았습니다. 현재는 이 ChangeId를 사용 설정하고 adb shell pm set-app-links-user-selection 및 유사한 명령어를 사용하여 새로운 사용자 환경설정 변경사항을 미리 볼 수 있습니다.

USE_SHORT_FGS_USAGE_INTERACTION_TIME

변경 ID: 183972877
기본 상태: Android 12(API 수준 31) 이상을 타겟팅하는 앱에서 사용 설정됩니다.

Android 12(API 수준 31) 이상을 타겟팅하는 앱의 경우 앱이 포그라운드 서비스를 시작할 때 대기 버킷을 ACTIVE로 승격하기 전에 더 짧은 시간 제한을 사용할지 결정합니다.