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 с типа-безопасными методами переходов. 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 и создаёт бэкстек, как если бы пользователь прошёл по интерфейсу.
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. Студия заменяет все импорты в 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 на основе корутин, поддерживающая typed-свойства (Preferences DataStore) и Protocol Buffers (Proto DataStore).
Каждая библиотека имеет собственный minimal SDK и артефакт. Google выпускает мажорные версии раз в год (совпадая с релизом Android) и патчи безопасности — ежеквартально. Рекомендация — подключать только необходимые библиотеки, чтобы не увеличивать размер APK. Jetpack в сборе (все артефакты) весит более 20 МБ, но типовое приложение использует 5–7 библиотек, добавляя к APK 3–5 МБ.
Часто задаваемые вопросы
Да, 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 на DataStoredataStore.data.first() (suspend), запись через dataStore.edit { ... }. DataStore асинхронный и защищён от ANR.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также