Android 11 플랫폼에는 앱에 영향을 줄 수 있는 동작 변경사항이 있습니다. targetSdkVersion
에 관계없이 Android 11에서 실행되는 모든 앱에 적용되는 동작 변경사항은 다음과 같습니다. 이러한 변경사항을 적절히 지원해야 하는 경우 앱을 테스트한 후 필요에 따라 수정해야 합니다.
또한 Android 11을 타겟팅하는 앱에만 영향을 주는 동작 변경사항 목록을 검토해야 합니다.
개인 정보 보호
Android 11에서는 사용자 개인정보 보호를 강화하기 위해 다음을 비롯한 변경사항과 제한사항이 도입되었습니다.
- 일회성 권한: 사용자에게 위치, 마이크 및 카메라 권한에 관한 추가 임시 액세스 권한을 부여하는 옵션을 제공합니다.
- 권한 대화상자 공개 상태: 반복적인 권한 거부는 '다시 묻지 않음'을 의미합니다.
- 데이터 액세스 분석: 앱 자체 코드와 종속 라이브러리 코드 모두에서 앱이 비공개 데이터에 액세스하는 위치에 관한 유용한 정보를 얻습니다.
- 시스템 알림 창 권한: 요청에 따라 앱의 특정 클래스에
SYSTEM_ALERT_WINDOW
권한이 자동으로 부여됩니다. 또한ACTION_MANAGE_OVERLAY_PERMISSION
인텐트 작업이 포함된 인텐트에 따라 항상 사용자가 시스템 설정의 화면으로 이동됩니다. - 영구적 SIM 식별자: Android 11 이상에서는
getIccId()
메서드를 통한 재설정할 수 없는 ICCID 액세스가 제한됩니다. 이 메서드는 null이 아닌 빈 문자열을 반환합니다. 기기에 설치된 SIM을 고유하게 식별하려면 대신getSubscriptionId()
메서드를 사용합니다. 정기 결제 ID는 물리적 및 전자식을 포함하여 설치된 SIM을 고유하게 식별하기 위한 색인 값(1부터 시작)을 제공합니다. 이 식별자의 값은 기기가 초기화되지 않는 한 특정 SIM에 대해 안정적입니다.
자세한 내용은 개인정보 보호 페이지를 참조하세요.
노출 알림
Android 11은 노출 알림 시스템을 염두에 두고 플랫폼을 업데이트합니다. 이제 사용자는 기기 위치 설정을 켜지 않고도 Android 11에서 노출 알림 앱을 실행할 수 있습니다. 이는 노출 알림 시스템을 사용하는 앱이 블루투스 검색을 통해 기기 위치를 추론할 수 없도록 설계되었다는 점을 고려했을 때 노출 알림 시스템에만 적용되는 예외입니다.
사용자 개인정보 보호를 위해 다른 모든 앱은 기기 위치 설정이 켜져 있고 사용자로부터 위치 정보 액세스 권한을 부여받은 경우 외에는 여전히 블루투스 검색을 실행할 수 없습니다. 노출 알림 관련 업데이트 게시물에서 자세한 내용을 확인할 수 있습니다.
보안
SSL 소켓은 기본적으로 Conscrypt SSL 엔진을 사용함
Android의 기본 SSLSocket
구현은 Conscrypt에 기반합니다.
Android 11부터 이 구현은 Conscrypt의 SSLEngine
에 기반하여 내부적으로 빌드됩니다.
Scudo 강화 할당자
Android 11은 Scudo 강화 할당자를 내부적으로 사용하여 힙 할당을 제공합니다. Scudo는 일부 유형의 메모리 안전 위반을 감지하고 완화할 수 있습니다. 네이티브 비정상 종료 보고서에 Scudo 관련 비정상 종료(예: Scudo ERROR:
)가 표시되면 Scudo 문제 해결 문서를 참조하세요.
앱 사용 통계
사용자를 더 잘 보호하기 위해 Android 11은 각 사용자의 앱 사용 통계를 사용자 인증 정보 암호화 저장소에 저장합니다. 따라서 isUserUnlocked()
가 true
를 반환하지 않으면 시스템이나 앱은 앱 사용 통계 데이터에 액세스할 수 없습니다. 이는 다음 중 하나가 일어난 후 발생합니다.
- 사용자가 시스템 시작 후 처음으로 기기의 잠금을 해제합니다.
- 사용자가 기기에서 자신의 계정으로 전환합니다.
앱이 이미 UsageStatsManager
의 인스턴스에 결합되었다면 사용자에 의해 기기의 잠금이 해제된 후 이 객체의 메서드를 호출했는지 확인합니다.
그러지 않으면 API는 이제 null 또는 빈 값을 반환합니다.
5G에 대한 에뮬레이터 지원
Android 11에서는 앱이 최첨단 기능을 추가할 수 있도록 5G API를 추가합니다. 기능을 추가할 때 테스트하기 위해 Android SDK 에뮬레이터의 새로운 기능을 사용할 수 있습니다. 새로운 기능은 에뮬레이터 버전 30.0.22에 추가되었습니다. 5G 네트워크 설정을 선택하면 TelephonyDisplayInfo
가 OVERRIDE_NETWORK_TYPE_NR_NSA
로 설정되고, 예상 대역폭이 수정되며, 데이터 전송량을 설정하여 앱이 NET_CAPABILITY_TEMPORARILY_NOT_METERED
상태 변경에 적절하게 응답하는지 확인할 수 있습니다.
성능 및 디버깅
JobScheduler API 호출 제한 디버깅
Android 11은 앱이 특정 비율 제한을 초과한 잠재적 JobScheduler
API 호출을 식별하도록 디버깅 지원을 제공합니다.
개발자는 이 기능을 사용하여 잠재적인 성능 문제를 식별할 수 있습니다. debuggable
매니페스트 속성이 true로 설정된 앱의 경우 비율 제한을 초과하는 JobScheduler
API 호출은 RESULT_FAILURE
를 반환합니다.
제한은 타당한 사용 사례에 영향을 주지 않도록 설정됩니다.
파일 설명자 새니타이저(fdsan)
Android 10에서는 fdsan
(파일 설명자 새니타이저)이 도입되었습니다.
fdsan
은 종료 후 사용 및 이중 종료와 같이 파일 설명자 소유권이 잘못 처리된 경우를 감지합니다. Android 11에서는 fdsan
의 기본 모드가 변경됩니다. 이제 fdsan
은 오류 감지 시 취소됩니다. 이전 동작에서는 경고가 기록된 후 계속 진행되었습니다. 애플리케이션에서 fdsan
으로 인해 비정상 종료가 발생하면 fdsan documentation
을 참조하세요.
비 SDK 인터페이스 제한사항
Android 11에는 Android 개발자와의 공동작업 및 최신 내부 테스트를 기반으로 제한된 비 SDK 인터페이스의 업데이트된 목록이 포함되어 있습니다. 비 SDK 인터페이스를 제한하는 경우, 가능하면 해당 인터페이스에 대한 공개된 대안이 사용 가능한지 여부를 확인합니다.
Android 11을 타겟팅하지 않는 앱의 경우 이러한 변경사항 중 일부는 개발자에게 곧바로 영향을 주지 않을 수도 있습니다. 그러나 앱의 대상 API 수준에 따라 현재 일부 비 SDK 인터페이스를 사용할 수 있지만 비 SDK 메서드 또는 필드를 사용하면 언제든지 앱이 중단될 위험이 있습니다.
앱에서 비 SDK 인터페이스를 사용하는지 확실히 알 수 없는 경우 앱을 테스트하여 확인할 수 있습니다. 앱에서 비 SDK 인터페이스를 사용하는 경우 대체 SDK로의 이전을 계획해야 합니다. 일부 앱의 경우 비 SDK 인터페이스 사용에 관한 유효한 사용 사례가 있음을 알고 있습니다. 앱 기능을 구현하기 위해 비 SDK 인터페이스 대신 무엇을 사용해야 할지 알 수 없다면 새 공개 API를 요청해야 합니다.
이 Android 버전의 변경사항을 자세히 알아보려면 Android 11의 비 SDK 인터페이스 제한사항 업데이트를 참조하세요. 비 SDK 인터페이스에 관해 전반적으로 알아보려면 비 SDK 인터페이스 제한사항을 참조하세요.
지도 v1 공유 라이브러리 삭제됨
지도 v1 공유 라이브러리가 Android 11에서 완전히 삭제되었습니다. 이 라이브러리는 이전에 지원 중단되었으며 Android 10용 앱에서 작동이 중지되었습니다. Android 9(API 수준 28) 이하를 실행하는 기기에서 이전에 이 공유 라이브러리에 의존했던 앱은 Maps SDK for Android를 대신 사용해야 합니다.
다른 앱과의 상호작용
콘텐츠 URI 공유
앱이 다른 앱과 콘텐츠 URI를 공유한다면 인텐트는 FLAG_GRANT_READ_URI_PERMISSION
및 FLAG_GRANT_WRITE_URI_PERMISSION
인텐트 플래그 중 하나 이상을 설정하여 URI 액세스 권한을 부여해야 합니다.
이렇게 하면 다른 앱이 Android 11을 타겟팅하는 경우에도 콘텐츠 URI에 계속 액세스할 수 있습니다. 콘텐츠 URI가 앱이 소유하지 않은 콘텐츠 제공자와 연결되어 있더라도 앱에 인텐트 플래그가 포함되어 있어야 합니다.
앱이 콘텐츠 URI와 연결된 콘텐츠 제공자를 소유한 경우 콘텐츠 제공자를 내보내지 않았는지 확인합니다. 이 보안 권장사항은 이미 권장되고 있습니다.
라이브러리 로드 중
절대 경로로 ICU 공통 라이브러리 로드
API 28 이하를 타겟팅하는 앱은 dlopen(3)
를 사용하여 절대 경로 '/system/lib/libicuuc.so'로 libicuuc
를 로드할 수 없습니다. 이러한 앱의 경우 dlopen("/system/lib/libicuuc.so", ...)
은 null 핸들을 반환합니다.
대신 라이브러리를 로드하려면 라이브러리 이름을 파일 이름으로 사용하세요(예: dlopen("libicuuc.so", ...)
).