Android 13 개발자 프리뷰에 오신 것을 환영합니다. Android 13을 최고의 버전으로 만들 수 있도록 의견을 제공해 주세요.

동작 변경사항: Android 13 이상을 타겟팅하는 앱

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

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

개인 정보 보호

알림 권한이 포그라운드 서비스 모양에 영향을 줌

사용자가 알림 권한을 거부할 경우 FGS(포그라운드 서비스) 작업 관리자에서는 이러한 포그라운드 서비스와 관련된 알림을 볼 수 있지만 알림 창에서는 알림을 볼 수 없습니다.

근처 Wi-Fi 기기의 새 런타임 권한

이전 버전의 Android에서는 사용자가 핫스팟과 Wi-Fi Direct 연결, Wi-Fi RTT 등과 관련된 일반적인 여러 Wi-Fi 사용 사례를 완료하려면 앱에 ACCESS_FINE_LOCATION 권한을 부여해야 합니다.

사용자가 위치 정보 액세스 권한을 Wi-Fi 기능과 연결하기는 어려우므로 Android 13에서는 Wi-Fi를 통해 근처 액세스 포인트에 대한 기기의 연결을 관리하는 앱을 위해 NEARBY_DEVICES 권한 그룹의 새로운 런타임 권한을 도입했습니다. 이 NEARBY_WIFI_DEVICES 권한은 이러한 Wi-Fi 사용 사례를 충족합니다.

앱이 Wi-Fi API에서 물리적 위치 정보를 얻지 않는 한 Android 13 이상을 타겟팅하고 Wi-Fi API를 사용할 때 ACCESS_FINE_LOCATION 대신 NEARBY_WIFI_DEVICES를 요청하세요. 이 프로세스는 Android 12(API 수준 31)에서 블루투스 기기 정보가 위치에 사용되지 않는다고 어설션할 때 실행하는 프로세스와 유사합니다.

근처 Wi-Fi 기기 권한에 관해 자세히 알아보세요.

백그라운드에서 생체 신호 센서를 사용하려면 새로운 권한이 필요함

Android 13에서는 심박수, 체온, 혈중 산소 농도와 같은 생체 신호 센서에 '사용 중인 동안' 액세스라는 개념이 도입되었습니다. 이 액세스 모델은 Android 10 (API 수준 29)의 위치에 도입되었던 액세스 모델과 매우 유사합니다.

앱이 Android 13을 타겟팅하며 백그라운드에서 실행되는 동안 생체 신호 센서 정보에 액세스해야 하는 경우, 기존 BODY_SENSORS 권한에 더해 새로운 BODY_SENSORS_BACKGROUND 권한을 선언해야 합니다.

보안

인텐트 필터가 일치하지 않는 인텐트를 차단함

앱이 Android 13 이상을 타겟팅하는 다른 앱의 내보낸 구성요소로 인텐트를 보낼 경우, 인텐트는 받는 앱의 <intent-filter> 요소와 일치하는 경우에만 전송됩니다. 즉, 시스템은 다음과 같은 경우를 제외하고 모든 일치하지 않는 인텐트를 차단합니다.

  • 인텐트가 다른 앱의 구성요소로 전송되었으며 이 구성요소가 어떠한 인텐트 필터도 선언하지 않는 경우
  • 인텐트가 앱의 다른 구성요소로 전송된 경우
  • 시스템에서 전송된 인텐트
  • 루트 수준 권한이 있는 사용자가 전송한 인텐트

컨텍스트 등록 수신기의 안전한 내보내기

런타임 수신기를 더 안전하게 만들기 위해, Android 13에서는 앱의 특정 broadcast receiver가 내보내져야 하며 기기의 다른 앱이 볼 수 있어야 하는지 여부를 지정할 수 있습니다. broadcast receiver가 내보내진 경우, 앱으로 다른 앱이 보호되지 않은 브로드캐스트를 보낼 수 있습니다. Android 13 이상을 타겟팅하는 앱에서 사용할 수 있는 이와 같은 내보내기 구성은 앱 취약성의 주요 원인 중 하나를 방지하도록 도와줍니다.

이전 버전의 Android에서는 수신기가 서명 권한에 의해 보호되지 않은 한 기기의 모든 앱이 동적으로 등록된 수신기로 보호되지 않은 브로드캐스트를 보낼 수 있었습니다.

안전을 강화해 주는 이 조치를 구현하려면 다음과 같이 합니다.

  1. DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED 호환성 프레임워크 변경사항을 사용 설정합니다.
  2. 다음 코드 스니펫에서처럼, 앱의 각 broadcast receiver에서 다른 앱이 이 앱으로 브로드캐스트를 보낼 수 있는지 여부를 명시적으로 지정합니다.

    Kotlin

    // This broadcast receiver should be able to receive broadcasts from other apps.
    // This option causes the same behavior as setting the broadcast receiver's
    // "exported" attribute to true in your app's manifest.
    context.registerReceiver(sharedBroadcastReceiver, intentFilter,
        RECEIVER_EXPORTED)
    
    // For app safety reasons, this private broadcast receiver should **NOT**
    // be able to receive broadcasts from other apps.
    context.registerReceiver(privateBroadcastReceiver, intentFilter,
        RECEIVER_NOT_EXPORTED)

    자바

    // This broadcast receiver should be able to receive broadcasts from other apps.
    // This option causes the same behavior as setting the broadcast receiver's
    // "exported" attribute to true in your app's manifest.
    context.registerReceiver(sharedBroadcastReceiver, intentFilter,
        RECEIVER_EXPORTED);
    
    // For app safety reasons, this private broadcast receiver should **NOT**
    // be able to receive broadcasts from other apps.
    context.registerReceiver(privateBroadcastReceiver, intentFilter,
        RECEIVER_NOT_EXPORTED);

성능 및 배터리

배터리 리소스 사용률

사용자가 Android 13을 타겟팅하는 앱의 백그라운드 배터리 사용을 '제한'하면 시스템이 브로드캐스트와 관련된 몇 가지 제한사항을 적용합니다.

Android 13에 도입된 배터리 리소스 사용률 기능에 관해 설명하는 페이지에서 제한된 백그라운드 배터리 사용량에 관한 새로운 제한사항에 관해 자세히 알아보세요.