Everyday Growing Engineer 2023. 2. 28. 17:25

Live Data에 대해서 공부하다가 Android JetPack중 하나라는데...  그러면 JetPack은 무엇인가??

1. JetPack이란 :

  • Jetpack은 2018년 5월 8일에 구글이 발표한 라이브러리와 도구 모음집이다.
  • 개발자들이 더욱더 편리하기, 빠르게, 쉽게 높은 퀄리티의 앱을 개발하도록 돕는 모음 도구이다.

사실 Jetpack이 나오기 전 Support library라고 하는 라이브러리 모음집이 이미 존재했었다.

그러나 Support library에는 여러 가지 문제점이 있었고 이를 개선하면서 새로운 이름을 붙여 다시 나온 것이 Jetpack인 것이다. Support library는 현재도 사용 가능하지만 위 사진(공식 문서)에 쓰여있듯이 AndroidX를 사용할 것을 권장하고 있다. (AndroidX는 Jetpack의 라이브러리들을 묶은 패키지 명이다)

즉, Support library라는게 이미 있었으나 문제점 때문에 새로 나온게 Jectpack이라는 거임.

2. Support library 문제점

2-1. Support Library는 패키지명과 버전 규칙이 모호했다

더보기

com.android.support:support-v5

com.android.support:support-v14

v14가 마치 v5를 다 포함한것 같은느낌이지만, 사실 API레벨 14 이상에서 사용 가능이라는 뜻을 가지고 있어서 착각의 여지가 있음.

2-2. 단일 라이브러리로 제공된다.

더보기

서포트 라이브러리는 3만 여개의 함수를 제공하는 단일 라이브러리였다.

이게 무슨 말이냐면 난 ViewPager 기능을 사용하고 싶어서 라이브러리를 추가했는데

원치 않는 다른 라이브러리도 함께 추가된다는 뜻이다.

 

앱의 규모가 커지거나 라이브러리 내의 메서드가 많으면 '64K reference limit'이라는 에러를 만나게 된다.

이 에러는 dex파일이 64K를 넘어가면서 뜨는 에러이다.

안드로이드는 MainActivity.java -> MainActivity.class -> MainActivity.dex 이렇게 변환해서 사용한다.

즉, 클래스 파일이 많아질수록 dex파일의 용량도 커진다.

 

기본적으로 APK당 하나의 DEX파일을 사용하기 때문에 64K 이내의 용량을 사용해야 하는데

서포트 라이브러리는 이 에러가 뜨게 만드는 주원인이 되었다.

이 문제를 해결할 수 있는 multidex라는 기술이 나왔지만 여전히 단일 라이브러리는 좋은 방법이 아니라는 게 분명하다.

2-3. 바이너리 호환성 제약 

더보기

단일 라이브러리의 단점이 나오는 부분.

기능 A, B가 있다고 가정하고 둘다 버전이 업그레이드 됬지만 하나의 기능이 오류를 만들경우 

모든 기능들을 다운그래이드 시켜야한다

3. Jetpack 구성요소

activity * Activity에 기반하여 빌드된 구성 가능한 API에 액세스합니다.
appcompat * 이전 API 버전의 플랫폼에서 새 API에 액세스할 수 있습니다(대부분 Material Design 사용).
appsearch * 사용자를 위한 맞춤 인앱 검색 기능을 빌드합니다.
camera * 모바일 카메라 앱을 빌드합니다.
compose * 모양과 데이터 종속 항목을 설명하는 구성 가능한 함수를 사용하여 프로그래매틱 방식으로 UI를 정의합니다.
databinding * 레이아웃의 UI 구성요소를 선언적 형식을 사용하여 앱의 데이터 소스에 결합합니다.
fragment * Activity 내에서 호스팅되는 여러 개의 독립적인 화면으로 앱을 분할합니다.
hilt * Dagger Hilt의 기능을 확장하여 androidx 라이브러리에서 특정 클래스의 종속 항목 삽입을 사용 설정합니다.
lifecycle * 활동이나 프래그먼트의 현재 수명 주기 상태를 기반으로 동작을 조정할 수 있는 수명 주기 인식 구성요소를 빌드합니다.

이것들 말고도 훨씬 많다.... https://developer.android.com/jetpack?hl=ko

 

Android Jetpack 개발자 리소스 - Android 개발자  |  Android Developers

Android Jetpack은 코드 라이브러리 모음을 통해 최신 앱 개발자 리소스와 권장사항을 제공합니다. 지금 Jetpack을 사용하여 시작해 보세요.

developer.android.com

 

Architecture

  • Data Binding: xml파일에 Data를 연결해서 사용할 수 있게 도와준다
  • Lifecycles: 안드로이드 activity 생명주기 관련 유틸리티
  • LiveData: 데이터가 변경될때 실시간으로 view에 알려준다
  • Navigation: activity, fragment간 이동을 쉽게 도와준다
  • Paging: 대량의 데이터를 관리해주는 유틸리티
  • Room: Database 보다 쉽게 사용할 수 있게 도와준다
  • WorkManager: 백그라운드 작업을 보다 쉽게 도와준다

Foundation

  • AppCompat: 하위 안드로이드 앱에서 최긴버전 sdk를 사용할 수 있도록 도와준다.
  • Android KTX: 코틀린 코드를 더욱 간결하게 만들어준다.
  • Multidex: dex 관리 관련 유틸리티
  • Test: 안드로이드 테스티관련 유틸리티

Behavior

  • Download manager: 큰 파일 다운로드을 service 차원에서 관리를 도와준다.
  • Media & Playback: 미디어 파일 재생 관련 유틸리티
  • Permissions: 안드로이드 권한 관련 유틸리티
  • Notifications: 안드로이드 notification 관련 유틸리티
  • Sharing: Actionbar에서 데이터를 보다 쉽게 공유할 수 있도록 도와준다

UI

  • 앱에서의 다양한 애니메이션, 이모지 또는 다양한 플랫폼 (TV, 워치) 과련 유틸리티를 사용할 수 있는 컴포넌트.

또한 Jetpack의 컴포넌트는 안드로이드 API 플랫폼의 일부가 아니기 때문에 원하는 컴포넌트를만 androidx.* 패키지에서 선택해서 사용할 수 있다.

 

참고 문헌 : https://velog.io/@eoqkrskfk94/android-Jetpack