위의 영상을 요약한 내용입니다.
구글 안드로이드 소프트웨어 엔지니어인 이짓 보이어가 안드로이드 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 사용을 유도합니다.
- 더 신뢰할만한 다크 테마
- 환경설정을 재정의 하는 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
1개의 댓글
레츠고 · 2020년 6월 17일 11:34 오후
정리하느라 고생많으셨습니다. 깔끔하네요. 앞으로도 좋은글 많이 부탁드릴게요!!