봄날은 갔다. 이제 그 정신으로 공부하자

Android 13 - 1편 (모든 앱) 본문

학습

Android 13 - 1편 (모든 앱)

길재의 그 정신으로 공부하자 2022. 7. 13. 22:22

 

음... 위 일정을 보니 이제 Android 13에 대해서도 준비를 할 때가 되었네요.

 

우리가 고려해야 할 부분은 다음과 같습니다.

 - 앱 개발 시 target을 Android 13으로 하는 것과

 - 앱이 Android 13을 타겟으로 하지 않아도 설치되는 단말이 Android 13인 경우 두가지 입니다.

 

우선 이번 글에서 단말 플랫폼이 Android 13인 경우에 변경되는 사항에 대해 설명하고 다음으로 

"android 13을 타겟으로 개발하는 앱"에 대해 설명하고 "Foreground Services", "Battery Resource Utilization", "Notification Permission"에 대해 자세히 설명하도록 하겠습니다.

 

 

Android 13 플랫폼에는 앱에 영향을 줄 수 있는 동작 변경사항이 있습니다.

이번 글에서는 targetSdkVersion과 관계없이 Android 13이 설치된 단말에서 실행되는 모든앱에 적용되는 동작 변경사항에 대해 설명하도록 하겠습니다.

 

이미 개발된 앱이 Android 13을 타겟으로 하지 않았더라도 Android 13이 설치된 단말에서는 아래 변경사항이 적용되니 기개발된 앱을 수정하거나 개발하는 앱에 해당 내용을 반영해야 합니다.

 

Performance and battery

Foreground Services (FGS) 작업 관리자

Android 13(API 수준 33)에서는 타겟 SDK 버전과 관계없이 사용자가 "알림창"에서 "포그라운드 서비스"를 중지할 수 있습니다. FGS 작업 관리자라고 하는 이 새로운 기능에는 현재 포그라운드 서비스를 실행 중인 앱 목록이 표시됩니다. 이 목록에는 활성 앱이라는 라벨이 적용되어 있습니다. 각 앱의 옆에는 중지 버튼이 있습니다. 아래 그램은 Android 13을 실행하는 기기에서 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)가 시작될 때 RemoveMessage.getPriority()의 결과를 확인하여 PRIORITY_HIGH인지 확인하고 잠재적인 "ForegroundServiceStartNotAllowedException" 예외를 처리하는 것이 좋습니다.

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

 

 

개인 정보 보호

알림 런타임 권한

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

단, 미디어 세션 및 전화 통화를 자체 관리하는 앱과 관련된 알림은 이 동작 변경사항에서 제외됩니다.

 

POST_NOTIFICATIONS
Protection level: dangerous
Added: API Level 33
Constant value: "android.permission.POST_NOTIFICATIONS"
설명: 앱이 알림 게시를 허용하는데 필요합니다.

 

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

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

// 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)
    }
}

 

Security

SharedUserId 마이그레이션 지원

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

* 주의: 매니페스트에 android:sharedUserId 속성을 이미 정의한 경우, 이를 삭제하면 앱 업데이트가 실패하므로 삭제하면 안됩니다.

<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>

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

 

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

 

User experience

인앱 언어 선택 도구

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

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

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

 

Core functionality

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

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

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

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

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

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

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

Comments