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

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

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

개인정보 보호

Android 11에서는 사용자 개인정보 보호를 강화하기 위해 많은 변경사항과 제한사항이 도입되었습니다. 자세한 내용은 개인정보 보호 페이지를 참조하세요.

압축된 리소스 파일

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

기기 간 파일 전송

앱이 Android 11을 타겟팅하는 경우 더 이상 allowBackup 속성을 사용하여 앱 파일의 기기 간 이전을 사용 중지할 수 없습니다. 시스템에서 이 기능을 자동으로 허용합니다.

그러나 앱이 Android 11을 타겟팅하더라도 allowBackup 속성을 false로 설정하여 앱 파일의 클라우드 기반 백업 및 복원을 여전히 사용 중지할 수 있습니다.

연결

성능 기준에 맞는 VPN

API 수준 30 이상을 타겟팅하거나 API 수준 29 이상으로 출시된 기기에서 실행되는 앱은 사용자 구성 및 앱 기반 VPN의 경우 모두 IKEv2/IPsec을 VPN에 적용할 수 있습니다.

VPN이 운영체제에서 기본적으로 실행되므로 앱에서 IKEv2/IPset VPN 연결을 설정하는 데 필요한 코드가 간단해집니다.

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과 앱의 호환성 테스트를 참조하세요.

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

프로세스별 네트워크 액세스 제어

Android 11부터 민감한 사용자 데이터를 처리하는 앱은 프로세스별 네트워크 액세스 권한을 부여할 수 있습니다. 네트워크 액세스가 허용되는 프로세스를 명시적으로 지정하면 데이터를 업로드할 필요가 없는 모든 코드를 분리할 수 있습니다.

이렇게 하면 앱이 실수로 데이터를 업로드하는 것을 막을 수는 없지만 앱의 버그로 인해 데이터가 유출될 가능성을 줄일 수 있습니다.

다음은 새 기능을 사용하는 매니페스트 파일의 샘플을 보여줍니다.

<processes>
    <process />
    <deny-permission android:name="android.permission.INTERNET" />
    <process android:process=":withoutnet1" />
    <process android:process="com.android.cts.useprocess.withnet1">
        <allow-permission android:name="android.permission.INTERNET" />
    </process>
    <allow-permission android:name="android.permission.INTERNET" />
    <process android:process=":withoutnet2">
        <deny-permission android:name="android.permission.INTERNET" />
    </process>
    <process android:process="com.android.cts.useprocess.withnet2" />
</processes>

동일한 FQDN으로 설치된 여러 Passpoint 구성 허용

Android 11부터 PasspointConfiguration.getUniqueId()를 사용하여 PasspointConfiguration 객체의 고유 식별자를 가져올 수 있습니다. 이를 통해 앱 사용자는 동일한 정규화된 도메인 이름(FQDN)으로 여러 프로필을 설치할 수 있습니다.

이 기능은 이동통신사가 네트워크에 MCC(모바일 국가 코드)와 MNC(모바일 네트워크 코드)를 둘 이상의 조합으로 배포하지만 단일 FQDN만 있을 때 유용합니다. Android 11 이상에서는 사용자가 MCC 또는 MNC와 함께 SIM을 설치할 때 홈 제공자와 네트워크가 일치하는 동일한 FQDN을 사용하여 둘 이상의 프로필을 설치할 수 있습니다.

보안

MAC 주소 무작위 지정

Passpoint가 동일 프로필에 관해 여러 SSID에 연결할 수 있기 때문에 Android 10(API 수준 29) 이하를 타겟팅하는 앱에서 MAC 주소 무작위 지정은 SSID별로 이루어집니다. Android 11(API 수준 30) 이상을 타겟팅하는 앱에서 Passpoint 네트워크의 MAC 주소 무작위 지정은 정규화된 도메인 이름(FQDN)별로 변경됩니다.

API 수준 30 이상을 타겟팅하는 앱에서 권한이없는 앱은 기기의 MAC 주소에 액세스할 수 없습니다. IP 주소가 있는 네트워크 인터페이스만 표시됩니다. 이는 RTM_GETLINK netlink 메시지 전송뿐만 아니라 getifaddrs()NetworkInterface.getHardwareAddress() 메서드에도 영향을 줍니다.

다음은 앱이 이 변경사항으로 인해 영향받는 방식의 목록입니다.

  • NetworkInterface.getHardwareAddress()는 모든 인터페이스를 대상으로 null을 반환합니다.
  • 앱이 NETLINK_ROUTE 소켓에서 bind() 함수를 사용할 수 없습니다.
  • ip 명령어가 인터페이스에 관한 정보를 반환하지 않습니다.

이러한 변경사항은 MAC 주소를 사용하지 않음에 나온 안내를 적용합니다.

대부분의 개발자는 하위 수준 NetworkInterface/getifaddrs() API가 아니라 상위 수준 ConnectivityManager API를 사용해야 합니다.

힙 포인터 태그하기

변경 세부정보

변경 이름: 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

호환성 프레임워크 및 변경사항 전환에 관한 자세한 내용은 Android 11과 앱의 호환성 테스트를 참조하세요.

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

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

맞춤 토스트 메시지 뷰가 차단됨

변경 세부정보

변경 이름: CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK

변경 ID: 128611929

전환하는 방법

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

adb shell am compat enable (128611929|CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK) PACKAGE_NAME
adb shell am compat disable (128611929|CHANGE_BACKGROUND_CUSTOM_TOAST_BLOCK) PACKAGE_NAME

호환성 프레임워크 및 변경사항 전환에 관한 자세한 내용은 Android 11과 앱의 호환성 테스트를 참조하세요.

Android 11부터 맞춤 토스트 메시지 뷰는 지원 중단되었습니다. 앱이 Android 11을 타겟팅하면 맞춤 뷰가 포함된 토스트 메시지는 백그라운드에서 게시될 때 차단됩니다. 이전 버전의 Android를 타겟팅하면 맞춤 토스트 메시지 뷰가 계속 작동합니다. 그러나 이 뷰의 사용을 권장하지 않습니다.

가능하다면 스낵바를 대신 사용하는 것이 좋습니다. 앱이 백그라운드에 있는 동안 사용자에게 메시지를 보내야 하는 때와 같이 스낵바를 사용할 수 없는 앱 사용 사례에서는 여전히 텍스트 토스트 메시지를 사용할 수 있습니다. 텍스트 토스트 메시지는 새로운 동작 변경에 의해 제한되지 않기 때문입니다.

이러한 변경사항에 관한 자세한 내용은 Android 11의 토스트 메시지 업데이트를 참조하세요.

이제 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부터 사전 설치된 시스템 카메라 앱만 다음 인텐트 작업에 응답할 수 있습니다.

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

위치 메타데이터를 포함하려면 앱에서 ACCESS_COARSE_LOCATION 또는 ACCESS_FINE_LOCATION 런타임 권한 외에 ACCESS_MEDIA_LOCATION을 선언해야 합니다.