JetPack 과 AndroidX 에 관하여 간략하게 정리한 글입니다.

 

JetPack

  • 안드로이드 앱 개발을 보다 손쉽게 할 수 있게 도와주는 라이브러리, 도구, 가이드 모음
  • 이미 널리 쓰이는 아래와 같은 라이브러리들을 모아서 JepPack이라 부르고 새로운기능도 추가
    • Android Architecture Component
    • Support-v4
    • AppCompat-v7
    • ConstraintLayout
    • Design Support Library (중 일부)
  • 안드로이드 개발에 로켓을 달아줌??
  • Cute logo 있음

 

 

So Why JetPack ?

  • 하위 호환성 보장
    • 플랫폼에 새로운 기능이 추가 된다 하더라도(예를 들어 JobScheduler) 사용자가 그 버전의 OS 를 쓰지 않으면 결국 그 기능을 쓸 수 없다. 그리하여 코드내에서 분기를 해서 플랫폼 별로 코드를 작성한다던지 하는 불편함을 감수 해야 했다.하지만 JetPack 에 새로 도입된 WorkManager 를 사용하면 깔끔하게 코드를 작성할 수 있다. 따라서 버전별 고민 없이 그냥 라이브러리에서 가져다 쓰면 된다는 편리함 있음.
    • 코틀린의 경우 ViewTreeObserver 에서 onPreDraw 에서 뭔가를 해주어야 되는 경우, doOnPreDraw 로 깔끔하게 작성할 수 있음
    • IDE 와 통합되어 ROOM 에서 SQL Annotation 사용시 annotation 작성시 오류가 있을 경우 오류를 보여줌

 

 

JetPack 에 새로 포함된 기능들

  • WorkManager
  • Navigation
  • Paging
  • Slice
  • Recyclerview Selection
  • Recyclerview ListAdaptor
  • androidx.webkit
  • Browser action
  • HeifWriter
  • Material Components - Design 의 독자적인 라이브러리로 계속 발전 예정
    • https://material.io/develop/android/

 

 

 

AndroidX

  • android.support.v4, v7, v9 .... 등 하위 호환성을 위해 더럽게 만들어야 했던 지원라이브러리 버전들을 깔끔하게 정리(사실 현재는 minSDK 가 v9 보다 훨씬 윗 버전으로 올라가 버렸기 때문에 더이상 지원라이브러리명이 무의미 하게 되어 버렸다)
  • 앱에서 다른 라이브러리를 쓰는 경우 그 라이브러리가 사용하는 지원라이브러리와 내가 쓰고 있는 라이브러리 디펜던시가 다를 경우 충돌이 발생하게 되는데 그걸 해결하려고 gradle dependency 선언할때 지원라이브러리 버전을 exclude 해버리거나 해야 했음. 그래서 이걸 깔끔하게 정리해서 지원라이브러리명을 androidx.* 로 통일함
  • 기존의 덩치가 컷던 라이브러리들을 위젯, 유스케이스 별로 분리
    • support-core-ui
      • asynclayoutinflater
      • drawerlayout
      • interpolater
      • cursoradapter
      • customview
      • slidingpanellayout
      • swiperefreshlayout
      • viewpager
    • support-compat
      • core
      • collections (java library)
    • support-core-utils
      • documentfile
      • loader
      • localbroadcastmanager
      • print
  • 라이브러리 네이밍시 기능단위로 그룹/아티팩트 ID, 패키지명 지정 (v4, v7 따위는 모두 제거)
    • Maven
      • androidx.<feature>:<feature>-<sub-feature>
      • androidx.lifecycle.lifecycle-viewmodel:2.0.0-beta01
    • Java 패키지
      • androidx.<feature>.ClassName
      • androidx.lifecycle.ViewModel
    • So, 내가 원하는 라이브러리, 패키지를 찾기 쉬워짐
  • AndroidX 1.0.0 으로 버전 리셋
  • 엄격한 Semantic versioning 도입으로 의존성 관계를 깔끔하게 정리하고자 함
    • 1.0.0 : <MAJOR>.<MINOR>.<PATCH> 
    • binary 호환성이 깨질때 major 버전이 올라가고, 기능이 추가될때 마이너 버전이 올라감, PATCH:버그픽스
    • 예 : viewmodel 에 새로운 기능이 들어오면 viewmodel:1.0 -> viewmodel:1.1 이런식으로
  • Design Support Library 의 경우는 전부 androidx 로 전환되지 않고 정말 필수적 기능만 androidx 로
    • androidx.coordinatorlayout.CoordinatorLayout
  • 나머지는 Material Components 로
    • com.google.android.material
  • Support Library 28.0.x 버전은 마지막이고 AndroidX 1.0.x 가 거의 동일한 기능 제공
  • Support Library 28 버전을 끝으로 AndroidX 로 마이그레이션이 필요함
    • Android Studio 에서 Source code 마이그레이션 기능을 지원함 (Refactor -> Migration to)
    • Jetifier - binary 단에서 마이그레이션 제공(Jar 파일 등)
      • gradle.properties 를 통해 활성화
        • android.useAndroidX=true
        • android.enableJetifier=true
        • VCS 에 커밋하는게 좋음
      • 빌드시 쓰이는 (kapt, annotationProcessor 등) 라이브러리가 레거시 패키지를 참조한다면 여전히 문제 발생 가능
  • Cute logo 없음

+ Recent posts