카테고리 없음

[시청 후기] What’s new in Jetpack | Session

0. 서론

 편하게 쓰기 위해선 학습이 더 필요해지게 되었다.

어떤 라이브러리가 제공되는 지, 파악하는 것이 중요해진 것 같다. 학습을 하기 보다는 점차 도입해서 사용해보고, 경험해보는 것을 중점으로 공부를 해야할 것 같다. 정말 빠르게 안드로이드 생태계가 변하고 있다고 생각한다.

 

 

1. 목차

 

2. Jetpack 사용의 확대

 Jetpack은 이제 상위 1000개 앱 중에 79프로 이상이 사용하고 있다.

그래서 기존 라이브러리를 지속적으로 개선하는 작업 또한 활발하게 제공해 새로운 라이브러리로 다양한 문제들을

해결할 수 있도록 도울 것이다.

 

3. Jetpack 변경사항

 Jetpack의 버전이 alpha, beta에 따라서 역할이 다르다.

기능이 불안정하지만, 검증이 되었기 때문에 어느 정도 잘 작동하는 것을 알파버전이라고 한다.

 라이브러리 기능이 완성이 되고, 안정화를 신경쓰는 것을 베타버전이라고 한다.

 이렇게 실험적인 단계의 버전의 jetpack 라이브러리를 사용할 수 있다. 그리고, Jetpack은 각 기능을 분리하는 새 메타데이터를 툴링에 도입을 했다. @Optin 애노테이션을 통해서 실험적인 기능의 API에는 주석이 달려있다. 해당 API를 사용하기 위해서는 OptIn 애노테이션을 사용해야하면, 이것은 추후에 안정적인 버전에 들어서게 되면 제거하면 된다.

 

4. CameraX

 카메라 기능에 대한 기능들을 사용하기 위한 API를 제공한다.

 1. 노출 보상 조정 지원

2. 카메라 생태와 기능에 대한 자세한 정보를 제공

3. FPS 범위와 같은 설정을  Camera2 inter-op으로 변경할 수 있다.

4. OS 기능에서 최신 지원 - HDR 미리보기와 배율 제어

5. Android 방해 금지모드를 지원

6. 지속해서 성능을 개선해서 이미지 캡처와 초기화 속도가 개선되었다.

7. 분할된 카메라 뷰를 제공한다.

8. Preview를 제공하고 이것을 안드로이드 View로 제공한다.

9. 카메라 컨트롤러를 이미지 분석, 추가 캡처 옵션 등 다양한 기능을 제공한다.

 

 

5. AppSearch

 전체 전체 기술 검색이 갖추어야할 모든 기능을 제공한다.

 사용자를 위한 인앱 검색 기능을 제공한다. SQL과 비교하면 퍼지 매칭이 쉽고, 동의어와 철자를 수정하고, 스키마를 표현함으로써 데이터를 단순환하는게 특징이라고 한다.

 

 

6. DataStore

 SharedPrefernce의 단점을 개선해서 데이터를 관리한다. Key, Value로 데이터를 저장하고, Proto DataStore를 프로토콜 버퍼를 통해서 엄격한 규격이나 규격에 맞는 데이터를 저장한다.

 

 SharedPreference보다 DataStore는 장점이 많다.

 

 우선 간단하게 SharedPreferences에서 Data Store로 마이그레이션을 할 수 있다.

SharedPreferenceMigration 객체에 컨텍스트와 프리퍼런스 이름을 넣어주면 된다. 그렇게 되면 DataStore로 액세스가 가능하다.

7. Security Crypto

얼마 전에 Stable 되었으며, 추후에는 DataStore와 통합할 계획을 갖고 있다. (이미 SharedPreferences와는 통합 했다는거지)

아래 보이는 것처럼 쉽게 암호화해서 환경변수들을 관리할 수 있다.

8. Hilt

 Stable에서는 Hilt ViewModel 관리가 Hilt Android API로 이동.

SavedStateHandle이 구성 요소에서 사용할 수 있게 되었다.

개발자는 AndroidEntryPoint를 통해서 viewModel을 얻거나 범위가 지정된 ViewModel을 얻을 수 있다.

 

AssistedInject를 통해서 WorkManager통합도 개선했다.

Hilt 종속성 삽입 그래프에서 종속성을 얻을 수 있어 보일러 플레이트 코드가 줄어들었다.

테스트 코드를 작성하는 것도 개선되었다.

9. WorkManager

WorkManager 라이브러리는 지연 가능한 비동기식 작업을 예약하는데 권장한다. 이 작업은 앱이 있거나 기기를 다시 시작하더라도 작동한다. 조저응ㄹ 통해서 모든 작업에 대해서 안정성을 추가 했다.

 WorkManager에서는 멀티프로세서의 앱에서도 안정성을 개선했고, 대량의 데이터베이스 요청에도 안정성을 개선했다.  새로운 포그라운드 제한을 추가했다. 

 WorkManager Inspector도 추가되어서 WorkManager의 일들을 쉽게 확인할 수 있다.

 

10. Room

 Kotlin 기호 처리에 대한 실험적 지원을 제공한다. 속도가 200프로 향상했고, enum과 RxJava3도 지원한다.

새로운 주석 PRovidedTypeConverter를 통해서 더 유연하게 Converter를 만들 수 있다.

11. ConstraintLayout

ConstraintLayout과 MotionLayout이 안정화 되었다.

모션레이아웃은 폴더블 기기도 제공하고, 코드 없이 애니메이션을 만들 수 있다. MotionLayout, MotionEditor를 NewDesignTool을 통해서 확인하라.

 

12. Fragment

 ActivityResult를 프레그먼트에서 액티비티 결과를 등록할 수 있다.

onAttach 메소드가 depreacated가 되었고, FragmentOnAttachListener가 추가 되어서, 조금 더 유연하게 프레그먼트를 관리할 수 있게 되었다.

13. Navigation Library

 최신 알파 프레그먼트는 Navigation Library와 통합됩니다.

 

14. Google Shortcuts

 Google 어시스턴트와 인터렉션을 사용하기 위해서 해당 라이브러리를 사용할 수 있다.

15. EmojiCompat

 해당 라이브러리를 통해서 이모지를 쉽게 관리할 수 있다.

 

16. Paging (STABLE)

 이번 라이브러리에서는 완전히 코틀린으로 작성, 코루틴과 플로우에 1급 지원. RxJava를 통해서 비동기식으로 로드할 수 있게 되었다.

ui와 repository layer를 분리했다. 3.0 릴리스는 속도도 빨라졌다. 

 

17. Macrobenchmark

앱 성능을 감적으로만 파악하지 않고, 기존의 앱성능 테스트가 어려운 것을 개선시켜 앱의 벤치마크를 분석할 수 있도록 도운 Jetpack. 

개발자는 앱이 시작되는데 걸리는 시간을 중요하게 생각합니다. 'jank'는 앱이 초당 60프레임으로 화면을 그릴 때, 버벅거림, 멈춤을 의맙니다. 기본적으로 'jank'는 앱의 로딩시간이 느릴 때 생깁니다.

 이런 jank를 잡아내면서, 앱성능 테스트의 어려움을 개선시킨 것을 Macrobenchmark의 기능이다.

 

테스트 코드에 아래와 같이 입력을 한다.

matrics : 테스트 시작 시간 위치를 정하는 것

- StartupTimingMetric : 앱이 시작 될 때 프레임성능 벤치마킹

- FrameTimingMetric : 스크롤 및 애니메이션 프레임성능 벤치마킹

CompilationMode : 

- None : 앱을 처음 실행하면 완전히 역컴파일을 진행

- SpeedProfile : 부분적으로 컴파일된 상태로 진행

- Speed : 완전히 컴파일된 상태로 진행

StartupMode : 해당 위치를 다시 실행시킴

- Hot : Activity.onResume()

- Warm : Activity.onStart()

- Cold : Process Init

결과화면

18. Jetpack Compose

- Hilt

- Paging

- Navigation

- Activity

- ViewModel

- ConstraintLayout

과 결합이 가능하다.

 

19. Form factors

폴더블, 대형 화면 기기, 웨어 기기등이 FormFactors를 통해서 쉽게 개발될 수 있다.