Jetpack — что это такое, компоненты архитектуры

Автор: IT Sectr Опубликовано: 2026-05-01 Время чтения: 9 мин

Jetpack — это набор библиотек Android от Google, упрощающих разработку и ускоряющих создание стабильных приложений. Компоненты вроде ViewModel, Room и Navigation решают типовые задачи: управление жизненным циклом, хранение данных и навигация. По данным Android Developers (2026), Jetpack охватывает более 50 библиотек, каждая из которых обратно совместима с Android 5.0 (API 21) через AndroidX — библиотеку совместимости, заменившую Support Library.

Главное

  • Android Jetpack — набор из 50+ библиотек, ускоряющих разработку Android-приложений и обеспечивающих обратную совместимость через AndroidX.
  • ViewModel переживает повороты экрана и сохраняет данные при пересоздании Activity, предотвращая потерю пользовательского ввода.
  • Room — ORM-прослойка над SQLite с проверкой SQL-запросов на этапе компиляции и поддержкой корутин.
  • Navigation Component управляет переходами между экранами через графы навигации с типа-безопасными аргументами.
  • Lifecycle позволяет реагировать на события жизненного цикла Activity/Fragment без boilerplate-кода в контроллерах.

Что такое Android Jetpack?

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). Каждая категория решает задачи определённого слоя приложения — от управления данными до пользовательского интерфейса.

Философия Jetpack

Google продвигает три принципа Jetpack: accelerate development (меньше boilerplate, больше бизнес-логики), eliminate boilerplate (ViewModel избавляет от ручного сохранения состояния, Room — от написания SQLiteOpenHelper) и build with confidence (каждая библиотека проходит 15+ тысяч тестов перед релизом). По данным Android Developers (2026), приложения на Jetpack имеют на 30% меньше крашей, связанных с жизненным циклом.

AndroidX как основа

Все библиотеки Jetpack распространяются под идентификатором AndroidX (артефакты вида androidx.*). AndroidX заменил Support Library (артефакты com.android.support.*), разделив монолитную библиотеку на модульные артефакты с независимым версионированием. Миграция на AndroidX выполняется через опцию android.useAndroidX=true в gradle.properties — Android Studio автоматически конвертирует импорты.

Архитектурные компоненты: ViewModel, Lifecycle, LiveData

ViewModel — центральный компонент архитектуры Jetpack, хранящий данные UI. В отличие от Activity, которая уничтожается при повороте экрана, ViewModel остаётся в памяти. Пользователь заполняет форму, поворачивает телефон — данные не теряются. ViewModel автоматически очищается, когда LifecycleOwner (Activity или Fragment) завершает свой жизненный цикл навсегда (finish).

kotlin
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 и корутины

viewModelScope — встроенный CoroutineScope, привязанный к жизненному циклу ViewModel. Все корутины, запущенные в этом scope, автоматически отменяются при очистке ViewModel. Это избавляет от ручного управления Disposable и CompositeDisposable в каждой ViewModel. Для работы с viewModelScope требуется зависимость androidx.lifecycle:lifecycle-viewmodel-ktx.

Room: работа с базой данных на Android

Room — это ORM-библиотека Jetpack, предоставляющая абстрактный слой над SQLite. Вместо написания сырых SQL-запросов и ручного преобразования Cursor в объекты разработчик объявляет Entity (таблица), DAO (Data Access Object) и Database (точка входа). Room проверяет SQL-запросы на этапе компиляции через аннотацию @Query — если таблицы или колонки не существуют, сборка падает с понятной ошибкой.

kotlin
@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 — так проекты защищены от случайной потери данных при обновлении схемы.

TypeConverters и отношения

Room хранит только примитивные типы и их обёртки. Для хранения списков, Date или кастомных объектов используется @TypeConverter — статический метод, преобразующий тип в String (JSON) или Long (timestamp). Отношения между таблицами моделируются через вложенные объекты с аннотацией @Relation и вспомогательные POJO-классы с @Transaction для эффективных join-запросов.

Navigation Component — библиотека Jetpack для управления переходами между экранами. Вместо ручного вызова FragmentTransaction разработчик создаёт граф навигации (XML-файл с узлами-дестинациями), а система генерирует класс Directions с типа-безопасными методами переходов. Navigation Component гарантирует корректную работу back stack, deep links и передачи аргументов между экранами.

kotlin
// 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 и создаёт бэкстек, как если бы пользователь прошёл по интерфейсу.

Bottom Navigation и Conditional Navigation

Navigation Component интегрируется с BottomNavigationView через NavController: каждый пункт меню привязывается к дестинации в графе. Переход между табами не пересоздаёт фрагмент — Navigation Component сохраняет состояние через NavBackStackEntry. Для условной навигации (показать логин, если не авторизован) используется navController.navigate(condition) с проверкой в onCreate.

AndroidX: Support Library нового поколения

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).

Основные артефакты AndroidX

Наиболее часто используемые артефакты: appcompat (тёмная тема, Material Design на старых API), recyclerview (адаптивные списки с ViewHolder), constraintlayout (гибкий контейнер с плоской иерархией), cardview (карточки Material Design), preference (экран настроек с Material-стилем). Каждый артефакт версионируется независимо, ускоряя получение фиксов без обновления всего пакета.

Другие важные библиотеки Jetpack

Помимо Architecture и AndroidX, Jetpack включает множество специализированных библиотек для типовых задач мобильной разработки. WorkManager — для фоновых задач с гарантированным выполнением (синхронизация, загрузка логов), поддерживает периодические и отложенные задания, а также ограничения по сети и батарее. DataStore — замена SharedPreferences на основе корутин, поддерживающая typed-свойства (Preferences DataStore) и Protocol Buffers (Proto DataStore).

  • Hilt — DI-фреймворк на основе Dagger, упрощающий внедрение зависимостей через аннотации @HiltViewModel, @Inject, @Module. Встроенная интеграция с ViewModel и Navigation.
  • Paging 3 — библиотека для постраничной загрузки данных из сети/БД с поддержкой RemoteMediator (сеть + кэш), StateFlow и Compose.
  • CameraX — API для работы с камерой, абстрагирующий различия производителей (Samsung, Xiaomi, Honor) через единый интерфейс CameraController.
  • Security Crypto — шифрование данных через EncryptedSharedPreferences и EncryptedFile на основе AES-256 с мастер-ключом в Android Keystore.

Каждая библиотека имеет собственный minimal SDK и артефакт. Google выпускает мажорные версии раз в год (совпадая с релизом Android) и патчи безопасности — ежеквартально. Рекомендация — подключать только необходимые библиотеки, чтобы не увеличивать размер APK. Jetpack в сборе (все артефакты) весит более 20 МБ, но типовое приложение использует 5–7 библиотек, добавляя к APK 3–5 МБ.

Часто задаваемые вопросы

Нужно ли мигрировать со Support Library на AndroidX?

Да, Google прекратила поддержку Support Library в 2019 году. Все новые библиотеки Jetpack и Google Play Services требуют AndroidX. Миграция выполняется за 30–60 минут через Android Studio.

Можно ли использовать Jetpack с Java или только с Kotlin?

Jetpack полностью совместим с Java. Однако многие фичи (viewModelScope, корутины, Compose) доступны только на Kotlin. Google рекомендует Kotlin для новых проектов.

Чем ViewModel отличается от onSaveInstanceState?

ViewModel хранит объекты в памяти и переживает поворот. onSaveInstanceState подходит только для сериализуемых примитивов (Bundle). ViewModel не сохраняется при убийстве процесса — для этого нужен SavedStateHandle.

Когда использовать WorkManager вместо корутин?

WorkManager — для задач, которые должны выполниться даже после закрытия приложения: синхронизация, загрузка логов, отправка аналитики. Корутины — для задач, привязанных к экрану.

Как мигрировать с SharedPreferences на DataStore?

Замените импорты SharedPreferences на DataStore. Чтение через dataStore.data.first() (suspend), запись через dataStore.edit { ... }. DataStore асинхронный и защищён от ANR.

Итоги

  • Android Jetpack — набор из 50+ библиотек для Android-разработки, объединённых под AndroidX с обратной совместимостью до API 21.
  • ViewModel переживает повороты экрана и сохраняет данные UI, а Lifecycle уведомляет компоненты о смене состояния Activity/Fragment.
  • Room — type-safe ORM над SQLite с компиляционной проверкой запросов, миграциями и поддержкой корутин.
  • Navigation Component управляет переходами через графы с типа-безопасными аргументами и автоматическим deep link.
  • WorkManager гарантирует выполнение фоновых задач даже после закрытия приложения, DataStore заменяет SharedPreferences.
  • Jetpack делится на четыре категории: Architecture, UI, Behavior, Foundation — каждая покрывает свой слой приложения.
  • Приложения на Jetpack имеют на 30% меньше крашей, связанных с жизненным циклом, и быстрее разрабатываются за счёт готовых архитектурных решений.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также