SDK 버전을 높이기 위해 변경된 사항과
수정해야 할 사항들 중 중요하다 판단되는 것들을 알아보고 정리
Performance and battery
Foreground Services (FGS) 작업 관리자
Android 13(API 33)에서는 타겟 SDK 버전과 관계없이 사용자가 "알림 창"에서 "포그라운드 서비스"를 중지할 수 있다.
FGS 작업 관리자라고 하는 새로운 기능에는 현재 포그라운드 서비스를 실행 중인 앱 목록이 표시된다.
이 목록에는 활성 앱이라는 라벨이 적용되어 있다. 각 앱의 옆에는 중지 버튼이 있다.
아래 그림은 Android 13을 실행하는 기기에서 FGS 작업 관리자 워크플로를 보여준다.
JobScheduler를 사용한 작업 미리 가져오기 처리 개선
JobScheduler는 앱이 JobInfo.Builder.setPrefetch()를 사용하여 특정 작업을 '미리 가져오기' 작업으로 표시할 방법을 제공한다.
미리 가져오기 작업은 사용자 환경을 개선하기 위해 다음번 앱이 실행되기 직전에 실행해야 하는 작업을 의미한다.
JobScheduler는 이제까지 이 신호만 사용하여 미리 가져오기 작업이 기회가 될 경우 사용 가능한 데이터나 여분의 데이터를 사용하도록 했다.
Android 13에서는 시스템이 앱이 다음번에 실행될 시점을 판단하려고 시도하며, 이 추정을 바탕으로 미리 가져오기 작업을 실행한다.
앱은 다음번 앱 실행에 앞서 실행할 모든 작업을 미리 가져오기 작업으로 처리하도록 시도 해야 한다.
배터리 리소스 사용률
"배터리 리소스 사용률" 도입 - 시스템이 기기 배터리 수명을 더 효율족으로 관리 할 수 있는 다양한 방법을 제공한다.
- 시스템 Restricted: "앱 대기 버킷"에 앱을 배치하는 경우에 적용되는 규칙 업데이트
- 사용자가 앱의 "백그라운드 배터리 사용"을 Restricted 상태로 설정한 경우 앱이 실행할 수 있는 작업에 관한 새로운 제한사항
- 장기 실행 "포그라운드 서비스"에 관해 사용자에게 경고하는 새로운 시스템 알림
우선순위가 높은 Firebase 클라우드 메시징(FCM) 할당량
Firebase 클라우드 메시징(FCM) 할당량을 업데이트하여 우선순위가 높은 FCM에 응답하여 알림을 표시하는 앱을 위해 우선순위가 높은 FCM 전송의 안정성을 개선한다.
Android 13(API 수준 33)에서 변경된 사항
앱 대기 버킷이 앱에서 사용할 수 있는 우선순위가 높은 FCM 수를 더 이상 결정하지 않는다.
우선순위가 높은 FCM 할당량은 우선순위가 높은 FCM에 대한 응답으로 사용자에게 표시되는 알림 수에 비례하여 확장된다.
이전 버전 Android에서와 같이 할당량을 초과하는 우선순위가 높은 FCM은 일반 우선순위로 다운그레이드된다.
FCM에 대한 응답으로 포그라운드 서비스(FGS)가 시작될 때 RemoveMessage.getPriority()의 결과를 확인하여 PRIORITY_HIGH인지 확인하고 잠재적인 "ForegroundServiceStartNotAllowedException" 예외를 처리하는 것이 좋다.
애플리케이션에서 우선순위가 높은 FCM에 대한 응답으로 알림을 항상 게시하지는 않는 경우 알림을 유발하는 메시지가 다운그레이드되지 않도록 이러한 FCM의 우선순위를 Normal로 변경하는 것이 좋다.
개인 정보 보호
알림 런타임 권한
- Android 13에서 새로운 런타임 알림 권한인 POST_NOTIFICATIONS 도입
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
- 앱은 포그라운드 서비스를 실행하기 위해 POST_NOTIFICATIONS 권한을 요청할 필요가 없다.
- 그러나 이전 버전의 Android에서와 마찬가지로 앱은 포그라운드 서비스를 시작할 때 알림을 포함해야 한다.
클립보드 민감 콘텐츠 숨기기
- 사용자가 민감한 콘텐츠를 클립보드에 복사할 수 있도록 허용하는 앱은 플래그를 추가하여 클립보드 콘텐츠 미리 보기에서 해당 콘텐츠를 숨겨야 한다.
- 앱에서 사용자가 민감한 콘텐츠(예: 비밀번호나 신용카드 정보)를 클립보드에 복사할 수 있도록 허용하는 경우 ClipboardManager#setPrimaryClip()을 호출하기 전에 ClipData의 ClipDescription에 Flag를 추가해야 한다.
- 이 Flag를 추가하면 민감한 콘텐츠가 콘텐츠 미리보기에 표시되지 않는다.
// 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)
}
}
보안
Intent Filter가 일치하지 않는 Intent 차단
- 앱이 Android 13 이상을 타겟팅하는 다른 앱의 내보낸 구성요소로 인텐트를 전송하면 이 인텐트는 수신 앱의 <intent-filter> 요소와 일치하는 경우에만 전달, 일치하지 않는 인텐트는 차단된다.
- 앱이 Android 13 이상으로 업그레이드되면 다른 앱에서 전송된 모든 인텐트가 앱에서 선언된 <intent-filter> 요소와 일치하는 경우에만 앱의 내보낸 구성요소로 전달된다.
공유 사용자 ID Migration
- 앱이 지원 중단된 android:sharedUserId 속성을 사용하고 이 속성의 기능에 더 이상 종속되지 않는 경우
- 다음 코드 스니펫과 android:sharedUserMaxSdkVersion 속성을 32로 설정할 수 있다.
android:sharedUserId="SHARED_PACKAGE_NAME"
android:sharedUserMaxSdkVersion="32"
이 속성은 앱이 공유 사용자 ID를 더 이상 사용하지 않는다고 시스템에 알림 앱이android:sharedUserMaxSdkVersion을 선언하고 Android 13 이상을 실행하는 기기에 새로 설치된 경우 앱은 android:sharedUserId가 정의된 적이 없는 것처럼 작동. 업데이트된 앱은 여전히 기존 공유 사용자 ID를 사용합니다.
Targeting Android 13, Sdk 33 App
근처 Wi-Fi 기기의 새 런타임 권한
- Android 13 이상을 타겟팅하고 Wi-Fi Api를 사용하는 경우, ACCESS_FINE_LOCATION 대신 NEARBY_WIFI_DEVICES를 요청 (앱이 Wi-Fi API에서 물리적 위치 정보를 얻는 것이 아니어야 함)
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
android:usesPermissionFlags="neverForLocation" />
새로운 Media 권한
- READ_EXTERAL_STORAGE deprecated / 다른 앱에서 만든 미디어 파일에 액세스 해야 하는 경우 다음과 같은 세분화된 미디어 권한을 하나 이상 요청해야 한다.
미디어 유형 | 요청 권한 |
이미지 및 사진 | READ_MEDIA_IMAGES |
동영상 | READ_MEDIA_VIDEO |
오디오 파일 | READ_MEDIA_AUDIO |
백그라운드에서 생체 신호 센서를 사용하려면 새로운 권한이 필요
- Android 13에서는 심박수, 체온, 혈중 산소 농도 등과 같은 생체 신호 센서에 '사용 중인 동안' 액세스라는 개념이 도입
- 앱이 Android 13을 타겟팅하며 백그라운드에서 실행되는 동안 생체 신호 센서 정보에 액세스해야 하는 경우 기존 BODY_SENSORS 권한에 더해 새로운 BODY_SENSORS_BACKGROUND 권한을 선언해야 한다.
<uses-permission android:name="android.permission.BODY_SENSORS" />
<uses-permission android:name="android.permission.BODY_SENSORS_BACKGROUND" />
Android 13
https://developer.android.com/about/versions/13/behavior-changes-all?hl=ko
https://developer.android.com/about/versions/13/behavior-changes-13?hl=ko
'Android > Debugging' 카테고리의 다른 글
RoomDB warning: Schema export directory is not provided (1) | 2023.11.29 |
---|---|
Android Studio New LogCat (0) | 2023.02.27 |
Android GoogleMap Ensure that the "Google Maps Android API v2" is enabled. 구글맵 키 오류 (0) | 2022.08.01 |
무선 Debugging 사용 (0) | 2022.03.22 |
Result API registerForActivityResult() / startActivityForResult() deprecated (0) | 2022.03.21 |