위의 영상을 요약한 내용입니다.


구글 안드로이드 소프트웨어 엔지니어인 이짓 보이어가 안드로이드 Jetpack에 대해서 설명을 시작합니다.

상위 1000개의 앱에서 47%가 두 개 이상의 Jetpack 라이브러리를 사용한다네요.

Hilt

Jetpack 설명하다가 바로 의존성 주입 이야기를 시작하며 Hilt라는 카드를 꺼냅니다.
Hilt는 Dagger 기반의 안드로이드 전용 의존성 주입 라이브러리입니다.

구글이 Jetpack의 첫 소개로 Hilt를 꺼낸만큼 DI에 많은 관심을 두고 있는 것 같습니다.
Dagger를 사용해야하는 이유

  • 코드 재사용성
  • 테스트 용이성
  • 49% 개발자가 DI를 개선해 달라고 요청 했다네요 
    (49%는 어떻게 집계했고, 왜 49%밖에 안되는거지!?)

상위 앱 10000개 에서 안드로이드에서 Dagger를 사용하는 사용하는 앱이 74%나 된다고 하네요.

Hilt와 함께 “Google I/O” 앱을 리팩토링한 결과 의존성 주입 코드를 75% 삭제 할수 있었다고 하네요.

힐트는 다음과 같은 특징을 갖습니다.

  • 이미 성능이 입증된 Dagger 기반으로 빌드 된다.
  • ViewModel, Fragment, WorkManager 등과 같이 Jetpack에 통합된다
  • Android를 위해 정의된 Scope들이 있다
  • 통합 테스트와 Robolectric 테스트를 위한 API를 제공
  • 안드로이드 스튜디오와 통합된다. (오브젝트 그래프를 가시화) 


App Startup

App Startup 라이브러리는 앱 실행시 구성 요소를 초기화하는 간단하고 빠른 방법을 제공한다고 하네요.

App Startup 라이브러리는 다음과 같은 특징을 갖습니다.

  • 앱과 라이브러리 개발자가 같이 사용할 수 있어요.
  • 늦은 초기화(Lazy Initialization)도 지원합니다.
  • 모든 초기화에 자동적으로 추적점을 추가하여, 초기화에 필요한 비용을 측정할 수 있어요.


Android Game SDK

올해 초에 Android Game SDK를 출시했고, 지금은 Jetpack 에 포함되었다고 합니다.
Android Game SDK는 전반적인 기기의 게임 성능을 개선하는데 도움 되도록 만들어졌습니다.

Android Game SDK는 다음과 같은 특징을 갖습니다.

  • 프레임 페이싱 API는 게임에서 안정적인 프레임 레이트를 유지하게 해줍니다. 
     게임의 입력 지연도 줄입니다.
  • 퍼포먼스 튜너에서는 화면 스케일에 맞게 프레임 레이트를 측정하고 최적화 할 수 있도록 도와줍니다. 

Benchmark 1.1

벤치마킹 라이브러리 1.1 출시와 특징

  • CPU 프로파일러와 통합하여 벤치마크를 작성
  • 메모리 할당 추적을 위한 지원 제공

Paging3

페이징3 소개, 페이징은 점진적인 데이터 로딩과 동시에 화면에 나타내는 기술입니다.
첫 코틀린 코루틴을 적용한 라이브러리라고 합니다.

Paging3 특징에 대해서 알아보죠.

  • 코틀린의 코루틴과 플로우로 작성된 라이브러리입니다.
  • 이제 내부적으로 헤더와 푸터를 지원합니다.
  • 새로운 API를 추가해서 로딩 상태를 관찰합니다. 재시도 또는 새로고침도 가능합니다.
  • paging3는 paging2와 완벽하게 호환됩니다.

CameraX (Beta)

CameraX가 지난 2월에 베타 스테이지로 올라왔으며, 정식 릴리즈 스테이지로 올라오기 전에 라이브러리의 신뢰성과 더 나은 공식 문서를 제공하기 위해 힘쓰고 있다고 합니다.

CameraX의 특징은 다음과 같습니다.

  • TestLab이 구형 및 신형기기에 자동화된 테스트 그룹을 작동시키고 관리하기 때문에 현재는 90% 안드로이드기기에서는 CameraX가 잘 동작합니다. 이는 4억개의 활성화된 기기를 뜻합니다.
  • PreviewView는 앱에서 카메라로 입력되는 화면을 보여주는 미리보기 위젯입니다.
    애플리케이션 생명주기와 상호작용하며, 내부적으로 최적화 되었기 때문에 버퍼링이 덜하고 전력효율이 좋습니다.
  • YUV에서 RGB로 변환을 쉽게하여 더욱 익숙한 포맷에서 이미지 프로세싱을 할 수 있도록 도와줍니다.


WorkManager

다음은 지연될 수 있는 백그라운드 작업을 도와주는 WorkManager 입니다.

작업 요청(WorkRequest)의 처리량 개선했으며, 이제는 장기간 혹은 중요한 작업을 지원합니다.

WorkManager가 왜 작동을 안하는지 알기 힘들때가 있는데, 이제는 Diagnostics API를 사용하여 현재 WorkManager의 작업 상태를 확인할 수 있습니다.

다음과 같은 내용을 호출하면 WorkManager현재 상태를 logcat에 출력하게 됩니다.

Navigation

Navigation은 앱에서 화면간 이동 및 전환을 도와주는 라이브러리입니다.

Navigation 2.3에서 달라진 점

  • Dynamic Feature Module 지원
  • 딥링크 개선
  • 결과 반환하기(Returning Results)

결과 반환하는 내용에 대해서 좀 더 알아봅시다.

앱의 각 화면에는 NavBackStackEntry를 구현하고 있다. 동일한 항목의 상태에도 접근할 수 있도록 하며, 환경설정이 바뀌어도 결과물이 유지되도록 혹은 처리하도록 Navigation은 화면 간 데이터 전달에 SavedStateHandle을 사용한다.

 

startActivityForResult API

startActivityForResult API등장. (이건 안드로이드 초기에 나왔어야할 API다…) 

새로운 startActivityForResult API로 ActivityResultContracts를 호출하면 다음과 같은 일들을 할 수 있습니다.

  • 권한 요청 및 승인 처리를 쉽게 할 수 있습니다.
  • intent에 포함된 데이터를 type-safe하게 처리 할 수 있습니다.

이 외에도 사진을 찍는다거나 콘텐츠를 얻는다거나 문서를 여는 것 등 정의된 API내용을 통해 호출할 수 있습니다.

AppCompat

AppCompat라이브러리는 다양한 범위의 UI구성 요소 및 메테리얼 테마 다크모드의 플랫폼 기능을 위해 *백포트를 지원합니다.

*백포트(Backport) : 백포트는 최신 버전의 소프트웨어 시스템 또는 소프트웨어 구성 요소에서 부품을 가져 와서 동일한 소프트웨어의 이전 버전으로 포팅하는 작업입니다

 

AppCompat 라이브러리의 API를 최대한 활용할 수 있도록 Lint를 사용해 개발자에게 API 사용을 유도합니다.

AppCompat에서 새로 개선된 특징

  • 더 신뢰할만한 다크 테마
  • 환경설정을 재정의 하는 API

다크모드 이야기가 나와서 하는 이야기인데, Jetpack의 웹킷 라이브러리는 1.2.0 출시에서 새로운 API를 포함한다. 콘텐츠에 다크모드를 적용할 수 있다는 내용이다. 

화살표를 친 부분이 여러분이 기억해야할 중요한 부분들이라고 한다.

 

오늘 다루지 않은 내용은 ‘Android Jetpack의 새로운 점’ 블로그 게시물에 있다고 한다.

Jetpack blog → https://goo.gle/3heHMYh

Android Jetpack → https://goo.gle/2Ai1SQH

Related Playlists: Android 11 → https://goo.gle/android11

Modern Android Development playlist → https://goo.gle/modern-android-develo…

Jetpack playlist → https://goo.gle/jetpack

Subscribe to Android Developers → https://goo.gle/AndroidDevs

 

Buy me a coffeeBuy me a coffee

1개의 댓글

레츠고 · 2020년 6월 17일 11:34 오후

정리하느라 고생많으셨습니다. 깔끔하네요. 앞으로도 좋은글 많이 부탁드릴게요!!

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.