동작 변경사항: 모든 앱

Android 11 플랫폼에는 앱에 영향을 줄 수 있는 동작 변경사항이 있습니다. targetSdkVersion에 관계없이 Android 11에서 실행되는 모든 앱에 적용되는 동작 변경사항은 다음과 같습니다. 이러한 변경사항을 적절히 지원해야 하는 경우 앱을 테스트한 후 필요에 따라 수정해야 합니다.

또한 Android 11을 타겟팅하는 앱에만 영향을 주는 동작 변경사항 목록을 검토해야 합니다.

개인정보 보호

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

보안

사용자 인증 정보 없이 OTA 재시작 후 파일 기반 암호화 실행

기기가 OTA 업데이트를 수신하고 다시 시작한 후 사용자 인증 정보로 보호된 저장소에 있는 사용자 인증 정보 암호화 키는 파일 기반 암호화(FBE) 작업에 즉시 사용할 수 있습니다. 따라서 다시 시작한 후 앱은 사용자가 PIN, 패턴 또는 비밀번호를 입력하여 기기 잠금을 해제하기 전에 파일 기반 암호화와 관련된 작업을 실행할 수 있습니다.

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 또는 빈 값을 반환합니다.

카메라

두 대 이상의 카메라를 동시에 사용할 수 있도록 지원

Android 11은 전면 카메라와 후면 카메라를 모두 포함하여 한 번에 두 대 이상의 카메라를 사용할 수 있도록 쿼리 지원에 API를 추가합니다.

앱이 실행되는 기기에서 지원을 확인하려면 다음 메서드를 사용합니다.

  • getConcurrentCameraIds()는 동일한 애플리케이션 프로세스에 의해 구성될 때 보장된 스트림 조합과 동시에 스트리밍할 수 있는 카메라 ID의 조합 Set를 반환합니다.
  • isConcurrentSessionConfigurationSupported()는 카메라 기기에서 상응하는 세션 구성을 동시에 지원할 수 있는지 쿼리합니다.

연결

Open Mobile API 변경사항

Android 11부터 OMAPI(Open Mobile API)에는 다음과 같은 추가 기능이 있습니다.

  • 이동통신사 권한의 규칙을 파싱합니다.

  • 다음 중 하나 이상을 사용하여 삽입된 보안 요소(eSE) 액세스를 맞춤설정하거나 eSE를 프로비저닝합니다.

    • 시스템 독점 권한
    • 구성 가능한 액세스 규칙 애플리케이션 마스터(ARA-M) 애플리케이션 식별자(AID)
    • OMAPI 리더를 재설정하는 시스템 API
  • 기기 기능을 필터링하는 애플리케이션을 위한 명확한 표시기를 리더에 제공합니다.

성능 및 디버깅

JobScheduler API 호출 제한 디버깅

Android 11은 앱이 특정 비율 제한을 초과한 잠재적 JobScheduler API 호출을 식별하도록 디버깅 지원을 제공합니다. 개발자는 이 기능을 사용하여 잠재적인 성능 문제를 식별할 수 있습니다. debuggable 매니페스트 속성이 true로 설정된 앱의 경우 비율 제한을 초과하는 JobScheduler API 호출은 RESULT_FAILURE를 반환합니다. 제한은 타당한 사용 사례에 영향을 주지 않도록 설정됩니다.

파일 설명자 새니타이저(fdsan)

Android 10에서는 fdsan(파일 설명자 새니타이저)이 도입되었습니다. fdsan은 종료 후 사용 및 이중 종료와 같이 파일 설명자 소유권이 잘못 처리된 경우를 감지합니다. Android 11에서는 fdsan의 기본 모드가 변경됩니다. 이제 fdsan은 오류 감지 시 취소됩니다. 이전 동작에서는 경고가 기록된 후 계속 진행되었습니다. 애플리케이션에서 fdsan으로 인해 비정상 종료가 발생하면 fdsan documentation을 참조하세요.

접근성

스크린 리더에는 클릭 기반 접근성 작업의 정의가 필요합니다.

이전 버전의 Android에서 프레임워크는 클릭 기반 접근성 작업을 올바르게 처리하지 않은 위젯에 터치 이벤트를 전달했습니다. 일반적으로 이러한 뷰는 클릭 리스너를 등록하는 대신 터치 이벤트를 직접 처리합니다.

접근성 작업을 올바르게 정의하는 앱에서 더 일관된 동작을 만들기 위해 Android 11에서는 터치 이벤트를 전달하지 않습니다. 대신 시스템은 클릭 기반 접근성 작업 ACTION_CLICKACTION_LONG_CLICK에 전적으로 의존합니다. 이 변경사항은 스크린 리더의 동작에 영향을 미칩니다.

시스템은 OnClickListenerOnLongClickListener 인터페이스를 사용하는 위젯을 처리합니다. 그러나 앱에서 OnTouchListener 인터페이스에 의존하는 더 맞춤설정된 위젯을 사용하면 클릭 기반 접근성 작업의 맞춤 핸들러를 정의해야 합니다. 이렇게 하려면 다음 코드 스니펫과 같이 각 작업에 replaceAccessibilityAction() 메서드를 호출합니다.

Kotlin

// Assumes that the widget is designed to select text when tapped and select
// all text when long-tapped. In its strings.xml file, this app has set
// "select" to "Select" and "select_all" to "Select all", respectively.
ViewCompat.replaceAccessibilityAction(
            WIDGET,
            ACTION_CLICK,
            context.getString(R.string.select)
) { view, commandArguments ->
    selectText()
}

ViewCompat.replaceAccessibilityAction(
            WIDGET,
            ACTION_LONG_CLICK,
            context.getString(R.string.select_all)
) { view, commandArguments ->
    selectAllText()
}

자바

// Assumes that the widget is designed to select text when tapped and select
// all text when long-tapped. In its strings.xml file, this app has set
// "select" to "Select" and "select_all" to "Select all", respectively.
ViewCompat.replaceAccessibilityAction(WIDGET, ACTION_CLICK,
        context.getString(R.string.select),
        (view, commandArguments) -> {
            selectText();
        });

ViewCompat.replaceAccessibilityAction(WIDGET, ACTION_LONG_CLICK,
        context.getString(R.string.select_all),
        (view, commandArguments) -> {
            selectAllText();
        });

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

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

대신 접근성 서비스 메타데이터 파일(일반적으로 res/raw/accessibilityservice.xml)에서 flagRequestAccessibilityButton 플래그를 사용하여 접근성 서비스와 접근성 버튼의 연결을 선언할 수 있습니다.

사용자 인터페이스

SYSTEM_ALERT_WINDOW 변경사항

앱에 SYSTEM_ALERT_WINDOW 권한이 부여되는 방식이 몇 가지 변경되었습니다. 이 변경사항은 권한이 더 의도적으로 부여되도록 하여 사용자를 보호하기 위한 것입니다.

요청에 따라 특정 앱에 SYSTEM_ALERT_WINDOW 권한이 자동으로 부여됩니다

요청에 따라 앱의 특정 클래스에 SYSTEM_ALERT_WINDOW 권한이 자동으로 부여됩니다 이러한 앱에서는 SYSTEM_ALERT_WINDOW 권한을 얻기 위해 ACTION_MANAGE_OVERLAY_PERMISSION를 전송할 필요가 없습니다. 앱에서 SYSTEM_ALERT_WINDOW를 직접 요청할 수 있습니다.

ROLE_CALL_SCREENING이 있고 SYSTEM_ALERT_WINDOW를 요청하는 모든 앱에 자동으로 권한이 부여됩니다. 앱이 ROLE_CALL_SCREENING을 잃으면 권한을 잃게 됩니다.

MANAGE_OVERLAY_PERMISSION 인텐트는 항상 사용자를 시스템 권한 화면으로 안내함

Android 11부터 ACTION_MANAGE_OVERLAY_PERMISSION 인텐트는 앱에 SYSTEM_ALERT_WINDOW 권한을 부여하거나 취소할 수 있는 최상위 설정 화면으로 사용자를 항상 안내합니다. 인텐트의 모든 package: 데이터는 무시됩니다.

이전 버전의 Android에서는 ACTION_MANAGE_OVERLAY_PERMISSION 인텐트가 권한을 관리하는 앱별 화면으로 사용자를 안내하는 패키지를 지정할 수 있습니다. 이 기능은 Android 11에서 더 이상 지원되지 않습니다. 대신 사용자는 먼저 권한을 부여하거나 취소할 앱을 선택해야 합니다. 이 변경사항은 권한이 더 의도적으로 부여되도록 하여 사용자를 보호하기 위한 것입니다.

앱 호환성

비 SDK 인터페이스 제한사항

Android 11에는 Android 개발자와의 공동작업 및 최신 내부 테스트를 기반으로 제한된 비 SDK 인터페이스의 업데이트된 목록이 포함되어 있습니다. 가능하면 Google은 비 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를 대신 사용해야 합니다.