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 управља прелазима између екрана кроз графове навигације са type-safe аргументима.
  • 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% мање крашeва везаних за животни циклус.

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 са type-safe методима прелаза. Navigation Component гарантује исправан рад back stack-а, deep link-ова и прослеђивања аргумената између екрана.

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 и креира back stack као да је корисник прошао кроз интерфејс.

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

Свака библиотека има сопствени минимални SDK и артефакт. Google издаје главне верзије једном годишње (поклапајући се са издањем Android-а) и безбедносне закрпе — квартално. Препорука — прикључити само потребне библиотеке како се не би повећавала величина APK-а. Jetpack у целини (сви артефакти) тежи преко 20 MB, али типична апликација користи 5–7 библиотека, додајући APK-у 3–5 MB.

Често постављана питања

Да ли је потребно мигрирати са 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<Preferences>. Читање кроз 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 управља прелазима кроз графове са type-safe аргументима и аутоматским deep link-ом.
  • WorkManager гарантује извршење позадинских задатака чак и након затварања апликације, DataStore замењује SharedPreferences.
  • Jetpack се дели на четири категорије: Architecture, UI, Behavior, Foundation — свака покрива свој слој апликације.
  • Апликације на Jetpack-у имају 30% мање крашева везаних за животни циклус и брже се развијају захваљујући готовим архитектонским решењима.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође