본문 바로가기
Android/Android Development

Google I/O '21

by 2Plus 2021. 6. 20.

 

Photo by Pawel Czerwinski on Unsplash

 Google I/O '21을 진행한지 기간이 조금 지났지만, 늦게나마 일부 내용을 정리해두려고 한다. 이 글의 밑 쪽에 관련 영상과 문서의 링크가 추가되어 있다. 이 글은 어떤 내용들이 있는지를 간략하게 정리해두고, 필요하거나 관심이 있는 내용들을 파악해서 어떤 것을 더 찾아봐야할 지 결정할 수 있도록 하는 데 목적을 둔다.

 

 

What's new in Android

 

 Android 역사상 가장 큰 규모로 디자인이 변경되었다. 색상, 모양, 빛, 모션에 이르기까지 모든 환경이 새롭게 디자인되었다.

 

 

유저 인터페이스

 먼저, 색상에 많은 신경을 썼는데 사용하는 시스템 색상 팔레트를 더 풍부하고 폭넓게 제공하여 유저가 배경화면이나 색상을 선택함에 따라 앱에서 사용하는 색상도 자동으로 맞춰져서 동작할 수 있다. 물론 OEM에 따라 다소 차이가 있을 수 있다. API를 통해 색상을 조합하여 사용하고 싶다면 시스템에서 제공하는 색상을 사용하면 된다. 시스템에서 설정된 기본 색, 강조되는 색 등이 자동으로 적용되어 앱을 그릴 수 있다. 색상 팔레트는 Public API를 통해 사용할 수 있으며 방대한 양이 제공된다. 기기 전체에서 사용하는 색상 팔레트를 인덱싱하고 채도를 변경하여 사용할 수 있다.

 

 어떻게 적용되는 지에 대한 예시이다.

 

[정리]

 

  • 더 다양한 시스템 색상 팔레트를 사용하고 전체 조화를 이룰 수 있도록 함
  • 배경화면 선택만으로도 디바이스 전체의 색상을 변경할 수 있게 됨
  • 디폴트 팔레트가 아닌 색상 커스텀을 위해서는 복잡한 팔레트 수정이 필요

 

 

위젯

 위젯을 사용하는 사람은 많은데, 시각적인 디자인 업데이트 면에서 그동안 위젯은 사랑받지 못했다. 안드로이드 12에서는 시스템 UI에서 위젯을 쉽게 선택할 수 있도록 했다. 위젯 선택과 배치 과정도 간소화했다. 위젯 내부에서 레이아웃을 사용하면 앞서 말한 색상 팔레트를 사용하여 다른 앱, 위젯, 화면과 전체적인 조화를 이룰 수 있다. 새로운 방식을 구축하는 새로운 API도 나온다.

 

[정리]

 

  • 체크박스, 스위치, 라디오 버튼 등의 새로운 interactive control 요소를 추가
  • 시스템 UI, 테마, 런처에 맞추어 radius와 padding이 자동 조정
  • 반응형 레이아웃을 사용하여 폰, 태블릿, 폴더블 디바이스의 화면에 맞게 위젯을 조정
  • 개인화된 일관적인 스타일을 위해 동적 색상 API 추가
  • 위젯 관련 API들 업데이트 예정 : RemoteView 등에 영향

 

 

Trampoline

 Notification에서 알림을 선택하여 앱을 실행할 때, 오른쪽 이미지와 같이 중간에 공백기가 생기면서 멈춘 것처럼 느껴지는 경우가 자주 있다. 이는 유저 경험을 안 좋게 만드는데,앱이 알림에서 Activity를 직접 시작하지 않고 broadcast를 보내거나 service를 시작하기 때문이다. 많은 앱은 모든 알림에 진입점을 만들고 background에서 앱을 시작하는 형태로 구현되어 있으며, 이를 trampoline이라고 한다. 앞으로 개발자는 반드시 알림의 콘텐츠 인텐트에서 Activity를 시작하도록 구현해야 한다. 그렇지 않으면 알림이 작동하지 않도록 trampoline 자체를 막았다.

 

[정리]

 

  • Trampoline이 막힘
  • 앞으로 반드시 알림의 Intent에서 액티비티를 시작해야 함

 

 

Toast

 토스트 메시지가 뜰 때 옆에 앱 아이콘이 함께 떠서 어떤 앱에서 보낸 건지 사용자가 알 수 있도록 변경되었다. 입력 가능한 텍스트 글자 수도 줄어들었다. 전달할 내용이 길다면 알림을 통해 보내는 게 맞다. 여러 개의 토스트가 쌓이면 시간이 지나면서도 계속 뜨기 때문에 앱마다 토스트가 쌓일 수 있는 개수도 줄였다.

 

[정리]

 

  • 토스트 메시지 옆에 앱 아이콘 함께 노출
  • 텍스트 글자 수 제한
  • 토스트가 쌓일 수 있는 개수 줄어듦

 

 

Notifications

 템플릿을 새로 디자인했다. 표준 템플릿을 사용했다면 아무것도 하지 않아도 이번 업데이트에 따라 예쁘게 수정될 것이다. 커스텀을 많이 했다면 이번 업데이트에서는 특히 많은 수정이 필요하다. Custom RemoteView는 사용이 완전히 중단될 것이며, DecoratedCustom 템플릿 스타일은 아직 사용할 수 있다. 하지만 업데이트마다 각 개발자가 각 기기에 맞춰 세세하게 디자인을 해야 하는 악순환을 벗어나기 위해 Custom RemoteView는 예전처럼 지원되지 않는다. DecoratedCustomViewStyle로 기능을 옮겨서 그 주변의 시스템 데코가 문제 없이 표시되도록 했다.

 

[정리]

 

  • 색상 팔레트, 테마, 폰트, radius 등이 변경됨
  • 표준 템플릿 사용시 별도의 코드 수정 불필요
  • 커스텀하여 사용 중이었다면 많은 코드 수정 필요
  • Custom RemoteView 사용 중단

 

 

시스템 스플래시 화면 (Launch Animation)

 앱이 로드될 때 런처에서부터 아이콘을 확대하는 애니메이션이 나온다. 아무것도 안 해도 예쁜 애니메이션으로 동작하도록 되어있지만, 맘에 안 든다면 애니메이션을 바꾸거나 시스템 버전을 수정할 수도 있다. 앱 아이콘이 확대되거나 펼쳐지는 등의 움직임을 보이는 애니메이션을 수정할 수 있다.

 직접 만들어둔 애니메이션을 사용해도 되지만, 이번에 새로 추가된 기능은 앱 선택 즉시 실행되는 것이 장점이다. 기존의 방식은 앱을 시작하더라도 실행되고 라이브러리 등이 로드될 때까지 기다려야 한다. 시스템 스플래시 화면은 최상의 환경을 위해 필요하고 사용자들도 원하는 것이다.

 

[정리]

 

  • 앱 런치 애니메이션 변경
  • 앱이나 시스템에서 커스텀하게 변경해도 됨
  • 이미 구현한 것을 사용해도 되지만 기존 방식은 앱이 시작돼서 라이브러리 등의 로드가 필요한 반면, 시스템 스플래시를 사용하면 즉각적인 동작이 가능하다

 

 

스트레치 오버스크롤 엣지 효과

 화면이 늘어나는 효과로 변경되었다. 이것도 자동적으로 적용된다. 다만, 적용시 window를 타겟팅하는 것이 아니라 각 텍스처를 타겟팅하여 동작하도록 구현되어 있다. 효과를 제어하는 API가 제공된다. 한 가지 우려되는 문제점은 한 화면에서 동시에 여러 뷰가 나오는데 같은 스크롤 Y를 추적한다면 스크롤링 컨테이너만 해당 효과가 적용된다. 스크롤이 가능한 layout들을 중첩하여 사용 중이라면 자연스럽게 동작하지 않을 수 있다. 몇 개월 내로 자세한 추가 발표 예정이니 추후에 추가 확인이 필요하다.

 

[정리]

 

  • 늘어나는 효과로 변경
  • 스크롤이 가능한 layout을 중첩 사용 시 문제 발생 가능성 존재

 

 

Audio-coupled Haptic Playback

미디어 플레이어의 오디오 트랙을 햅틱 생성기로 보내면 소리에 맞춰서 진동이나 햅틱 반응을 생성해준다. 게임에서 발자국 소리 등도 다 되기 때문에 몰입도 증가가 가능하다. 지원되지 않는 기기도 있기 때문에 API를 통해 지원 가능한지 체크 후 사용하는 것을 추천한다.

 

[정리]

 

  • 오디오 트랙을 통해 진동/햅틱 반응 생성

 

 

기타 UI 사항들

  • PIP에서 CrossFade를 이용하여 화면 전환을 매끄럽게 표현 가능
  • 블러 기능 추가
    • 모든 뷰에서 사용 가능
    • 뷰, window의 밖, window 안 모두 가능
  • 리플 효과 추가
  • AVIF 이미지 포맷 지원 (무손실 압축, alpha, HDR, 무제한 가능)

 

 

Privacy

사용자에게 자신의 데이터가 어떻게 처리되는지를 알리고 차단이 가능하도록 변경되었다. 위치와 관련된 변화. 블루투스 권한이 따로 생겼기 때문에 위치 권한을 요청하지 않아도 된다. 사용자가 위치 권한을 제공하되 정확한 위치를 제공할지, 대략적인 위치를 제공할지를 선택하여 제공하도록 변하였다. 권한 요청시에 사용자가 고를 수 있도록 바뀌었다. clipboard는 키보드와 포어그라운드 앱만 사용할 수 있는데, 이제는 앱이 클립보드를 사용하는 경우 클립보드에 액세스한다고 사용자에게 알려준다. 백그라운드에서 포어그라운드 제한도 변경되었다. 이것이 배터리를 많이 잡아먹고 있는데, 포어그라운드 서비스가 백그라운드에서 시작되지 않도록 제한되었다. setExpedited라는 새 method를 사용하여야 한다. 포어그라운드 서비스를 이동하려면 WorkManager API에서 setExpedited method를 사용해야 한다.

 

[정리]

 

  • 블루투스 권한 신규 추가 (Location Permission 사용하지 않아도 됨)
  • 사용자가 본인의 위치 제공시 정확도 선택 가능
  • App이 클립보드를 사용하는 경우 토스트 메시지 알림
  • Foreground Service가 Background에서 시작하지 않도록 제한 (배터리 문제) → WorkManager API를 통해 Foreground Service 이동 가능

 

 

앱 간 경험 통합

Drag&Drop, Copy&Paste, Keyboard Stickers 이 세 가지를 모두 구현해야 했는데, Android 12부터는 onReceiveContentListener 한 가지로 통합되었다. 문제는 플랫폼 호환성인데, 현재는 AndroidX API를 사용하는 게 좋다. 플랫폼 전체에 구현되어있지는 않고 아직 진행 중이다. 장기적으로는 AndroidX 사용을 추천한다.

 

 

기타 추가 주제

 별도로 확인 및 정리가 추가로 필요한 주제들이다.

 

  • Performance 측정시 Macrobenchmark 사용 가능
  • Wear 소식
  • Android Tools (Android Studio, Arctic Fox)
  • Jetpack (Datastore, WordManager, Navigation, Macrobenchmark)
  • Android Gradle Plugin

 

 

영상 링크

문서 링크

반응형

댓글