Closed fornewid closed 2 years ago
Android Jetpack은 개발자가 모범 사례(best practices)를 따르고, 상용구 코드(boilerplate code)를 줄이며, 다양한 Android 버전 및 기기에서 일관되게 작동하는 코드를 작성하는 데 도움이 되는 libraries, tools 및 guidance 모음이다.
간단히 말해서 Jetpack을 사용하면 개발자가 관심 있는 코드에 더 쉽게 집중할 수 있다.
대부분의 앱은 이미 기본 기능에 Jetpack의 핵심 라이브러리를 사용하고 있지만 Room 및 WorkManager와 같은 선택적 라이브러리의 채택도 계속해서 증가하고 있다.
작년에 상위 1000개 앱 중 3/4 이상이 2개 이상의 비핵심 Jetpack 라이브러리에 의존했다. 그리고 올해에는 상위 1000개 앱 중 90% 이상이 Jetpack을 사용하고 있다.
Room, WorkManager, and more...
가장 최근에 Room 2.4는 ✅ Kotlin 1.6에 대한 지원을 포함하고, ✅ Kotlin Symbol Processing에 대한 지원을 안정적으로 마쳤다. KSP는 KAPT를 대체하며 빌드 시간을 크게 줄일 수 있다.
Room 2.5는 :warning: 전체 코드를 Kotlin으로 재작성했다. 이전 Java 소스 버전과 바이너리 호환성을 유지하지만, 향후 Kotlin 관련 개선을 위한 토대를 마련한다. :warning: 또한 Paging 3.0을 지원한다. 이제 Room Query에서 paging source를 반환할 수 있다.
또한 Room은 multi-map, nested map, array를 return type으로 사용하는 관계형 쿼리 방법을 지원한다.
이를 통해 개발자는 추가 데이터 구조를 정의하지 않고도 join 쿼리를 수행할 수 있다.
데이터베이스 마이그레이션을 수행하는 개발자를 위해,
데이터베이스 주석의 새로운 autoMigrations
속성을 사용하여 자동 마이그레이션할 버전을 선언할 수 있다.
또한 Room에 테이블 및 열 수정과 관련된 추가 정보가 필요한 경우 AutoMigration 주석을 사용하여 입력을 지정할 수 있다.
Paging 라이브러리를 사용하면, 개발자가 앱의 RecyclerViews 또는 Compose LazyColumns 내에서 데이터를 점진적으로 원활하게 로드할 수 있다.
Paging 3.1은
LoadResult.Invalid
를 추가했다.onPagesPresented
및 addOnPagesUpdatedListener
API를 사용하여 빈 페이지에 대한 오프로드 및 작업 처리를 개선했다.Navigation 라이브러리는 앱의 목적지 간 이동을 위한 프레임워크를 제공하며 최신 버전(2.4)에는 몇 가지 개선 사항이 포함되어 있습니다.
AbstractListDetailFragment
을 제공하여
대형 화면 지원도 향상되었습니다.
이 Fragment는 SlidingPaneLayout
으로 목록 창과 NavHost fragment을 사용하는 세부 정보 창을 관리합니다.DataStore 라이브러리는 많은 SharedPreferences 사용 사례에 대한 강력하고 안정적인 대체품입니다.
작년에 우리는 DataStore를 사용하는 예제를 보여주었습니다. 그리고 올해 우리는 앱의 라이브러리 사용을 테스트하고 종속성 주입과 함께 사용하는 방법에 대한 지침을 포함하여 DataStore에 중점을 둔 최신 Android 개발 기술 내에서 새로운 일련의 비디오 및 기사를 제공합니다. http://goo.gle/mad-skills-datastore
우리는 주요 아키텍처 라이브러리 중 일부를 다루었습니다. 이 모든 것이 어떻게 조화를 이루는지 더 알고 싶다면, "Modern Android Development Skills Architecture"라는 시리즈에서 추가 콘텐츠를 만들었습니다. http://goo.gle/mad-skills-architecture
오늘 이야기한 라이브러리에 대한 심층 분석을 포함하여 최신 Android 개발 모범 사례를 다루는 동영상 및 기사 모음입니다.
Baseline profiles, benchmarking, and more...
개발자가 앱의 성능을 평가하고 개선하는 데 도움이 되도록 라이브러리를 구성하는 데에도 많은 노력을 기울였습니다.
JankStats 라이브러리는 일반적으로 버벅거림(Jank)이라고 하는 드롭된 렌더링 프레임에 대한 보고서를 포함하여 앱의 성능 문제를 추적하고 분석하는 데 도움이 됩니다.
첫인상은 사용자에게 중요하며 설치 직후 앱의 속도는 사용자를 유지하는데 큰 차이를 만들 수 있습니다. 이러한 경험을 개선하기 위해 Baseline Profiles을 만들었습니다.
Baseline Profiles을 사용하면 라이브러리에서 Android 런타임에 code path usage에 대한 메타데이터를 제공할 수 있습니다. 이 메타데이터는 'ahead of time compilation'의 우선 순위를 지정하는 데 사용됩니다.
이렇게 하면 사용자가 앱과 처음 상호 작용할 때 앱을 더 빠르게 만들고 드롭되는 프레임을 줄일 수 있습니다. 이 프로필 데이터는 라이브러리 전체에서 집계되고 앱의 APK에 baseline.prof 파일로 저장되며, 이 파일은 설치 시 앱과 정적으로 연결된 라이브러리 코드를 부분적으로 사전 컴파일하는 데 사용됩니다.
우리는 이미 Jetpack 내에서 Baseline Profiles를 사용하고 있습니다. 더 나은 최종 사용자 경험을 제공하기 위해 Fragment 및 Compose와 같은 인기 있는 라이브러리에 baselines을 추가했습니다.
고유한 Baseline Profiles을 만들려면 개발자가 baselines을 생성하는 것 외에도 Macrobenchmark 라이브러리를 사용해야 합니다.
TraceSectionMetrics
를 사용하여 추적 기반 타이밍 측정을 커스텀할 수 있습니다.AudioUnderrunMetric
를 사용하여 오디오 버벅거림을 감지할 수 있습니다.BaselineProfileRule
로 런타임 최적화에 도움이 되는 프로필을 생성할 수 있습니다.BaselineProfileRule
은 사용자 작업을 람다 내에서 코드로 나타내는 다른 macro benchmarks와 유사하게 작동합니다.
여기서 컴파일러가 미리 최적화해야 하는 중요한 부분은, 런처에서 앱의 Activity를 여는 콜드 스타트입니다.
Macrobenchmark로 Baseline Profiles을 생성하고 사용하는 것에 대한 자세한 내용과 전체 가이드는 Android 개발자 사이트에서 확인하세요. https://d.android.com/studio/profile/baselineprofiles
Tracing 라이브러리를 사용하여 non-debug 빌드에서 정확한 이벤트를 추적할 수 있습니다.
WindowManager, AppCompat, and more...
새로운 WindowManager 라이브러리는 API 레벨 14까지 지원하는 공통 API 서비스를 제공하고, 개발자가 폴더블과 같은 새로운 폼 팩터에 앱을 적용하는 데 도움이 됩니다.
Jetpack SlidingPaneLayout은 WindowManager의 Smart Layout API를 사용하여 가려진 영역에 콘텐츠를 배치하는 것을 방지하도록 업데이트되었습니다.
새로운 DragAndDrop 라이브러리는 앱 내부 및 외부에서 DragAndDrop 데이터를 받을 수 있도록 합니다. 또한 새로운 폼 팩터와 창 모드를 지원합니다. API 레벨 24까지 지원합니다.
AppCompat 1.4부터 Emoji2 라이브러리와 통합하여 API 레벨 14 이상에서 AppCompat이 지원하는 모든 텍스트 기반 View에 새 이모티콘을 기본으로 지원합니다.
Android 13에 추가된 custom locale selection 기능을 API 레벨 14까지 지원하는 backport를 AppCompat 1.6부터 사용할 수 있습니다. 라이브러리에서 자동 저장도 지원한다고 합니다.
1.2 beta
Stable이 된지 불과 몇 개월 밖에 되지 않았지만 현재 상위 1000개 앱 중 100개 이상이 Compose를 사용하고 있다.
기존 앱에 Compose를 점진적으로 통합함에 따라 특히 중첩 스크롤과 같은 일반적인 사용 사례에서 View와 Compose 간의 견고하고 안정적인 상호 운용성이 필요합니다.
Compose 1.2부터 CoordinatorLayout 안에 scrolling composable을 포함하는 것이 훨씬 부드럽고 collapsing toolbar 설정이 쉽다.
Compose 1.2부터 View와 마찬가지로 다운로드 가능한 글꼴을 사용할 수 있습니다.
개발자 생산성을 극적으로 향상시키는 Compose 기능 중 하나는 매우 장황한 RecyclerView 대신 LazyList를 사용하는 방법입니다.
그러나 단순한 행과 열로는 모든 요구사항을 만족시킬 수 없습니다. 따라서 Grid, Custom Layout처럼 더 많은 고급 레이아웃으로 확장하고 있습니다.
자세한 내용은 Lazy Layouts in Compose 영상을 확인하세요.
Compose가 UI가 생성되는 방식 근간을 변경하면서, 생산성을 돕는 새로운 도구가 필요합니다. 재구성을 디버깅할 수 있으며 빠른 업데이트를 위한 도구를 요청받았습니다. What's New in Android Studio 영상에서 자세한 내용을 확인하세요.
Compose를 최대한 활용할 수 있도록 중급 또는 고급 사용 사례를 대상으로 하는 일련의 새로운 강연, Codelab 및 문서를 게시하고 있습니다.
특히 Compose 프로그래밍에서 고성능 UI를 작성하는 데 어려움을 겪었던 개발자라면 Performance best practices for Jetpack Compose 영상을 보면 함정을 피하는 데 도움이 될 것입니다.
Compose는 태블릿 및 폴더블과 같은 다양한 기기 크기에 맞춰 Android 앱을 구현할 수 있다.
Annotation 라이브러리는 코드의 정확성과 유용성을 개선하는, non-null 같은, 친숙한 annotation을 제공한다.
가장 중요한 점은 Annotation 라이브러리를 Kotlin 코드로 마이그레이션하고 있다는 것이다. Kotlin 개발자는 더 적절한 annotation target을 볼 수 있으며, 해당 annotation은 이제 Kotlin 표준 라이브러리에 종속된다.
또한 요청이 많았던 주석들을 추가했다.
@ReturnThis
, @OpenForTesting
, @EmptySuper
, @DeprecatedSinceApi
현재 GitHub에 기여할 수 있는 모듈이 100개 이상 준비되어 있고, 표준 GitHub 기반 Workflow로 기여할 수 있다.
https://youtu.be/jTd82lcuHTU
목차