Android 13 플랫폼에는 앱에 영향을 줄 수 있는 동작 변경사항이 있습니다. targetSdkVersion
과 관계없이 Android 13에서 실행되는 모든 앱에 적용되는 동작 변경사항은 다음과 같습니다. 이러한 변경사항을 적절히 지원해야 하는 경우 앱을 테스트한 후 필요에 따라 수정해야 합니다.
또한 Android 13을 타겟팅하는 앱에만 영향을 주는 동작 변경사항 목록을 검토해야 합니다.
성능 및 배터리
작업 관리자
Android 13(API 수준 33)부터 사용자는 알림 창에서 워크플로를 완료하여 그림 1과 같이 진행 중인 포그라운드 서비스가 있는 앱을 중지할 수 있습니다. 이러한 어포던스를 작업 관리자라고 합니다. 앱은 사용자가 시작한 이러한 중지 작업을 처리할 수 있어야 합니다.
JobScheduler를 사용하여 작업 미리 가져오기 처리 개선
JobScheduler는 앱이 JobInfo.Builder.setPrefetch()
를 사용하여 특정 작업을 '미리 가져오기' 작업으로 표시할 수 있습니다. 미리 가져오기 작업은 사용자 환경을 개선하기 위해 다음번 앱이 실행되기 직전에 실행해야 하는 작업을 의미합니다.
지금까지 JobScheduler는 이 신호를 사용하여, 기회가 있으면 미리 가져오기 작업이 사용 가능한 데이터나 여분의 데이터를 사용할 수 있도록 했습니다.
Android 13(API 수준 33) 이상에서 시스템은 다음에 앱이 실행될 시점을 판단하려고 하며 이 추정을 사용하여 미리 가져오기 작업을 실행합니다. 앱은 다음번 앱 실행에 앞서 실행할 모든 작업을 미리 가져오기 작업으로 처리하도록 시도해야 합니다.
배터리 리소스 사용률
Android 13(API 수준 33)에서는 시스템이 기기 배터리 수명을 더 효과적으로 관리할 수 있는 다음과 같은 방법을 제공합니다.
- 시스템이 '제한됨' 앱 대기 버킷에 앱을 배치하는 경우에 적용되는 규칙 업데이트
- 사용자가 앱의 백그라운드 배터리 사용을 '제한됨' 상태로 설정한 경우 앱이 실행할 수 있는 작업에 관한 새로운 제한사항
이러한 변경사항으로 앱을 테스트할 때는 다음 사항을 확인하세요.
시스템이 앱을 '제한됨' 앱 대기 버킷에 배치할 때 앱이 어떻게 반응하는지 테스트합니다. 다음 Android 디버그 브리지 (ADB) 명령어를 사용하여 앱을 이 버킷에 할당합니다.
adb shell am set-standby-bucket PACKAGE_NAME restricted
백그라운드 배터리 사용에 대해 '제한됨' 상태인 앱에 일반적으로 적용되는 다음 제한사항에 앱이 어떻게 반응하는지 테스트합니다.
- 포그라운드 서비스를 실행할 수 없습니다.
- 기존 포그라운드 서비스가 포그라운드에서 삭제됩니다.
- 알람이 트리거되지 않습니다.
- 작업이 실행되지 않습니다.
다음 ADB 명령어를 사용하여 앱을 이 '제한됨' 상태로 설정합니다.
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND ignore
우선순위가 높은 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 is compiled with the API level 33 SDK or higher
clipData.apply {
description.extras = PersistableBundle().apply {
putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true)
}
}
// If your app is compiled with a lower SDK
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 13에서는 Voice IME, RecognitionService
, 인텐트 기반 API를 비롯한 SpeechService
구현을 Google 앱에서 삭제합니다.
Android 12의 변경사항은 다음과 같습니다.
SpeechService
기능을 기본SpeechService
제공자가 된 Google 음성 서비스 앱으로 이전했습니다.RecognitionService
기능을 Android 시스템 인텔리전스 앱으로 이동하여 기기 내 음성 인식을 지원했습니다.
Android 12에서 앱 호환성을 유지할 수 있도록 Google 앱은 트램펄린을 사용하여 Google 음성 서비스 앱으로 트래픽을 전환합니다. Android 13에서는 이 트램펄린이 삭제됩니다.
앱은 특정 앱을 하드 코딩하는 대신 기기의 기본 SpeechService
제공자를 사용해야 합니다.