Jetpack — е набор от Android библиотеки на Google, които опростяват разработката и ускоряват създаването на стабилни приложения. Компоненти като ViewModel, Room и Navigation решават типични задачи: управление на жизнения цикъл, съхранение на данни и навигация. Според Android Developers (2026), Jetpack обхваща над 50 библиотеки, всяка от които е обратно съвместима с Android 5.0 (API 21) чрез AndroidX — библиотека за съвместимост, която замени Support Library.
Основни
Android Jetpack — е колекция от библиотеки, инструменти и архитектурни препоръки на Google, представена през 2018 г. на Google I/O. Jetpack замени Support Library и Android Architecture Components, обединявайки ги в единна екосистема. Преди Jetpack всяка Android библиотека се актуализира независимо, което създаваше конфликти на версии. Jetpack синхронизира версиите под единен идентификатор AndroidX и въведе модел на стабилни основни версии с малки корекции.
Библиотеките на Jetpack се делят на четири категории: Architecture (ViewModel, Room, Navigation, WorkManager), UI (Fragment, Compose, Animation, Palette), Behavior (DownloadManager, Media, Permissions, Sharing), Foundation (Android KTX, Multidex, AppCompat). Всяка категория решава задачите на определен слой от приложението — от управление на данни до потребителски интерфейс.
Google популяризира три принципа на Jetpack: accelerate development (по-малко boilerplate, повече бизнес логика), eliminate boilerplate (ViewModel премахва ръчното запазване на състояние, Room — писането на SQLiteOpenHelper) и build with confidence (всяка библиотека преминава през 15+ хиляди теста преди пускане). Според Android Developers (2026), приложенията на Jetpack имат 30% по-малко сривове, свързани с жизнения цикъл.
Всички Jetpack библиотеки се разпространяват под идентификатор AndroidX (артефакти от вида androidx.*). AndroidX замени Support Library (артефакти com.android.support.*), разделяйки монолитната библиотека на модулни артефакти с независимо версиониране. Миграцията към AndroidX се извършва чрез опцията android.useAndroidX=true в gradle.properties — Android Studio автоматично конвертира импортите.
ViewModel — централен компонент на Jetpack архитектурата, който съхранява UI данни. За разлика от Activity, което се унищожава при завъртане на екрана, ViewModel остава в паметта. Потребителят попълва формуляр, завърта телефона — данните не се губят. ViewModel автоматично се почиства, когато LifecycleOwner (Activity или Fragment) завинаги приключи своя жизнен цикъл (finish).
class ProfileViewModel : ViewModel() {
private val _userName = MutableLiveData<String>()
val userName: LiveData<String> = _userName
fun loadProfile(userId: String) {
viewModelScope.launch {
val user = repository.getUser(userId)
_userName.value = user.name
}
}
}
@OptIn(ExperimentalLifecycleApi::class)
class MyObserver : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStart() {
println("Екранът е стартиран")
}
}
LiveData — наблюдаем контейнер за данни, който взема предвид жизнения цикъл. Ако екранът не е видим (onStop), LiveData не изпраща актуализации — това предотвратява изтичане на памет и сривове при опит за актуализиране на несъществуващо Activity. Lifecycle — клас, който съхранява текущото състояние (CREATED, STARTED, RESUMED) и позволява на други компоненти да се абонират за промени в състоянието. Заедно ViewModel, LiveData и Lifecycle формират основата на реактивната Android архитектура.
viewModelScope — вграден CoroutineScope, свързан с жизнения цикъл на ViewModel. Всички корутини, стартирани в този scope, се отменят автоматично при почистване на ViewModel. Това елиминира ръчното управление на Disposable и CompositeDisposable във всеки ViewModel. За работа с viewModelScope се изисква зависимостта androidx.lifecycle:lifecycle-viewmodel-ktx.
Room — е ORM библиотека на Jetpack, която предоставя абстрактен слой над SQLite. Вместо писане на сурови SQL заявки и ръчно преобразуване на Cursor в обекти, разработчикът декларира Entity (таблица), DAO (Data Access Object) и Database (точка на достъп). Room проверява SQL заявките на етап компилация чрез анотация @Query — ако таблиците или колоните не съществуват, изграждането се проваля с разбираема грешка.
@Entity
data class User(
@PrimaryKey val id: String,
val name: String,
val email: String
)
@Dao
interface UserDao {
@Query("SELECT * FROM User WHERE id = :userId")
suspend fun getUser(userId: String): User?
@Insert
suspend fun insertUser(user: User)
}
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
Entity User описва таблица с три колони. DAO декларира suspend-функции за работа с корутини — заявката се изпълнява автоматично на фонова нишка. Room поддържа миграции чрез анотация @Migration: разработчикът описва SQL скрипт за преход между версии и Room го изпълнява без загуба на данни. При липса на миграция Room хвърля IllegalStateException — така проектите са защитени от случайна загуба на данни при актуализиране на схемата.
Room съхранява само примитивни типове и техните обвивки. За съхранение на списъци, Date или персонализирани обекти се използва @TypeConverter — статичен метод, който преобразува типа в String (JSON) или Long (timestamp). Релациите между таблици се моделират чрез вложени обекти с анотация @Relation и помощни POJO класове с @Transaction за ефективни join заявки.
Navigation Component — Jetpack библиотека за управление на преходите между екрани. Вместо ръчно извикване на FragmentTransaction, разработчикът създава навигационен граф (XML файл с възли-дестинации), а системата генерира клас Directions с type-safe методи за преход. Navigation Component гарантира правилна работа на back stack, deep links и предаване на аргументи между екрани.
// nav_graph.xml
// <fragment android:id="@+id/profileFragment"
// android:name=".ProfileFragment">
// <argument android:name="userId"
// android:defaultValue="-1"
// app:argType="integer" />
// </fragment>
// В кода на фрагмента:
class ProfileFragment : Fragment() {
private val args: ProfileFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
loadProfile(args.userId)
}
}
Аргументите userId се предават в навигационния граф с указване на тип (integer) и стойност по подразбиране. Класът ProfileFragmentArgs се генерира автоматично от плъгина Navigation Safe Args — съдържа всички аргументи с правилните Kotlin типове. Дълбоки връзки се конфигурират в графа: app:deepLink="app://profile/{userId}". Navigation Component сам анализира URL и създава back stack, сякаш потребителят е навигирал през интерфейса.
Navigation Component се интегрира с BottomNavigationView чрез NavController: всеки елемент от менюто се свързва с дестинация в графа. Преходът между раздели не пресъздава фрагмента — Navigation Component запазва състоянието чрез NavBackStackEntry. За условна навигация (показване на вход, ако не е оторизиран) се използва navController.navigate(condition) с проверка в onCreate.
AndroidX — е преработена архитектура на Support Library, в която всяка библиотека получи собствен артефакт с независима версия. Вместо единен com.android.support:appcompat-v7:28.0.0, AndroidX предлага androidx.appcompat:appcompat:1.7.0, androidx.recyclerview:recyclerview:1.4.0 и така нататък. Това премахна проблема, когато различни зависимости теглеха различни версии на Support Library, причинявайки конфликт.
Миграцията към AndroidX се извършва автоматично в Android Studio 3.2+ чрез менюто Refactor → Migrate to AndroidX. Studio заменя всички импорти в Java/Kotlin файлове, манифести и ресурси. Обратна съвместимост — основното предимство на AndroidX: библиотеките работят на Android 5.0 (API 21) и по-високи, покривайки 97% от активните устройства според Google Play Console (2025).
Най-често използваните артефакти: appcompat (тъмна тема, Material Design на стари API-та), recyclerview (адаптивни списъци с ViewHolder), constraintlayout (гъвкав контейнер с плоска йерархия), cardview (Material Design карти), preference (екран за настройки в Material стил). Всеки артефакт се версионира независимо, ускорявайки получаването на корекции без актуализиране на целия пакет.
Освен Architecture и AndroidX, Jetpack включва множество специализирани библиотеки за типични задачи на мобилната разработка. WorkManager — за фонови задачи с гарантирано изпълнение (синхронизация, качване на логове), поддържа периодични и отложени задачи, както и ограничения за мрежа и батерия. DataStore — заместител на SharedPreferences, базиран на корутини, поддържащ типизирани свойства (Preferences DataStore) и Protocol Buffers (Proto DataStore).
Всяка библиотека има собствен минимален SDK и артефакт. Google пуска основни версии веднъж годишно (съвпадайки с пускането на Android) и пачове за сигурност — на тримесечие. Препоръка — свързвайте само необходимите библиотеки, за да не увеличавате размера на APK. Jetpack в сглобка (всички артефакти) тежи над 20 MB, но типично приложение използва 5-7 библиотеки, добавяйки 3-5 MB към APK.
Често задавани въпроси
Да, Google спря поддръжката на Support Library през 2019 г. Всички нови Jetpack и Google Play Services библиотеки изискват AndroidX. Миграцията се извършва за 30-60 минути чрез Android Studio.
Jetpack е напълно съвместим с Java. Но много функции (viewModelScope, корутини, Compose) са достъпни само в Kotlin. Google препоръчва Kotlin за нови проекти.
ViewModel съхранява обекти в паметта и преживява завъртане. onSaveInstanceState е подходящ само за сериализируеми примитиви (Bundle). ViewModel не се запазва при убиване на процеса — за това е необходим SavedStateHandle.
WorkManager — за задачи, които трябва да се изпълнят дори след затваряне на приложението: синхронизация, качване на логове, изпращане на аналитика. Корутини — за задачи, свързани с екрана.
Заменете импортите на SharedPreferences с DataStore<Preferences>. Четене чрез dataStore.data.first() (suspend), писане чрез dataStore.edit { ... }. DataStore е асинхронен и защитен от ANR.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също