동작 변경사항: 모든 앱

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

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

성능 및 배터리

FGS(포그라운드 서비스) 작업 관리자

알림 창 하단에는 현재 백그라운드에서 실행 중인 앱의 개수를 나타내는 버튼이 있습니다. 이 버튼을 누르면 여러 앱의 이름이 나열된 대화상자가 표시됩니다. 중지 버튼은 각 앱의 오른쪽에 있습니다.
그림 1. Android 13 기기의 FGS 작업 관리자 워크플로

Android 13(API 수준 33)에서는 타겟 SDK 버전과 관계없이 사용자가 알림 창에서 포그라운드 서비스를 중지할 수 있습니다. FGS 작업 관리자라고 하는 이 새로운 기능에는 현재 포그라운드 서비스를 실행 중인 앱 목록이 표시됩니다. 이 목록에는 활성 앱이라는 라벨이 적용되어 있습니다. 각 앱의 옆에는 중지 버튼이 있습니다. 그림 1은 Android 13을 실행하는 기기에서 FGS 작업 관리자 워크플로를 보여줍니다.

FGS 작업 관리자에 관해 자세히 알아보세요.

JobScheduler를 사용한 작업 미리 가져오기 처리 개선

JobScheduler는 앱이 JobInfo.Builder.setPrefetch()를 사용하여 특정 작업을 '미리 가져오기' 작업으로 표시할 방법을 제공합니다. 미리 가져오기 작업은 사용자 환경을 개선하기 위해 다음번 앱이 실행되기 직전에 실행해야 하는 작업을 의미합니다. JobScheduler는 이제까지 이 신호만 사용하여 미리 가져오기 작업이 기회가 될 경우 사용 가능한 데이터나 여분의 데이터를 사용하도록 했습니다.

Android 13에서는 시스템이 앱이 다음번에 실행될 시점을 판단하려고 시도하며, 이 추정을 바탕으로 미리 가져오기 작업을 실행합니다. 앱은 다음번 앱 실행에 앞서 실행할 모든 작업을 미리 가져오기 작업으로 처리하도록 시도해야 합니다.

배터리 리소스 사용률

Android 13(API 수준 33)에서는 시스템이 기기 배터리 수명을 더 효율적으로 관리할 수 있는 다양한 방법을 제공하는 배터리 리소스 사용률을 도입했습니다.

  • 시스템이 '제한됨' 앱 대기 버킷에 앱을 배치하는 경우에 적용되는 규칙 업데이트
  • 사용자가 앱의 백그라운드 배터리 사용을 '제한됨' 상태로 설정한 경우 앱이 실행할 수 있는 작업에 관한 새로운 제한사항
  • 장기 실행 포그라운드 서비스에 관해 사용자에게 경고하는 새로운 시스템 알림

우선순위가 높은 Firebase 클라우드 메시징(FCM) 할당량

Android 13(API 수준 33)에서는 Firebase 클라우드 메시징(FCM) 할당량을 업데이트하여 우선순위가 높은 FCM에 응답하여 알림을 표시하는 앱을 위해 우선순위가 높은 FCM 전송의 안정성을 개선합니다. Android 13(API 수준 33)에서 변경된 사항은 다음과 같습니다.

  • 앱 대기 버킷이 앱에서 사용할 수 있는 우선순위가 높은 FCM 수를 더 이상 결정하지 않습니다.
  • 우선순위가 높은 FCM 할당량은 우선순위가 높은 FCM에 대한 응답으로 사용자에게 표시되는 알림 수에 비례하여 확장됩니다.

이전 버전의 Android에서와 같이 할당량을 초과하는 우선순위가 높은 FCM은 일반 우선순위로 다운그레이드됩니다. FCM에 대한 응답으로 포그라운드 서비스(FGS)가 시작될 때 RemoteMessage.getPriority()의 결과를 확인하여 PRIORITY_HIGH인지 확인하고 잠재적인 ForegroundServiceStartNotAllowedException 예외를 처리하는 것이 좋습니다.

애플리케이션에서 우선순위가 높은 FCM에 대한 응답으로 알림을 항상 게시하지는 않는 경우 알림을 유발하는 메시지가 다운그레이드되지 않도록 이러한 FCM의 우선순위를 일반으로 변경하는 것이 좋습니다.

개인 정보 보호

알림 런타임 권한

Android 13(API 수준 33)에서는 새로운 런타임 알림 권한 POST_NOTIFICATIONS를 도입했습니다. 이 변경사항으로 인해 사용자는 가장 중요한 알림에 주목할 수 있습니다.

이 기능의 추가적인 제어 기능과 유연성을 이용할 수 있도록 가급적 빠른 시일 내에 Android 13을 타겟팅할 것을 적극 권장합니다.

앱 권한 권장사항에 관해 자세히 알아보세요.

클립보드에서 민감한 콘텐츠 숨기기

앱에서 사용자가 민감한 콘텐츠(예: 비밀번호나 신용카드 정보)를 클립보드에 복사할 수 있도록 허용하는 경우 ClipboardManager#setPrimaryClip()을 호출하기 전에 ClipData의 ClipDescription에 플래그를 추가해야 합니다. 이 플래그를 추가하면 민감한 콘텐츠가 콘텐츠 미리보기에 표시되지 않습니다.

민감한 콘텐츠를 신고하지 않은 복사된 텍스트 미리보기
민감한 콘텐츠를 신고하지 않은 복사된 텍스트 미리보기
민감한 콘텐츠를 신고하는 복사된 텍스트 미리보기
민감한 콘텐츠를 신고하는 복사된 텍스트 미리보기

민감한 콘텐츠를 신고하려면 ClipDescription에 불리언 추가 항목을 추가하세요. 모든 앱은 타겟팅된 API 수준과 관계없이 이 작업을 실행해야 합니다.


// When your app targets API level 33 or higher
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
    }
}

// If your app targets a lower API level
clipData.apply {
    description.extras = PersistableBundle().apply {
        putBoolean("android.content.extra.IS_SENSITIVE", true)
    }
}

새로운 클립보드 UI에 관해 자세히 알아보려면 복사하여 붙여넣기 기능 페이지를 방문하세요.

보안

공유 사용자 ID에서 이전

앱이 지원 중단된 android:sharedUserId 속성을 사용하고 이 속성의 기능에 더 이상 종속되지 않는 경우 다음 코드 스니펫과 같이 android:sharedUserMaxSdkVersion 속성을 32로 설정할 수 있습니다.

<manifest ...>
    <!-- To maintain backward compatibility, continue to use
         "android:sharedUserId" if you already added it to your manifest. -->
    android:sharedUserId="SHARED_PACKAGE_NAME"
    android:sharedUserMaxSdkVersion="32"
    ...
</manifest>

이 새 속성은 앱이 공유 사용자 ID를 더 이상 사용하지 않는다고 시스템에 알립니다. 앱이 android:sharedUserMaxSdkVersion을 선언하고 Android 13 이상을 실행하는 기기에 새로 설치된 경우 앱은 android:sharedUserId가 정의된 적이 없는 것처럼 작동합니다. 업데이트된 앱은 여전히 기존 공유 사용자 ID를 사용합니다.

공유 사용자 ID는 패키지 관리자 내에서 비결정적 동작을 일으킵니다. 대신 앱에서는 공유 구성요소 간 상호 운용성이 용이하도록 서비스 및 콘텐츠 제공자와 같은 적절한 커뮤니케이션 메커니즘을 사용해야 합니다.

사용자 환경

인앱 언어 선택 도구

Android 13에서는 앱별 언어 설정을 한곳에서 할 수 있는 기능이 휴대전화 설정에 추가되었습니다. 앱에서 다국어를 지원하는 경우 사용자가 다른 앱의 언어 설정을 변경하는 같은 위치에서 앱의 언어 설정을 변경할 수 있도록 앱의 매니페스트에서 android:localeConfig 속성을 선언하는 것이 좋습니다.

또한 현재 맞춤 인앱 언어 선택 도구를 사용하는 앱은 대신 앱별 언어 설정을 위한 새 API를 사용해야 합니다. 새 API를 사용하면 사용자가 계속해서 인앱 언어 선택 도구를 통해 언어를 선택하는지, 아니면 휴대전화 설정을 통해 언어를 선택하는지와 관계없이 원하는 언어로 앱을 보도록 할 수 있습니다.

다국어를 지원하지 않는 앱은 이러한 변경사항의 영향을 받지 않습니다.

핵심 기능

음성 서비스 구현의 기존 사본이 삭제됨

Android 13에서는 SpeechService 구현을 Google 앱에서 삭제합니다.

여기에는 Voice IME, RecognitionService, 인텐트 기반 API가 포함됩니다.

Android 12에서 있었던 변경사항은 다음과 같습니다.

  • SpeechService 기능을 기본 SpeechService 제공자가 된 Google 음성 서비스 앱으로 이전했습니다.
  • RecognitionService 기능을 Android 시스템 인텔리전스 앱으로 이동하여 기기 내 음성 인식을 지원했습니다.

Android 12에서 앱 호환성을 유지할 수 있도록 Google 앱은 트램펄린을 사용하여 Google 음성 서비스 앱으로 트래픽을 전환합니다. Android 13에서는 이 트램펄린이 삭제됩니다.

앱은 특정 앱을 하드 코딩하는 대신 기기의 기본 SpeechService 제공자를 사용해야 합니다.