동작 변경사항: Android 11을 타겟팅하는 앱

이전 버전과 마찬가지로 Android 11에는 앱에 영향을 미칠 수 있는 동작 변경사항이 포함되어 있습니다. 다음 동작 변경사항은 Android 11 이상을 타겟팅하는 앱에만 적용됩니다. targetSdkVersion30으로 설정하는 앱의 경우 이러한 동작을 적절하게 지원하도록 앱을 수정해야 합니다(적용되는 경우).

Android 11에서 실행되는 모든 앱에 영향을 주는 동작 변경사항의 목록도 검토하시기 바랍니다.

개인정보 보호

Android 11에서는 사용자 개인정보 보호를 강화하기 위해 다음을 비롯한 변경사항과 제한사항이 도입되었습니다.

  • 범위 지정 저장소 적용: 외부 저장소 디렉터리에 대한 액세스는 앱별 디렉터리 및 앱에서 만든 특정 유형의 미디어로 제한됩니다.
  • 권한 자동 초기화: 사용자가 몇 개월 동안 앱과 상호작용하지 않았다면 시스템이 앱의 민감한 권한을 자동으로 초기화합니다.
  • 백그라운드 위치 액세스: 앱에 백그라운드 위치 정보 액세스 권한을 부여하도록 사용자를 시스템 설정으로 리디렉션해야 합니다.
  • 패키지 공개 상태: 앱이 기기에 설치된 앱 목록을 쿼리하면 반환된 목록이 필터링됩니다.

자세한 내용은 개인정보 보호 페이지를 참조하세요.

보안

힙 포인터 태그하기

변경 세부정보

변경 이름: NATIVE_HEAP_POINTER_TAGGING

변경 ID: 135754954

전환하는 방법

앱과 Android 11의 호환성을 테스트할 때 다음 ADB 명령어를 사용하여 이 변경사항을 사용 설정하거나 사용 중지할 수 있습니다.

adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME

호환성 프레임워크 및 변경사항 전환에 관한 자세한 내용은 앱의 플랫폼 동작 변경사항 테스트 및 디버그를 참고하세요.

이제 힙 포인터는 최상위 바이트(MSB)에 0이 아닌 태그가 있습니다. 이제 MSB를 수정하는 애플리케이션을 포함하여 포인터를 잘못 사용하는 애플리케이션이 비정상 종료되거나 다른 문제가 발생할 수 있습니다. 이 변경사항은 ARM Memory Tagging Extension(MTE)이 사용 설정되는 향후 하드웨어를 지원하는 데 필요합니다. 자세한 내용은 태그된 포인터를 참조하세요.

이 기능을 사용 중지하려면 allowNativeHeapPointerTagging 매니페스트 문서를 참조하세요.

토스트 메시지 업데이트

백그라운드에서 맞춤 토스트 메시지가 차단됨

보안상의 이유로 그리고 좋은 사용자 환경을 유지하기 위해 Android 11 이상을 타겟팅하는 앱이 백그라운드에서 맞춤 뷰가 포함된 토스트 메시지를 보내면 시스템은 이 토스트 메시지를 차단합니다. 텍스트 토스트 메시지는 여전히 허용됩니다. 이들은 setView()를 호출하지 않는 Toast.makeText()를 사용하여 생성된 토스트 메시지입니다.

앱이 백그라운드에서 맞춤 뷰가 포함된 토스트 메시지를 게시하려고 시도하면 시스템은 사용자에게 메시지를 표시하지 않습니다. 대신 시스템에서 logcat에 다음 메시지를 로깅합니다.

W/NotificationService: Blocking custom toast from package \
  <package> due to package not in the foreground

토스트 메시지 콜백

토스트 메시지(텍스트 또는 맞춤)가 표시되거나 사라질 때 알림을 받으려면 Android 11에 추가된 addCallback() 메서드를 사용합니다.

텍스트 토스트 메시지 API 변경사항

Android 11 이상을 타겟팅하는 앱에 다음과 같은 텍스트 토스트 메시지 부작용이 발생합니다.

연결

APN 데이터베이스의 제한된 읽기 액세스

변경 세부정보

변경 이름: APN_READING_PERMISSION_CHANGE_ID

변경 ID: 124107808

전환하는 방법

앱과 Android 11의 호환성을 테스트할 때 다음 ADB 명령어를 사용하여 이 변경사항을 사용 설정하거나 사용 중지할 수 있습니다.

adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME

호환성 프레임워크 및 변경사항 전환에 관한 자세한 내용은 앱의 플랫폼 동작 변경사항 테스트 및 디버그를 참고하세요.

Android 11을 타겟팅하는 앱은 이제 텔레포니 제공자 APN 데이터베이스를 읽거나 데이터베이스에 액세스하려면 Manifest.permission.WRITE_APN_SETTINGS 독점 권한이 있어야 합니다. 이 권한 없이 APN 데이터베이스에 액세스하려고 하면 보안 예외가 발생합니다.

접근성

매니페스트 파일에서 TTS 엔진과의 상호작용 선언

패키지 공개 상태의 변경으로 인해 Android 11을 타겟팅하며 TTS(텍스트 음성 변환) 엔진과 상호작용하는 앱은 다음 <queries> 요소를 매니페스트 파일에 추가해야 합니다.

<queries>
  <intent>
    <action
       android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

메타데이터 파일에서 접근성 버튼 사용 선언

변경 세부정보

변경 이름: REQUEST_ACCESSIBILITY_BUTTON_CHANGE

변경 ID: 136293963

전환하는 방법

앱과 Android 11의 호환성을 테스트할 때 다음 ADB 명령어를 사용하여 이 변경사항을 사용 설정하거나 사용 중지할 수 있습니다.

adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
adb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME

호환성 프레임워크 및 변경사항 전환에 관한 자세한 내용은 앱의 플랫폼 동작 변경사항 테스트 및 디버그를 참고하세요.

Android 11부터 접근성 서비스는 시스템의 접근성 버튼과 연결되어 있다는 런타임 선언을 할 수 없습니다. AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTONAccessibilityServiceInfo 객체의 flags 속성에 추가하면 프레임워크는 접근성 버튼 콜백 이벤트를 서비스에 전달하지 않습니다.

접근성 서비스의 접근성 콜백 이벤트를 수신하려면 접근성 서비스 메타데이터 파일을 사용하여 접근성 버튼과 서비스의 연결을 선언합니다. accessibilityFlags 속성 정의에 flagRequestAccessibilityButton 값을 포함합니다. 접근성 서비스 메타데이터 파일의 일반적인 위치는 res/raw/accessibilityservice.xml입니다.

카메라

미디어 인텐트 작업에 시스템 기본 카메라가 필요함

Android 11부터 사전 설치된 시스템 카메라 앱만 다음 인텐트 작업에 응답할 수 있습니다.

사전 설치된 시스템 카메라 앱을 두 개 이상 사용할 수 있는 경우 시스템에서는 사용자가 앱을 선택할 수 있는 대화상자를 표시합니다. 앱에서 특정 타사 카메라 앱을 사용하여 이미지나 동영상을 대신 캡처하도록 하려면 인텐트의 패키지 이름 또는 구성요소를 설정하여 이러한 인텐트를 명시적으로 만들면 됩니다.

앱 패키징 및 설치

압축된 리소스 파일

변경 세부정보

변경 이름: RESOURCES_ARSC_COMPRESSED

변경 ID: 132742131

전환하는 방법

앱과 Android 11의 호환성을 테스트할 때 다음 ADB 명령어를 사용하여 이 변경사항을 사용 설정하거나 사용 중지할 수 있습니다.

adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME

호환성 프레임워크 및 변경사항 전환에 관한 자세한 내용은 앱의 플랫폼 동작 변경사항 테스트 및 디버그를 참고하세요.

Android 11(API 수준 30) 이상을 타겟팅하는 앱은 압축된 resources.arsc 파일을 포함하거나 이 파일이 4바이트 경계에 정렬되지 않으면 설치할 수 없습니다. 이 조건 중 하나가 있으면 시스템에서 이 파일을 메모리 매핑할 수 없습니다. 메모리를 매핑할 수 없는 리소스 테이블은 RAM의 버퍼로 읽어들여야 하므로 시스템에 불필요한 메모리 압력이 발생하고 기기의 RAM 사용량이 크게 증가합니다.

이전에 압축된 resources.arsc 파일을 사용했다면 앱 리소스 축소 또는 앱 축소, 난독화, 최적화를 위한 다른 방법과 같은 대체 전략을 사용해 보세요.

이제 APK 서명 체계 v2가 필요함

현재 APK 서명 체계 v1만 사용하여 서명한 Android 11(API 수준 30)을 타겟팅하는 앱도 APK 서명 체계 v2 이상을 사용하여 서명해야 합니다. 사용자는 Android 11을 실행하는 기기에서 APK 서명 체계 v1만 사용하여 서명한 앱을 설치하거나 업데이트할 수 없습니다.

앱이 APK 서명 체계 v2 이상으로 서명되고 있는지 확인하려면 Android 스튜디오를 사용하거나 명령줄에서 apksigner 도구를 사용하면 됩니다.

Firebase

Firebase JobDispatcher 및 GCMNetworkManager

앱이 API 수준 30 이상을 타겟팅하면 Android 6.0(API 수준 23) 이상을 실행하는 기기에서 Firebase JobDispatcher 및 GcmNetworkManager API 호출이 사용 중지됩니다. 이전에 관한 자세한 내용은 Firebase JobDispatcher에서 WorkManager로 이전GCMNetworkManager에서 WorkManager로 이전을 참조하세요.

음성 인식

패키지 공개 상태의 변경사항으로 인해 Android 11을 타겟팅하고 음성 인식 서비스와 상호작용하는 앱은 매니페스트 파일에 다음 <queries> 요소를 추가해야 합니다.

<queries>
  <intent>
    <action
       android:name="android.speech.RecognitionService" />
  </intent>
</queries>

OnSharedPreferenceChangeListener의 콜백 변경사항

변경 세부정보

변경 이름: CALLBACK_ON_CLEAR_CHANGE

변경 ID: 119147584

전환하는 방법

앱과 Android 11의 호환성을 테스트할 때 다음 ADB 명령어를 사용하여 이 변경사항을 사용 설정하거나 사용 중지할 수 있습니다.

adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME

호환성 프레임워크 및 변경사항 전환에 관한 자세한 내용은 앱의 플랫폼 동작 변경사항 테스트 및 디버그를 참고하세요.

Android 11(API 수준 30)을 타겟팅하는 앱의 경우 Editor.clear가 호출될 때마다 이제 null 키가 있는 OnSharedPreferenceChangeListener.onSharedPreferenceChanged로 콜백이 실행됩니다.

비 SDK 인터페이스 제한사항

Android 11에는 Android 개발자와의 공동작업 및 최신 내부 테스트를 기반으로 제한된 비 SDK 인터페이스의 업데이트된 목록이 포함되어 있습니다. 비 SDK 인터페이스를 제한하는 경우, 가능하면 해당 인터페이스에 대한 공개된 대안이 사용 가능한지 여부를 확인합니다.

Android 11을 타겟팅하지 않는 앱의 경우 이러한 변경사항 중 일부는 개발자에게 곧바로 영향을 주지 않을 수도 있습니다. 그러나 앱의 대상 API 수준에 따라 현재 일부 비 SDK 인터페이스를 사용할 수 있지만 비 SDK 메서드 또는 필드를 사용하면 언제든지 앱이 중단될 위험이 있습니다.

앱에서 비 SDK 인터페이스를 사용하는지 확실히 알 수 없는 경우 앱을 테스트하여 확인할 수 있습니다. 앱에서 비 SDK 인터페이스를 사용하는 경우 대체 SDK로의 이전을 계획해야 합니다. 일부 앱의 경우 비 SDK 인터페이스 사용에 관한 유효한 사용 사례가 있음을 알고 있습니다. 앱 기능을 구현하기 위해 비 SDK 인터페이스 대신 무엇을 사용해야 할지 알 수 없다면 새 공개 API를 요청해야 합니다.

이 Android 버전의 변경사항을 자세히 알아보려면 Android 11의 비 SDK 인터페이스 제한사항 업데이트를 참조하세요. 비 SDK 인터페이스에 관해 전반적으로 알아보려면 비 SDK 인터페이스 제한사항을 참조하세요.