Android 11과 앱의 호환성 테스트

Android 11에서는 최신 버전의 플랫폼에서 동작 변경사항에 관해 앱을 테스트하고 디버그하는 도구가 도입되었습니다. 이러한 도구는 앱 개발자가 변경사항을 개별적으로 사용 설정하고 사용 중지할 수 있는 새로운 호환성 프레임워크의 일부입니다. 한 가지 변경사항을 사용 중지한 상태에서 플랫폼의 다른 변경사항에 관해 계속 앱을 테스트하거나 한 번에 동작 변경사항 하나씩만 격리하여 테스트하는 유연한 방식을 사용합니다.

모든 앱에 영향을 주는 변경사항 및 Android 11을 타겟팅하는 앱에만 영향을 주는 변경사항을 포함하여 두 가지 유형의 동작 변경사항을 모두 전환할 수 있습니다.

사용 설정된 변경사항을 확인하는 방법

개발자 옵션, logcat 또는 ADB 명령어를 사용하여 현재 어느 동작 변경사항이 사용 설정되었는지 확인할 수 있습니다.

개발자 옵션을 사용하여 사용 설정된 변경사항 확인

그림 1. 개발자 옵션의 앱 호환성 변경사항 화면

기기의 개발자 옵션에서 현재 사용 설정된 변경사항을 확인하고 변경사항을 사용 설정하거나 사용 중지할 수 있습니다. 이 옵션에 액세스하려면 다음 단계를 따릅니다.

  1. 개발자 옵션이 아직 사용 설정되지 않았다면 개발자 옵션을 사용 설정합니다.
  2. 기기의 설정 앱을 열고 시스템 > 고급 > 개발자 옵션 > 앱 호환성 변경사항으로 이동합니다.
  3. 목록에서 앱을 선택합니다.

각 동작 변경사항은 대체로 다음 두 카테고리 중 하나에 속합니다.

  • 앱의 targetSdkVersion에 관계없이 Android 11에서 실행될 때 모든 앱에 영향을 주는 변경사항

    이러한 변경사항은 호환성 프레임워크에서 기본적으로 사용 설정되며 UI의 기본적으로 사용 설정된 앱의 변경사항 섹션에 나열됩니다.

  • Android 11을 타겟팅하는 앱에만 영향을 주는 변경사항

    이러한 변경사항은 Android 11을 타겟팅하는 앱의 경우 호환성 프레임워크에서 기본적으로 사용 설정되며 UI의 SDK 29 이후 사용 설정 섹션에 나열됩니다.

그림 1에 기본적으로 사용 중지된 앱의 변경사항이라는 섹션도 나와 있습니다. 이 섹션에 포함되는 변경사항은 대체로 실험 변경사항입니다.

logcat을 사용하여 사용 설정된 변경사항 확인

각 동작 변경사항에 관해 앱의 프로세스 중 처음으로 앱이 영향을 받는 API를 호출하면 시스템에서 다음과 같은 logcat 메시지가 출력됩니다.

D CompatibilityChangeReporter: Compat change id reported: 141455849; UID 10265; state: ENABLED

각 logcat 메시지에는 다음 정보가 포함됩니다.

변경 ID
앱에 영향을 주는 변경사항을 나타냅니다. 이 값은 앱 호환성 변경사항 화면(그림 1참조)에 나열된 동작 변경사항 중 하나에 매핑됩니다. 이 예에서 141455849ANONYMIZED_DEVICE_ADDRESS_CHANGE_ID에 매핑됩니다.
UID
변경사항의 영향을 받는 앱을 나타냅니다.
상태

변경사항이 현재 앱에 영향을 주는지 여부를 나타냅니다.

상태는 다음 값 중 하나일 수 있습니다.

상태 의미
ENABLED 변경사항이 현재 사용 설정되어 있으며 앱에서 변경된 API를 사용하는 경우 앱의 동작에 영향을 줍니다.
DISABLED

변경사항이 현재 사용 중지되어 있으며 앱에 영향을 주지 않습니다.

참고: 앱의 targetSDKVersion이 필수 임계값 미만(앱이 Android 11을 타겟팅하지 않음)이기 때문에 이 변경사항이 사용 중지되었다면 앱이 Android 11을 타겟팅하도록 targetSDKVersion을 증가시킬 때 변경사항이 기본적으로 사용 설정됩니다.

LOGGED 변경사항이 호환성 프레임워크를 통해 기록되고 있지만 사용 설정 또는 사용 중지할 수 없습니다. 이 변경사항은 전환할 수 없지만 여전히 앱 동작에 영향을 줄 수 있습니다. 자세한 내용은 동작 변경사항 목록에서 변경사항에 관한 설명을 참조하세요. 여러 상황에서 이러한 유형의 변경사항은 실험적이며 무시해도 됩니다.

ADB를 사용하여 사용 설정된 변경사항 확인

다음 ADB 명령어를 실행하여 전체 기기의 (사용 설정 및 사용 중지된) 전체 변경사항 세트를 확인합니다.

adb shell dumpsys platform_compat

출력에 각 변경사항에 관한 다음 정보가 나열됩니다.

변경 ID
이 동작 변경사항의 고유 식별자입니다. 예: 141455849
이름
이 동작 변경사항의 이름입니다. 예: ANONYMIZED_DEVICE_ADDRESS_CHANGE_ID
targetSDKVersion 기준

변경사항을 관리하는 targetSDKVersion입니다(있는 경우).

예를 들어 이 변경사항이 SDK 버전 30 이상을 타겟팅하는 앱에 관해서만 사용 설정된 경우 enableAfterTargetSdk=29가 출력됩니다. 변경사항이 targetSDKVersion에 의해 관리되지 않으면 enableAfterTargetSdk=0이 출력됩니다.

패키지 재정의

변경사항의 기본 상태(사용 설정 또는 사용 중지)가 재정의된 각 패키지의 이름입니다.

예를 들어 기본적으로 사용 설정된 변경사항인 경우 개발자 옵션이나 ADB 중 하나를 사용하여 변경사항을 사용 중지했다면 앱의 패키지 이름이 나열됩니다. 이런 경우 출력은 다음과 같습니다.

packageOverrides={com.my.package=false}

targetSDKVersion으로 관리되는 변경사항은 기본적으로 사용 설정되거나 사용 중지될 수 있으므로 패키지 목록에는 앱의 각 targetSDKVersion에 따라 true 또는 false를 포함할 수 있습니다. 예:

packageOverrides={com.my.package=true, com.another.package=false}

변경사항을 전환할 시기

호환성 프레임워크의 주요 목적은 새로운 Android 버전으로 앱을 테스트할 때 유연하게 제어할 수 있게 만드는 것입니다.

변경사항을 사용 중지할 시기

모든 앱에 영향을 주는 변경사항은 앱의 targetSDKVersion에 관계없이 기본적으로 특정 플랫폼 버전에 사용 설정됩니다. 일반적으로 이러한 변경사항에 관해 먼저 앱을 테스트하고 업데이트하여 이 플랫폼 버전의 사용자가 경험하는 앱 환경이 저하되지 않는지 확인하는 것이 좋습니다. 또한 Android 공개 출시 빌드를 사용할 때는 이러한 변경사항을 사용 중지할 수 없으므로(최종 사용자의 보안을 보호하기 위해) 이러한 변경사항 테스트를 우선시해야 합니다.

앱이 특정 targetSDKVersion을 타겟팅하는 경우 버전에 의해 관리되는 모든 변경사항 또한 기본적으로 사용 설정됩니다.

앱이 이러한 변경사항 중 두 가지 이상의 영향을 받을 수도 있으므로 변경사항을 하나씩 사용 중지할 수 있습니다. 앱이 비정상 종료되는 경우 이 접근법을 사용하여 어떤 플랫폼 변경사항으로 앱이 종료된 것인지 파악하세요.

변경사항을 사용 설정할 시기

특정 targetSDKVersion으로 관리되는 변경사항은 관리되는 버전보다 낮은 SDK 버전을 타겟팅하는 앱의 경우 기본적으로 사용 중지됩니다. 이러한 변경사항을 사용 설정해야 할 경우가 있습니다.

예를 들어 다음 targetSdkVersion에서 일련의 플랫폼 변경사항에 관해 앱을 테스트할 수 있습니다. 앱 매니페스트를 변경하고 모든 변경사항을 한꺼번에 선택하지 말고 개발자 옵션이나 ADB 명령어를 사용하여 각각 관리되는 변경사항을 하나씩 사용 설정하여 테스트할 수 있습니다. 이러한 추가 제어 덕분에 변경사항을 개별적으로 테스트하고 앱의 여러 부분이 한꺼번에 디버깅 및 업데이트되는 것을 방지할 수 있습니다.

변경사항 사용 설정 또는 사용 중지

호환성 프레임워크에서는 개발자 옵션이나 ADB 명령어를 사용하여 각 변경사항을 사용 설정하거나 사용 중지할 수 있습니다. 변경사항을 사용 설정하거나 사용 중지하면 앱이 비정상 종료되거나 중요한 보안 변경사항이 사용 중지될 수 있으므로 변경사항을 전환할 수 있는 시기에 제한사항이 몇 가지 있습니다.

개발자 옵션을 사용하여 변경사항 전환

개발자 옵션을 사용하여 변경사항을 사용 설정하거나 사용 중지하세요. 개발자 옵션을 찾으려면 다음 단계를 따르세요.

  1. 개발자 옵션이 아직 사용 설정되지 않았다면 개발자 옵션을 사용 설정합니다.
  2. 기기의 설정 앱을 열고 시스템 > 고급 > 개발자 옵션 > 앱 호환성 변경사항으로 이동합니다.
  3. 목록에서 앱을 선택합니다.
  4. 변경사항 목록에서 사용 설정하거나 사용 중지할 변경사항을 찾아 스위치를 탭합니다.

    사용 설정하거나 사용 중지할 수 있는 변경사항의 목록

ADB를 사용하여 변경사항 전환

ADB를 사용하여 변경사항을 사용 설정하거나 사용 중지하려면 다음 명령어 중 하나를 실행합니다.

adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
adb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

CHANGE_ID(예: 141455849) 또는 CHANGE_NAME(예: ANONYMIZED_DEVICE_ADDRESS_CHANGE_ID)과 앱의 PACKAGE_NAME을 전달합니다.

다음 명령어를 사용하여 단일 변경사항을 기본 상태로 다시 재설정할 수 있으며 그러면 ADB 또는 개발자 옵션을 사용하여 설정한 재정의가 삭제됩니다.

adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

변경사항 전환의 제한사항

각 동작 변경사항은 기본적으로 사용 설정되거나 사용 중지됩니다. 모든 앱에 영향을 주는 변경사항은 기본적으로 사용 설정됩니다. 다른 변경사항은 targetSdkVersion으로 관리됩니다. 이러한 변경사항은 상응하는 SDK 버전 이상을 타겟팅하는 앱의 경우 기본적으로 사용 설정되고 관리되는 버전보다 낮은 SDK 버전을 타겟팅하는 앱의 경우 기본적으로 사용 중지됩니다. 단일 변경사항을 사용 설정하거나 사용 중지하면 기본 상태가 재정의됩니다.

호환성 프레임워크가 악의적으로 사용되는 것을 방지하기 위해 변경사항을 전환할 수 있는 경우에 관해 몇 가지 제한사항이 있습니다. 단일 변경사항을 전환할 수 있는지 여부는 변경사항의 유형, 앱이 디버그 가능한지 여부, 기기에서 실행 중인 빌드의 유형에 따라 다릅니다. 다음 표에서는 여러 유형의 변경사항을 전환할 수 있는 경우를 설명합니다.

빌드 유형 디버그 불가능한 앱 디버그 가능 앱
모든 변경사항 targetSDKVersion으로 관리되는 변경사항 다른 모든 변경사항
개발자 프리뷰 또는 베타 빌드 전환 불가능 전환 가능 전환 가능
공개 사용자 빌드 전환 불가능 전환 가능 전환 불가능

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

이 섹션의 목록에서는 Android 11의 호환성 프레임워크에 포함된 각 동작 변경사항을 설명합니다. 개발자 옵션 및 ADB 명령어와 함께 이 목록을 사용하여 앱을 테스트하고 디버그하세요.

ADD_CONTENT_OBSERVER_FLAGS

변경 ID: 150939131

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

Android 11을 타겟팅하는 앱의 경우 정수 flags 인수가 포함된 새로운 공개 API 오버로드 onChange(boolean, Uri, int)가 있습니다.

이 새로운 메서드는 정수 userId 인수가 포함된 비 SDK onChange() 오버로드 메서드를 사용하는 앱의 공개 SDK 대안입니다.

ADMIN_APP_PASSWORD_COMPLEXITY

변경 ID: 123562444

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

Android 11을 타겟팅하는 관리자 앱의 경우 앱이 현재 할당된 비밀번호 품질과 관련이 없는 비밀번호 요구사항을 설정할 때마다 오류가 발생합니다. 예를 들어 비밀번호 품질이 DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED로 설정된 경우 앱은 최소 비밀번호 길이를 설정할 수 없습니다. 이 경우 최소 비밀번호 길이를 설정하기 전에 앱이 먼저 setPasswordQuality() 메서드를 호출한 후에만 setPasswordMinimumLength() 메서드를 호출해야 합니다.

또한 Android 11을 타겟팅하는 관리자 앱이 비밀번호 품질을 낮추면 더 이상 적용되지 않는 기존 비밀번호 요구사항이 기본값으로 재설정됩니다.

APP_DATA_DIRECTORY_ISOLATION

변경 ID: 143937733

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

Android 11을 타겟팅하는 앱은 다른 앱의 타겟 SDK 버전과 관계없이 모든 앱의 비공개 데이터 디렉터리에 있는 파일에 더 이상 액세스할 수 없습니다.

자세한 내용은 비공개 디렉터리 액세스를 참조하세요.

APN_READING_PERMISSION_CHANGE_ID

변경 ID: 124107808

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

Android 11을 타겟팅하는 앱의 경우 APN 데이터베이스에 액세스하려면 이제 Manifest.permission.WRITE_APN_SETTINGS 권한이 필요합니다.

이 변경사항에 관한 자세한 내용은 APN 데이터베이스의 제한된 읽기 액세스를 참조하세요.

BACKGROUND_RATIONALE_CHANGE_ID

변경 ID: 147316723

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

이제 앱은 백그라운드에서 기기의 위치 정보에 액세스하도록 요청할 때마다 유효한 근거를 제공해야 합니다.

이 변경사항에 관한 자세한 내용은 Android 11의 위치 정보와 관련된 개인정보 보호 변경사항을 설명하는 Android 11의 백그라운드 위치 정보에 액세스하는 방법 가이드를 참조하세요.

CALLBACK_ON_CLEAR_CHANGE

변경 ID: 119147584

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

Editor.clear가 호출될 때마다 이제 null 키가 있는 OnSharedPreferenceChangeListener.onSharedPreferenceChanged로 콜백이 실행됩니다.

이 변경사항에 관해 자세히 알아보려면 OnSharedPreferenceChangeListener의 콜백 변경사항을 참조하세요.

CALLBACK_ON_MORE_ERROR_CODE_CHANGE

변경 ID: 130595455

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

이제 updateAvailableNetworks(List, Executor, Consumer)setPreferredOpportunisticDataSubscription(int, boolean, Executor, Consumer)의 오류 코드가 확장됩니다.

CALL_BACK_ON_CHANGED_LISTENER_WITH_SWITCHED_OP_CHANGE

변경 ID: 148180766

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

startWatchingMode(String, String, AppOpsManager.OnOpChangedListener)의 사소한 동작 변경사항입니다. 이 변경 이전에 시스템은 전환된 작업을 콜백했습니다. 변경 이후에는 시스템에서 실제로 요청된 작업 또는 전환된 모든 작업(작업이 지정되지 않았다면)을 콜백합니다.

CAMERA_MICROPHONE_CAPABILITY_CHANGE_ID

변경 ID: 136219221

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

Android 11을 타겟팅하는 앱에서는 R.attr.foregroundServiceType이 매니페스트 파일에서 각각 ServiceInfo.FOREGROUND_SERVICE_TYPE_CAMERAServiceInfo.FOREGROUND_SERVICE_TYPE_MICROPHONE으로 구성되었을 때 포그라운드 서비스는 사용 중인 카메라 및 마이크 기능만 수신합니다. 이전 버전의 Android에서는 포그라운드 서비스가 카메라 및 마이크 기능을 자동으로 수신했습니다.

이 변경사항에 관한 자세한 내용은 Android 11의 포그라운드 서비스 유형을 참조하세요.

CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK

변경 ID: 128611929

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

앱은 더 이상 맞춤 토스트 메시지를 백그라운드에 게시할 수 없지만 앱이 백그라운드에 있는 동안 Toast.makeText(Context, CharSequence, int) 메서드 및 변형을 사용하여 계속 토스트 메시지를 게시할 수 있습니다.

이 변경사항에 관한 자세한 내용은 맞춤 토스트 메시지 뷰가 차단됨을 참조하세요.

CHANGE_RESTRICT_SAW_INTENT

변경 ID: 135920175

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

android.settings.MANAGE_APP_OVERLAY_PERMISSION 작업 및 package 데이터 URI 체계를 사용하는 인텐트는 더 이상 관련 권한을 관리하기 위한 앱별 화면으로 사용자를 안내하지 않습니다. 대신, 권한을 요청한 모든 앱을 관리할 수 있는 화면으로 사용자를 안내합니다.

CHANGE_TEXT_TOASTS_IN_THE_SYSTEM

변경 ID: 147798919

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

텍스트 토스트 메시지는 이제 인앱 대신 SystemUI에 의해 렌더링됩니다. 이렇게 하면 앱이 백그라운드에서 맞춤 토스트 메시지를 게시할 때 제한을 우회하는 것을 방지할 수 있습니다.

DEFAULT_SCOPED_STORAGE

변경 ID: 149924527

기본 상태: 모든 앱에 사용 설정됩니다.

Android 11을 타겟팅하는 모든 앱은 이제 기본적으로 범위 지정 저장소를 사용하며 더 이상 범위 지정 저장소를 선택 해제할 수 없습니다.

그러나 이 변경사항을 사용 중지하면 앱의 타겟 SDK 버전 및 매니페스트 플래그 값과 관계없이 범위 지정 저장소 없이 앱을 테스트할 수 있습니다.

Android 11의 범위 지정 저장소 변경사항에 관한 자세한 내용은 Android 11의 Android 저장소 변경사항에 관한 페이지의 범위 지정 저장소 섹션을 참조하세요.

EMPTY_INTENT_ACTION_CATEGORY

변경 ID: 151163173

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

Android 11을 타겟팅하는 앱의 경우 이제 인텐트 필터의 action 또는 category가 빈 문자열이면 시스템에서 오류가 발생합니다. Android 11 이전 플랫폼에서는 이 경우 버그로 인해 오류가 발생하지 않았습니다. 속성이 null이거나 누락된 경우는 항상 오류가 발생하므로 여기에 포함되지 않습니다.

FILTER_APPLICATION_QUERY

변경 ID: 135549675

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

이제 앱은 기기에 있는 다른 앱에 관한 세부정보를 얻으려면 먼저 사용하려는 패키지 및 인텐트를 선언해야 합니다. 앱의 매니페스트에서 <queries> 태그를 사용하여 선언해야 합니다.

Android 11에서 설치된 다른 앱을 쿼리하고 앱과 상호작용하는 방법에 관한 자세한 내용은 패키지 공개 상태 개인정보 보호 페이지를 참조하세요.

FORCE_ENABLE_SCOPED_STORAGE

변경 ID: 값: 132649864

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

Android 11을 타겟팅하는 모든 앱은 이제 기본적으로 범위 지정 저장소를 사용하며 더 이상 범위 지정 저장소를 선택 해제할 수 없습니다.

그러나 앱이 여전히 Android 10(API 수준 29) 이하를 타겟팅하면 이 변경사항을 설정함으로써 앱의 타겟 SDK 버전 및 매니페스트 플래그 값과 관계없이 범위 지정 저장소로 앱을 테스트할 수 있습니다.

Android 11의 범위 지정 저장소 변경사항에 관한 자세한 내용은 Android 11의 Android 저장소 변경사항에 관한 페이지의 범위 지정 저장소 섹션을 참조하세요.

GET_DATA_CONNECTION_STATE_R_VERSION

변경 ID: 148535736

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

PreciseDataConnectionState#getDataConnectionState의 SDK 버전을 확인합니다.

GET_DATA_STATE_R_VERSION

변경 ID: 148534348

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

getDataState()의 SDK 버전을 확인합니다.

GET_PROVIDER_SECURITY_EXCEPTIONS

변경 ID: 150935354

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

Android 11(API 수준 30) 이상을 타겟팅하는 앱의 경우 getProvider(String)에서 더 이상 보안 예외가 발생하지 않습니다.

GET_TARGET_SDK_VERSION_CODE_CHANGE

변경 ID: 145147528

기본 상태: Android 10(API 수준 29) 이상을 타겟팅하는 앱에 사용 설정됩니다.

SmsManager.sendResolverResult() 메서드의 SDK 버전을 확인합니다.

GWP_ASAN

변경 ID: 135634846

기본 상태: 모든 앱에 사용 중지됩니다.

앱에서 샘플 네이티브 메모리 버그 감지를 사용 설정합니다.

이 변경사항에 관한 자세한 내용은 GWP-ASan 가이드를 참조하세요.

HIDE_MAXTARGETSDK_P_HIDDEN_APIS

변경 ID: 149997251

기본 상태: Android 10(API 수준 29) 이상을 타겟팅하는 앱에 사용 설정됩니다.

Android 10(API 수준 29) 이상을 타겟팅하는 앱의 경우 Android 10(API 수준 29)의 max-target-p(greylist-max-p) 목록에 속하는 모든 비 SDK 인터페이스에 대한 액세스 권한을 삭제합니다.

HIDE_MAXTARGETSDK_Q_HIDDEN_APIS

변경 ID: 149994052

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

Android 11(API 수준 30) 이상을 타겟팅하는 앱의 경우 Android 11(API 수준 30)의 max-target-q(greylist-max-q) 목록에 속하는 모든 비 SDK 인터페이스에 대한 액세스 권한을 삭제합니다.

이 변경사항에 관해 자세히 알아보려면 이제 Android 11에서 차단되는 비 SDK 인터페이스를 참조하세요.

LISTEN_CODE_CHANGE

변경 ID: 147600208

기본 상태: Android 10(API 수준 29) 이상을 타겟팅하는 앱에 사용 설정됩니다.

TelephonyManager.listen(PhoneStateListener, int)의 SDK 버전을 확인합니다.

MISSING_APP_TAG

변경 ID: 150776642

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

Android 11을 타겟팅하는 앱의 경우 이제 앱의 매니페스트 파일에 application 또는 instrumentation 태그가 누락되면 오류가 발생합니다.

NATIVE_HEAP_POINTER_TAGGING

변경 ID: 135754954

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

Android 11을 타겟팅하는 앱에서는 네이티브 힙 할당 시 이제 최상위 바이트에 0이 아닌 태그가 있습니다.

자세한 내용은 힙 포인터 태그하기를 참조하세요.

PHONE_STATE_LISTENER_LIMIT_CHANGE_ID

변경 ID: 150880553

기본 상태: 모든 앱에 사용 설정됩니다.

Android 11을 타겟팅하는 앱의 경우 이제 프로세스에서 TelephonyManager.listen(PhoneStateListener, int)를 통해 등록할 수 있는 PhoneStateListener 객체의 수에 제한이 있습니다. 기본 한도는 50개이며 원격 기기 설정 업데이트를 통해 변경될 수 있습니다. 이 제한은 잘못된 프로세스에서 너무 많은 리스너를 등록하려고 시도할 때 TelephonyManager.listen(PhoneStateListener, int)에서 발생하는 IllegalStateException를 통해 적용됩니다.

PREVENT_META_REFLECTION_BLACKLIST_ACCESS

변경 ID: 142365358

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

Android 11을 타겟팅하는 앱은 제한된 비 SDK 인터페이스에 액세스하는 데 추가 리플렉션 레이어를 더 이상 사용할 수 없습니다.

PROCESS_CAPABILITY_CHANGE_ID

변경 ID: 136274596

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

Android 11을 타겟팅하는 앱에서는 이제 Context.BIND_INCLUDE_CAPABILITIES 플래그를 사용하여 클라이언트 프로세스에서 바인드된 서비스로 사용 중인 기능을 전달할 수 있습니다.

REMOVE_ANDROID_TEST_BASE

변경 ID: 133396946

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

Android 11을 타겟팅하는 앱에서는 앱이 android.test.runner에 종속되지 않으면 android.test.base 라이브러리가 삭제됩니다(android.test.base 라이브러리의 클래스에 종속되므로).

REQUEST_ACCESSIBILITY_BUTTON_CHANGE

변경 ID: 136293963

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

Android 11을 타겟팅하는 접근성 서비스의 경우 이제 접근성 서비스 메타데이터 파일에서 FLAG_REQUEST_ACCESSIBILITY_BUTTON 플래그를 지정해야 합니다. 지정하지 않으면 플래그가 무시됩니다.

이 변경사항에 관한 자세한 내용은 메타데이터 파일에서 접근성 버튼 사용 선언을 참조하세요.

RESOURCES_ARSC_COMPRESSED

변경 ID: 132742131

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

Android 11(API 수준 30)을 타겟팅하는 앱은 압축된 resources.arsc 파일을 포함하거나 이 파일이 4바이트 경계에 정렬되지 않으면 설치할 수 없습니다.

이 변경사항에 관한 자세한 내용은 압축된 리소스 파일을 참조하세요.

RESTRICT_STORAGE_ACCESS_FRAMEWORK

변경 ID: 141600225

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

앱이 Android 11을 타겟팅하고 저장소 액세스 프레임워크(SAF)를 사용하는 경우 더 이상 ACTION_OPEN_DOCUMENTACTION_OPEN_DOCUMENT_TREE 인텐트 작업을 사용하여 특정 디렉터리에 액세스할 수 없습니다. 이러한 변경사항에 관한 자세한 내용은 Android 11의 저장소와 관련된 개인정보 보호 업데이트를 설명하는 페이지에서 문서 액세스 제한 섹션을 참조하세요.

SELINUX_LATEST_CHANGES

변경 ID: 143539591

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

이 변경사항은 앱이 untrusted_app_R-targetSDk SELinux 도메인에 액세스하는 것을 제한합니다. 호환성 프레임워크에서 앱의 targetSDKVersion을 변경하지 않으면서 앱이 targetSdkVersion으로 관리되는 다른 변경사항을 전환할 수 있는 기본적인 변경사항 중 하나입니다. 이런 이유로 Android 11을 타겟팅하는 앱에 이 변경사항을 사용 중지해서는 안 됩니다. 사용 중지하면 앱이 작동하지 않습니다.

이 변경사항은 공유 사용자 ID를 사용하는 앱에는 영향을 주지 않습니다.

THROW_SECURITY_EXCEPTIONS

변경 ID: 147340954

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

Android 11 이전에는 권한 오류와 관련하여 SecurityExceptionsetEnabled API에 의해서만 발생했습니다. 이제 Android 11에서는 그렇지 않습니다. SecurityException이 여러 가지 이유로 발생할 수 있으며 그중 어느 것도 호출자에게 노출되지 않습니다.

기존 API 동작을 유지하기 위해 Android 11을 타겟팅하지 않는 앱에 레거시 권한 실패 또는 actor 적용 실패가 발생하면 Android 11 이전의 소스에 있는 IllegalStateException에 예외가 강제 적용됩니다.

USE_SET_LOCATION_ENABLED

변경 ID: 117835097

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

Android 11을 타겟팅하는 관리자 앱은 지원 중단된 Settings.Secure.LOCATION_MODE 설정을 변경하는 데 DevicePolicyManager.setSecureSetting(ComponentName, String, String)을 더 이상 사용할 수 없습니다. 대신 DevicePolicyManager.setLocationEnabled(ComponentName, boolean)를 사용해야 합니다.