AndroidX е набор от библиотеки Jetpack на Google, който замени остарялата Support Library. Според Google Developer Documentation, 2024, AndroidX предоставя обратно съвместими компоненти за всички версии на Android и е стандарт за съвременна Android разработка. Библиотеките на AndroidX включват инструменти за UI, навигация, работа с данни, камера и фонови задачи.
Основни точки
AndroidX е библиотека с отворен код, която е част от Android Jetpack. Google пусна AndroidX през 2018 г. като замяна на Support Library, която от 2011 г. доставяше обратно съвместими компоненти за стари версии на Android.
Преди появата на AndroidX всеки компонент на Support Library имаше собствена версия, обвързана с targetSdkVersion. Разработчиците трябваше едновременно да свързват няколко версии на една и съща библиотека, което водеше до конфликти на зависимости и увеличаване на размера на APK файла.
AndroidX реши този проблем чрез семантично версиониране (SemVer). Сега всяка библиотека е отделен Gradle артефакт с версия във формат MAJOR.MINOR.PATCH. Разработчикът може да актуализира Room от 2.4.0 до 2.6.0, без да пипа Activity, Fragment или други модули.
Първото стабилно издание AndroidX 1.0.0 се състоя през декември 2018 г. заедно с 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.*. Тази промяна позволи разделянето на библиотеките на функционални модули. Например Fragment от Support Library се наричаше 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) и по-нови — това покрива над 99% от активните устройства според Google Play Console 2024.
AndroidX включва над 100 библиотеки, разделени на групи. Всяка група отговаря за определена област: UI, данни, навигация, фонови задачи, мултимедия и тестване. По-долу е даден преглед на ключовите модули.
androidx.core:core — основната библиотека, която съдържа обратно съвместими версии на системни API: NotificationCompat, ActivityCompat, ContextCompat. Модулът core-ktx предоставя Kotlin разширения за работа с файлове, SharedPreferences и елементи на изглед.
Библиотеката androidx.activity:activity въведе Activity Result API (registerForActivityResult), който замени остарелия startActivityForResult. Модулът 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. Библиотеката ListAdapter с AsyncListDiffer опростява актуализирането на списък с автоматично изчисляване на разликите.
androidx.navigation:navigation — библиотека за навигация между екрани. Navigation Component работи с NavHostFragment и NavController, поддържа Safe Args за предаване на типизирани параметри и Deep Links за външни връзки. NavGraph описва всички маршрути в XML файл.
androidx.compose.ui — декларативната UI рамка Jetpack Compose, изградена върху Kotlin. За разлика от View системата, Compose прерисува само променените елементи чрез recomposition. Компонентите на Material Design 3 (Button, TextField, Scaffold) са достъпни в модула material3.
| Библиотека | Артефакт | Предназначение |
|---|---|---|
| Fragment | androidx.fragment | Управление на фрагменти и транзакции |
| RecyclerView | androidx.recyclerview | Списъци и мрежи с оптимизация |
| Navigation | androidx.navigation | Навигация между екрани |
| Compose UI | androidx.compose.ui | Декларативен UI на Kotlin |
androidx.room:room — ORM за локално съхранение на данни. Room генерира DAO класове от анотирани SQLite заявки, проверява 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.
Автоматична миграция е препоръчителният от Google начин за преход от Support Library към AndroidX. Android Studio от версия 3.2 включва вградения инструмент Refactor Migrate to AndroidX, който заменя пространствата от имена и актуализира зависимостите в build.gradle.
Преди миграцията трябва да актуализирате версията compileSdk до 28 или по-висока. Също така се уверете, че всички библиотеки на трети страни поддържат AndroidX. Ако някоя зависимост все още не е мигрирана, можете да използвате флага android.enableJetifier=true в gradle.properties — той автоматично презаписва байткода на библиотеки на трети страни.
В Android Studio изберете Refactor Migrate to AndroidX от менюто. IDE ще сканира целия проект, ще намери всички импорти от пакета android.support.* и ще ги замени с androidx.*. Също така зависимостите в app/build.gradle ще бъдат актуализирани — артефактите на Support Library ще бъдат заменени със съответните версии на AndroidX.
След миграцията Gradle Sync може да покаже грешки, ако някои зависимости не са намерени. Проверете списъка на използваните библиотеки в документацията на Google Maven — всички артефакти на AndroidX са публикувани на google(). Ако библиотеката не е налична, добавете mavenCentral() в repositories.
android {
compileSdk 34
}
dependencies {
// Support Library (остаряло)
// 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'
}
Ако проектът е твърде голям или съдържа персонализирани View от Support Library, автоматичната замяна може да бъде непълна. Ръчно заменете всички низове в кода: променете импортите, атрибутите в XML (app/src/main/res) и референциите в манифеста. За атрибути на Support Library префиксът android: се променя на app: (напр. app:cardCornerRadius вместо android:cardCornerRadius).
След ръчна миграция проверете R референциите. Support Library експортираше ресурси чрез android.support.v7.appcompat.R, а AndroidX — чрез androidx.appcompat.R. Пуснете търсене в проекта и заменете всички споменавания на стари R пътища. Компилацията на проекта трябва да премине без грешки и предупреждения за остарялост.
Първото предимство на AndroidX е модулността. Свързвате само онези библиотеки, които реално използвате. Ако приложението се нуждае само от RecyclerView и Navigation, няма нужда да теглите цялата Support Library с всички View компоненти. Това намалява размера на APK и ускорява изграждането на проекта.
Второто предимство — редовни актуализации. Jetpack пуска стабилни версии на всеки 1–3 месеца. Room 2.6.0, пуснат през 2024 г., добави поддръжка за KSP и Kotlin 2.0. Navigation 2.8.0 въведе типобезопасни маршрути, базирани на сериализация Kotlinx Serialization. Разработчиците получават нови възможности, без да чакат следващата версия на Android.
Третото предимство — интеграция с Kotlin. Всички библиотеки на AndroidX имат -ktx модули с разширяващи функции. viewLifecycleOwner.lifecycleScope стартира корутини в контекста на фрагмента, collectLatest обработва Flow, а SharedFlow и StateFlow са напълно съвместими с Lifecycle-aware компоненти. Това прави кода по-кратък и безопасен.
Обратна съвместимост — ключово предимство на AndroidX пред новите API на платформата. Можете да използвате AppCompatDelegate.setDefaultNightMode за тъмна тема на Android 4.0+, NotificationCompat.setBubble за балони на Android 5.0+ и LocationRequestCompat за fused location на Android 4.0+. Обхватът на устройствата достига 99% без увеличаване на минималната версия на SDK.
Четвъртото предимство — тестване. AndroidX включва библиотеката androidx.test за писане на инструментални и модулни тестове. FragmentScenario и ActivityScenario позволяват тестване на UI компоненти в изолация, а TestNavHostController — проверка на навигацията без стартиране на реално устройство. MockK и Robolectric допълват екосистемата.
Често задавани въпроси
AndroidX използва пространство от имена androidx.* вместо android.support.*, има независимо версиониране (SemVer), включва библиотеките на Jetpack и поддържа Kotlin разширения -ktx. Support Library беше замразена на версия 28.0.0 през 2019 г.
В Android Studio включете флага Use AndroidX в стъпката за създаване на проект. За съществуващ проект добавете android.useAndroidX=true и android.enableJetifier=true в gradle.properties. След това заменете зависимостите в build.gradle с артефакти от групата androidx.
Google Play изисква всички приложения и актуализации да използват AndroidX. Поддръжката на Support Library е прекратена и тя не получава корекции за сигурност. Ако вашето приложение все още не е мигрирано, това може да доведе до отхвърляне на актуализацията в Google Play Console.
Jetpack е набор от библиотеки, инструменти и препоръки от Google за разработка на Android приложения. 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() осигуряват интеграция на Flow с функциите на Compose.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също