Android 12 개발자 프리뷰에 오신 것을 환영합니다. 초기에 자주 의견을 제공하여 Android 12를 최고의 버전으로 만들도록 도와주세요.

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

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

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

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

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

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

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

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

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

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

ALLOW_TEST_API_ACCESS

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

앱이 @TestApi API에 액세스하도록 허용합니다.

참고: 이 변경사항은 기본적으로 사용 중지되어 있으며 플랫폼 테스트 코드에서만 사용해야 합니다.

BLOCK_FLAG_SLIPPERY

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

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

BLOCK_GPS_STATUS_USAGE

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

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

BLOCK_IMMUTABLE_PENDING_INTENTS

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

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

BLOCK_PENDING_INTENT_SYSTEM_API_USAGE

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

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

BLOCK_UNTRUSTED_TOUCHES

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

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

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

CAMERA_MIC_INDICATORS_NOT_PRESENT

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

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

DELIVER_HISTORICAL_LOCATIONS

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

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

DROP_CLOSE_SYSTEM_DIALOGS

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

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

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

ENFORCE_NATIVE_SHARED_LIBRARY_DEPENDENCIES

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

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

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

ENFORCE_STRICT_QUERY_BUILDER

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

Android 12 이상을 타겟팅하는 앱의 경우 이제 SQLiteQueryBuilder에서 악성 인수를 대상으로 모든 CalendarProvider2 쿼리 선택을 확인합니다.

FGS_BG_START_USE_EXEMPTION_LIST_CHANGE_ID

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

패키지에서 false로 설정된 경우 ActiveServices.sFgsBgStartExemptedPackages에 있더라도 시스템이 FGS-BG-start에서 패키지를 제외하지 않습니다.

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_RESIZE_APP

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

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

HIDE_PROP_ICUBINARY_DATA_PATH

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

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

IS_BACKUP_SERVICE_ACTIVE_ENFORCE_PERMISSION_IN_SERVICE

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

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

KEYSTORE_OPERATION_CREATION_MAY_FAIL

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

Android 12 이상을 타겟팅하는 앱의 경우 이제 키 저장소 작업 생성이 실패할 수 있습니다. 키 저장소는 암호화 작업 생성이 항상 성공한다는 가정하에 작동했습니다. 그러나 KeyMint 백엔드에는 제한된 수의 작업 슬롯만 있습니다.

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

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

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

LOW_POWER_EXCEPTIONS

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

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

MISSING_EXPORTED_FLAG

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

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

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

NATIVE_MEMTAG_ASYNC

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

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

NATIVE_MEMTAG_SYNC

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

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

NOTIFICATION_TRAMPOLINE_BLOCK

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

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

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

PENDING_INTENT_EXPLICIT_MUTABILITY_REQUIRED

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

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

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

RATE_LIMIT_TOASTS

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

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

RETURN_NULL_HARDWARE_ADDRESS

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

Android 11(API 수준 30) 이상을 타겟팅하는 앱의 경우 하드웨어 주소가 액세스 불가하면 getHardwareAddress()에서 null을 반환합니다. 변경사항이 사용 중지되면 대신 기본 MAC 주소(02:00:00:00:00:00)가 반환됩니다.

이 변경사항에 관한 자세한 내용은 Netlink MAC 주소 제한사항을 참고하세요.

SECURITY_EXCEPTION_ON_INVALID_ATTRIBUTION_TAG_CHANGE

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

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

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

SELINUX_LATEST_CHANGES

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

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

THROW_EXCEPTION_ON_REQUIRE_INSTALL_PACKAGES_TO_ADD_INSTALLER_PACKAGE

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

Android 11(API 수준 30) 이상을 타겟팅하는 앱의 경우 아직 설치되지 않은 패키지에 설치 프로그램 패키지 이름을 추가하려면 이제 INSTALL_PACKAGES 권한이 필요합니다. 호출자가 Android 11(API 수준 30)을 타겟팅하면 SecurityException이 발생합니다. 그 외의 경우에는 요청이 자동으로 실패합니다. 두 경우 모두 그리고 이 변경사항의 사용 설정 여부와 관계없이 설치 프로그램 패키지는 변경되지 않고 유지됩니다.