AndroidX는 Google의 Jetpack 라이브러리 세트로, 오래된 Support Library를 대체했습니다. Google Developer Documentation, 2024에 따르면, AndroidX는 모든 Android 버전에 대해 이전 버전과 호환되는 구성 요소를 제공하며 현대 Android 개발의 표준입니다. AndroidX 라이브러리에는 UI, 네비게이션, 데이터 처리, 카메라 및 백그라운드 작업을 위한 도구가 포함되어 있습니다.
핵심 요약
AndroidX는 Android Jetpack의 일부인 오픈 소스 라이브러리입니다. Google은 2018년에 2011년부터 이전 Android 버전에 이전 버전과 호환되는 구성 요소를 제공해 온 Support Library를 대체하기 위해 AndroidX를 출시했습니다.
AndroidX 이전에는 각 Support Library 구성 요소에 targetSdkVersion에 연결된 자체 버전이 있었습니다. 개발자는 동일한 라이브러리의 여러 버전을 동시에 포함해야 했으며, 이로 인해 종속성 충돌과 APK 크기 증가가 발생했습니다.
AndroidX는 시맨틱 버전 관리(SemVer)를 통해 이 문제를 해결했습니다. 이제 각 라이브러리는 MAJOR.MINOR.PATCH 형식의 버전을 가진 별도의 Gradle 아티팩트입니다. 개발자는 Activity, Fragment 또는 다른 모듈을 건드리지 않고 Room을 2.4.0에서 2.6.0으로 업데이트할 수 있습니다.
AndroidX 1.0.0의 첫 번째 안정 버전은 2018년 12월 Android 9 Pie와 함께 출시되었습니다. Google은 Support Library가 유지 관리 모드로 전환되며 모든 새 구성 요소(Navigation, WorkManager, Compose)는 AndroidX의 일부로만 출시된다고 발표했습니다. Support Library의 마지막 버전인 28.0.0은 2019년에 출시되었습니다.
Google I/O 2019에 따르면, 전환의 주요 이유는 업데이트 출시를 가속화할 필요성이었습니다. 이전 모델에서는 단일 패키지 버전으로 인해 한 라이브러리가 다른 라이브러리를 기다려야 했습니다. AndroidX가 이 병목 현상을 제거했고, Jetpack은 2~3개월마다 주요 및 부 버전을 받기 시작했습니다.
주요 차이점은 네임스페이스입니다. Support Library는 android.support.* 패키지를 사용했지만, AndroidX는 androidx.*로 전환했습니다. 이 변경으로 라이브러리를 기능 모듈로 분할할 수 있게 되었습니다. 예를 들어, Support Library의 Fragment는 android.support.v4.app.Fragment라고 불렸지만, AndroidX에서는 androidx.fragment.app.Fragment입니다.
두 번째 중요한 차이점은 아키텍처입니다. AndroidX는 Jetpack(앱 아키텍처 권장 사항 세트)과 함께 제공됩니다. Jetpack에는 ViewModel, LiveData, Room, Navigation 및 WorkManager가 포함되어 있으며, 이들은 분산된 유틸리티가 아닌 통합된 생태계로 설계되었습니다.
이전 버전과의 호환성도 개선되었습니다. Support Library가 Android 2.3+를 지원했지만, AndroidX는 Android 4.0(API 14) 이상의 기기에서 작동을 보장하며, Google Play Console 2024에 따르면 활성 기기의 99% 이상을 커버합니다.
AndroidX에는 카테고리별로 그룹화된 100개 이상의 라이브러리가 포함되어 있습니다. 각 그룹은 UI, 데이터, 네비게이션, 백그라운드 작업, 멀티미디어 및 테스트와 같은 특정 영역을 다룹니다. 아래는 주요 모듈에 대한 개요입니다.
androidx.core:core는 시스템 API(NotificationCompat, ActivityCompat, ContextCompat)의 이전 버전과 호환되는 버전을 포함하는 기본 라이브러리입니다. core-ktx 모듈은 파일, SharedPreferences 및 뷰 요소 작업을 위한 Kotlin 확장을 제공합니다.
androidx.activity:activity 라이브러리는 더 이상 사용되지 않는 startActivityForResult를 대체하는 Activity Result API(registerForActivityResult)를 도입했습니다. fragment:fragment 모듈은 프래그먼트 수명 주기를 관리하고 트랜잭션 및 백 스택을 위한 FragmentManager를 지원합니다.
androidx.lifecycle은 Jetpack 아키텍처의 기초입니다. LifecycleOwner와 LifecycleObserver를 통해 구성 요소가 Activity 또는 Fragment의 수명 주기 변경에 반응할 수 있습니다. ViewModel은 화면 회전 중에 데이터를 보존하고, LiveData는 데이터 변경 사항을 UI에 알립니다.
class MainViewModel : ViewModel() {
private val _users = MutableLiveData<List<User>>()
val users: LiveData<List<User>> = _users
fun loadUsers() {
viewModelScope.launch {
val result = repository.getUsers()
_users.value = result
}
}
}
androidx.recyclerview:recyclerview는 목록과 그리드를 표시하기 위한 강력한 구성 요소입니다. RecyclerView는 LayoutManager(LinearLayoutManager, GridLayoutManager), ItemDecoration 및 ItemAnimator를 통한 애니메이션을 지원합니다. AsyncListDiffer가 포함된 ListAdapter 라이브러리는 자동 차이 계산으로 목록 업데이트를 간소화합니다.
androidx.navigation:navigation은 화면 간 네비게이션을 위한 라이브러리입니다. Navigation Component는 NavHostFragment 및 NavController와 함께 작동하며, 타입화된 매개변수 전달을 위한 Safe Args와 외부 링크를 위한 Deep Links를 지원합니다. NavGraph는 XML 파일에서 모든 경로를 설명합니다.
androidx.compose.ui는 Kotlin으로 구축된 선언형 UI 프레임워크인 Jetpack Compose입니다. View 시스템과 달리 Compose는 재구성을 통해 변경된 요소만 다시 그립니다. Material Design 3 구성 요소(Button, TextField, Scaffold)는 material3 모듈에서 사용할 수 있습니다.
| 라이브러리 | 아티팩트 | 목적 |
|---|---|---|
| Fragment | androidx.fragment | 프래그먼트 관리 및 트랜잭션 |
| RecyclerView | androidx.recyclerview | 최적화된 목록 및 그리드 |
| Navigation | androidx.navigation | 화면 네비게이션 |
| Compose UI | androidx.compose.ui | Kotlin의 선언형 UI |
androidx.room:room은 로컬 데이터 저장을 위한 ORM입니다. Room은 주석이 달린 SQLite 쿼리에서 DAO 클래스를 생성하고, 컴파일 시간에 SQL 구문의 유효성을 검사하며, RxJava 및 Kotlin Flow를 지원합니다. 버전 2.6에는 더 빠른 코드 생성을 위한 KSP 지원이 포함되어 있습니다.
androidx.work:workmanager는 보장된 실행을 제공하는 백그라운드 작업용 라이브러리입니다. WorkManager는 정기 작업, 작업 체인(beginWith, then) 및 시작 기준(Constraints: 네트워크, 충전, 저장 공간)을 지원합니다. 앱이 종료된 경우에도 WorkManager는 기기 재부팅 후 작업을 전달합니다.
androidx.datastore:datastore는 SharedPreferences의 현대적인 대체품입니다. DataStore는 Kotlin Coroutines와 Flow를 사용하며, 동기 및 비동기 방식으로 작동하여 UI 스레드 차단을 방지합니다. Preferences DataStore는 간단한 키-값 쌍을 저장하고, Proto DataStore는 Protocol Buffers를 통해 타입화된 객체를 처리합니다.
자동 마이그레이션은 Support Library에서 AndroidX로 전환하는 Google 권장 방법입니다. Android Studio 버전 3.2부터는 네임스페이스를 바꾸고 build.gradle의 종속성을 업데이트하는 내장 도구 Refactor Migrate to AndroidX가 포함되어 있습니다.
마이그레이션 전에 compileSdk 버전을 28 이상으로 업데이트해야 합니다. 또한 모든 서드파티 라이브러리가 AndroidX를 지원하는지 확인하십시오. 종속성이 아직 마이그레이션되지 않은 경우 gradle.properties에서 android.enableJetifier=true 플래그를 사용하십시오. 이 플래그는 서드파티 라이브러리의 바이트코드를 자동으로 다시 작성합니다.
Android Studio에서 메뉴의 Refactor Migrate to AndroidX를 선택하십시오. IDE가 전체 프로젝트를 스캔하고 android.support.* 패키지의 모든 가져오기를 찾아 androidx.*로 바꿉니다. app/build.gradle의 종속성도 업데이트되어 Support Library 아티팩트가 해당 AndroidX 버전으로 대체됩니다.
마이그레이션 후 일부 종속성을 찾을 수 없는 경우 Gradle Sync에 오류가 표시될 수 있습니다. Google Maven 문서에서 사용된 라이브러리 목록을 확인하십시오. 모든 AndroidX 아티팩트는 google()에 게시되어 있습니다. 라이브러리를 사용할 수 없는 경우 repositories에 mavenCentral()을 추가하십시오.
android {
compileSdk 34
}
dependencies {
// 지원 라이브러리 (사용 중단됨)
// implementation 'com.android.support:appcompat-v7:28.0.0'
// AndroidX
implementation 'androidx.core:core-ktx:1.13.1'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.activity:activity-ktx:1.9.3'
implementation 'androidx.fragment:fragment-ktx:1.8.5'
implementation 'androidx.recyclerview:recyclerview:1.3.2'
implementation 'androidx.room:room-runtime:2.6.1'
ksp 'androidx.room:room-compiler:2.6.1'
}
프로젝트가 너무 크거나 Support Library의 사용자 정의 View가 포함된 경우 자동 대체가 불완전할 수 있습니다. 코드의 모든 문자열을 수동으로 바꾸십시오: 가져오기, XML 속성(app/src/main/res) 및 매니페스트 참조를 변경하십시오. Support Library 속성의 경우 android: 접두사가 app:으로 변경됩니다(예: android:cardCornerRadius 대신 app:cardCornerRadius).
수동 마이그레이션 후 R 참조를 확인하십시오. Support Library는 android.support.v7.appcompat.R을 통해 리소스를 내보냈지만, AndroidX는 androidx.appcompat.R을 사용합니다. 프로젝트를 검색하고 이전 R 경로에 대한 모든 참조를 바꾸십시오. 프로젝트 빌드가 오류나 사용 중단 경고 없이 완료되어야 합니다.
AndroidX의 첫 번째 이점은 모듈성입니다. 실제로 사용하는 라이브러리만 포함하면 됩니다. 앱에 RecyclerView와 Navigation만 필요한 경우 모든 View 구성 요소가 포함된 전체 Support Library를 가져올 필요가 없습니다. 이렇게 하면 APK 크기가 줄어들고 빌드 시간이 빨라집니다.
두 번째 이점은 정기적인 업데이트입니다. Jetpack은 1~3개월마다 안정적인 버전을 출시합니다. 2024년에 출시된 Room 2.6.0은 KSP 지원과 Kotlin 2.0 호환성을 추가했습니다. Navigation 2.8.0은 Kotlinx Serialization을 기반으로 하는 타입 안전 라우트를 도입했습니다. 개발자는 다음 Android 버전을 기다리지 않고 새로운 기능을 받을 수 있습니다.
세 번째 이점은 Kotlin 통합입니다. 모든 AndroidX 라이브러리에는 확장 함수가 있는 -ktx 모듈이 있습니다. viewLifecycleOwner.lifecycleScope는 프래그먼트 컨텍스트에서 코루틴을 시작하고, collectLatest는 Flow를 처리하며, SharedFlow와 StateFlow는 수명 주기 인식 구성 요소와 완전히 호환됩니다. 이렇게 하면 코드가 더 간결하고 안전해집니다.
이전 버전과의 호환성은 새로운 플랫폼 API에 대한 AndroidX의 주요 이점입니다. Android 4.0+에서 다크 테마를 위해 AppCompatDelegate.setDefaultNightMode를, Android 5.0+에서 버블을 위해 NotificationCompat.setBubble을, Android 4.0+에서 퓨즈드 위치를 위해 LocationRequestCompat을 사용할 수 있습니다. 최소 SDK 버전을 높이지 않고도 기기 적용 범위가 99%에 도달합니다.
네 번째 이점은 테스트입니다. AndroidX에는 계측 및 단위 테스트 작성을 위한 androidx.test 라이브러리가 포함되어 있습니다. FragmentScenario와 ActivityScenario는 UI 구성 요소를 격리하여 테스트할 수 있으며, TestNavHostController는 실제 기기를 실행하지 않고 네비게이션을 확인할 수 있습니다. MockK와 Robolectric이 생태계를 완성합니다.
자주 묻는 질문
AndroidX는 android.support.* 대신 androidx.* 네임스페이스를 사용하며, 독립적인 버전 관리(SemVer)를 가지고 있고, Jetpack 라이브러리를 포함하며, Kotlin -ktx 확장을 지원합니다. Support Library는 2019년 버전 28.0.0에서 동결되었습니다.
Android Studio에서 프로젝트 생성 단계에서 Use AndroidX 플래그를 활성화하십시오. 기존 프로젝트의 경우 gradle.properties에 android.useAndroidX=true와 android.enableJetifier=true를 추가하십시오. 그런 다음 build.gradle의 종속성을 androidx 그룹의 아티팩트로 바꾸십시오.
Google Play에서는 모든 앱과 업데이트가 AndroidX를 사용하도록 요구합니다. Support Library의 유지 관리가 중단되었으며 더 이상 보안 패치를 받지 않습니다. 앱이 아직 마이그레이션되지 않은 경우 Google Play Console에서 업데이트가 거부될 수 있습니다.
Jetpack은 Android 앱 개발을 위한 Google의 라이브러리, 도구 및 가이드라인 세트입니다. AndroidX는 Jetpack의 기초입니다. Jetpack에는 Architecture Components(Lifecycle, ViewModel, Room), UI(Compose, Fragment, RecyclerView) 및 Behavior(WorkManager, Navigation, CameraX)가 포함됩니다.
네, Jetpack Compose 자체가 AndroidX(androidx.compose.ui)의 일부입니다. ViewModel, Navigation, Room 및 WorkManager 라이브러리는 Compose와 완전히 호환됩니다. collectAsState() 및 collectAsStateWithLifecycle() 함수는 Composable 함수와 Flow 통합을 제공합니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.