Jetpack — ce este, componentele arhitecturii

Autor: IT Sectr Publicat: 2026-05-01 Timp de citire: 9 min

Jetpack — este un set de biblioteci Android de la Google care simplifică dezvoltarea și accelerează crearea de aplicații stabile. Componente precum ViewModel, Room și Navigation rezolvă sarcini tipice: gestionarea ciclului de viață, stocarea datelor și navigarea. Conform Android Developers (2026), Jetpack acoperă peste 50 de biblioteci, fiecare fiind compatibilă retroactiv cu Android 5.0 (API 21) prin AndroidX — biblioteca de compatibilitate care a înlocuit Support Library.

Principalele

  • Android Jetpack — un set de peste 50 de biblioteci care accelerează dezvoltarea aplicațiilor Android și asigură compatibilitatea retroactivă prin AndroidX.
  • ViewModel supraviețuiește rotațiilor ecranului și păstrează datele la recrearea Activity, prevenind pierderea intrărilor utilizatorului.
  • Room — un strat ORM peste SQLite cu verificarea interogărilor SQL la compilare și suport pentru corutine.
  • Navigation Component gestionează tranzițiile între ecrane prin grafuri de navigare cu argumente type-safe.
  • Lifecycle permite reacționarea la evenimentele ciclului de viață Activity/Fragment fără cod boilerplate în controllere.

Ce este Android Jetpack?

Android Jetpack — este o colecție de biblioteci, instrumente și recomandări arhitecturale de la Google, prezentată în 2018 la Google I/O. Jetpack a înlocuit Support Library și Android Architecture Components, unindu-le într-un singur ecosistem. Înainte de Jetpack, fiecare bibliotecă Android se actualiza independent, ceea ce crea conflicte de versiuni. Jetpack a sincronizat versiunile sub un identificator unic AndroidX și a introdus modelul de versiuni majore stabile cu patch-uri minore.

Bibliotecile Jetpack se împart în patru categorii: Architecture (ViewModel, Room, Navigation, WorkManager), UI (Fragment, Compose, Animation, Palette), Behavior (DownloadManager, Media, Permissions, Sharing), Foundation (Android KTX, Multidex, AppCompat). Fiecare categorie rezolvă sarcinile unui strat specific al aplicației — de la gestionarea datelor până la interfața utilizatorului.

Filozofia Jetpack

Google promovează trei principii Jetpack: accelerate development (mai puțin boilerplate, mai multă logică de business), eliminate boilerplate (ViewModel elimină salvarea manuală a stării, Room — scrierea SQLiteOpenHelper) și build with confidence (fiecare bibliotecă trece de 15+ mii de teste înainte de lansare). Conform Android Developers (2026), aplicațiile pe Jetpack au cu 30% mai puține crash-uri legate de ciclul de viață.

AndroidX ca bază

Toate bibliotecile Jetpack sunt distribuite sub identificatorul AndroidX (artefacte de tipul androidx.*). AndroidX a înlocuit Support Library (artefacte com.android.support.*), împărțind biblioteca monolitică în artefacte modulare cu versionare independentă. Migrarea la AndroidX se realizează prin opțiunea android.useAndroidX=true în gradle.properties — Android Studio convertește automat importurile.

Componente arhitecturale: ViewModel, Lifecycle, LiveData

ViewModel — componenta centrală a arhitecturii Jetpack care stochează datele UI. Spre deosebire de Activity, care este distrusă la rotirea ecranului, ViewModel rămâne în memorie. Utilizatorul completează un formular, rotește telefonul — datele nu se pierd. ViewModel se curăță automat când LifecycleOwner (Activity sau Fragment) își încheie ciclul de viață pentru totdeauna (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("Ecran pornit")
    }
}

LiveData — un container observabil pentru date care ține cont de ciclul de viață. Dacă ecranul nu este vizibil (onStop), LiveData nu trimite actualizări — acest lucru previne scurgerile de memorie și crash-urile la încercarea de a actualiza un Activity inexistent. Lifecycle — o clasă care stochează starea curentă (CREATED, STARTED, RESUMED) și permite altor componente să se aboneze la modificările de stare. Împreună, ViewModel, LiveData și Lifecycle formează fundamentul arhitecturii reactive Android.

ViewModelScope și corutine

viewModelScope — un CoroutineScope încorporat legat de ciclul de viață al ViewModel. Toate corutinele lansate în acest scope sunt anulate automat la curățarea ViewModel. Acest lucru elimină gestionarea manuală a Disposable și CompositeDisposable în fiecare ViewModel. Pentru lucrul cu viewModelScope este necesară dependența androidx.lifecycle:lifecycle-viewmodel-ktx.

Room: lucrul cu baza de date pe Android

Room — este o bibliotecă ORM Jetpack care oferă un strat abstract peste SQLite. În loc să scrieți interogări SQL brute și să convertiți manual Cursor în obiecte, dezvoltatorul declară Entity (tabel), DAO (Data Access Object) și Database (punct de intrare). Room verifică interogările SQL la compilare prin adnotarea @Query — dacă tabelele sau coloanele nu există, build-ul eșuează cu o eroare clară.

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 descrie un tabel cu trei coloane. DAO declară funcții suspend pentru lucrul cu corutine — interogarea se execută automat pe un fir de fundal. Room suportă migrații prin adnotarea @Migration: dezvoltatorul descrie scriptul SQL de tranziție între versiuni, iar Room îl execută fără pierdere de date. În lipsa migrației, Room aruncă IllegalStateException — astfel proiectele sunt protejate de pierderea accidentală a datelor la actualizarea schemei.

TypeConverters și relații

Room stochează doar tipuri primitive și wrapper-ele lor. Pentru stocarea listelor, Date sau a obiectelor personalizate se folosește @TypeConverter — o metodă statică care convertește tipul în String (JSON) sau Long (timestamp). Relațiile între tabele se modelează prin obiecte imbricate cu adnotarea @Relation și clase POJO ajutătoare cu @Transaction pentru interogări join eficiente.

Navigation Component — o bibliotecă Jetpack pentru gestionarea tranzițiilor între ecrane. În loc să apelați manual FragmentTransaction, dezvoltatorul creează un graf de navigare (fișier XML cu noduri-destinații), iar sistemul generează clasa Directions cu metode de tranziție type-safe. Navigation Component garantează funcționarea corectă a back stack, deep links și transmiterea argumentelor între ecrane.

kotlin
// nav_graph.xml
// <fragment android:id="@+id/profileFragment"
//     android:name=".ProfileFragment">
//     <argument android:name="userId"
//         android:defaultValue="-1"
//         app:argType="integer" />
// </fragment>

// În codul fragmentului:
class ProfileFragment : Fragment() {
    private val args: ProfileFragmentArgs by navArgs()

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        loadProfile(args.userId)
    }
}

Argumentele userId sunt transmise în graful de navigare cu specificarea tipului (integer) și a valorii implicite. Clasa ProfileFragmentArgs este generată automat de plugin-ul Navigation Safe Args — conține toate argumentele cu tipurile corecte Kotlin. Deep link-urile se configurează în graf: app:deepLink="app://profile/{userId}". Navigation Component analizează singur URL-ul și creează back stack-ul ca și cum utilizatorul ar fi navigat prin interfață.

Bottom Navigation și Conditional Navigation

Navigation Component se integrează cu BottomNavigationView prin NavController: fiecare element de meniu este legat de o destinație în graf. Tranziția între tab-uri nu recrează fragmentul — Navigation Component păstrează starea prin NavBackStackEntry. Pentru navigarea condiționată (afișarea login-ului dacă nu este autentificat) se folosește navController.navigate(condition) cu verificare în onCreate.

AndroidX: Support Library de nouă generație

AndroidX — este o arhitectură reproiectată a Support Library, în care fiecare bibliotecă a primit propriul artefact cu versiune independentă. În loc de un singur com.android.support:appcompat-v7:28.0.0, AndroidX oferă androidx.appcompat:appcompat:1.7.0, androidx.recyclerview:recyclerview:1.4.0 și așa mai departe. Aceasta a eliminat problema când diferite dependențe trăgeau versiuni diferite ale Support Library, provocând conflicte.

Migrarea la AndroidX se efectuează automat în Android Studio 3.2+ prin meniul Refactor → Migrate to AndroidX. Studio înlocuiește toate importurile în fișierele Java/Kotlin, manifeste și resurse. Compatibilitatea retroactivă — principalul avantaj al AndroidX: bibliotecile funcționează pe Android 5.0 (API 21) și superior, acoperind 97% din dispozitivele active conform Google Play Console (2025).

Principalele artefacte AndroidX

Cele mai frecvent utilizate artefacte: appcompat (temă întunecată, Material Design pe API-uri vechi), recyclerview (liste adaptive cu ViewHolder), constraintlayout (container flexibil cu ierarhie plată), cardview (carduri Material Design), preference (ecran de setări în stil Material). Fiecare artefact este versionat independent, accelerând primirea corecțiilor fără actualizarea întregului pachet.

Alte biblioteci importante Jetpack

Pe lângă Architecture și AndroidX, Jetpack include numeroase biblioteci specializate pentru sarcini tipice de dezvoltare mobilă. WorkManager — pentru sarcini în fundal cu execuție garantată (sincronizare, încărcare log-uri), suportă sarcini periodice și amânate, precum și restricții de rețea și baterie. DataStore — înlocuitor pentru SharedPreferences bazat pe corutine, care suportă proprietăți tipizate (Preferences DataStore) și Protocol Buffers (Proto DataStore).

  • Hilt — un framework DI bazat pe Dagger, care simplifică injectarea dependențelor prin adnotări @HiltViewModel, @Inject, @Module. Integrare încorporată cu ViewModel și Navigation.
  • Paging 3 — o bibliotecă pentru încărcarea paginată a datelor din rețea/BD cu suport pentru RemoteMediator (rețea + cache), StateFlow și Compose.
  • CameraX — API pentru lucrul cu camera, care abstractizează diferențele producătorilor (Samsung, Xiaomi, Honor) printr-o interfață unitară CameraController.
  • Security Crypto — criptarea datelor prin EncryptedSharedPreferences și EncryptedFile bazate pe AES-256 cu cheia principală în Android Keystore.

Fiecare bibliotecă are propriul SDK minim și artefact. Google lansează versiuni majore o dată pe an (coincizând cu lansarea Android) și patch-uri de securitate — trimestrial. Recomandare — conectați doar bibliotecile necesare pentru a nu mări dimensiunea APK. Jetpack în ansamblu (toate artefactele) cântărește peste 20 MB, dar o aplicație tipică utilizează 5–7 biblioteci, adăugând la APK 3–5 MB.

Întrebări frecvente

Este necesară migrarea de la Support Library la AndroidX?

Da, Google a încetat suportul pentru Support Library în 2019. Toate noile biblioteci Jetpack și Google Play Services necesită AndroidX. Migrarea se efectuează în 30–60 de minute prin Android Studio.

Se poate folosi Jetpack cu Java sau doar cu Kotlin?

Jetpack este complet compatibil cu Java. Cu toate acestea, multe funcții (viewModelScope, corutine, Compose) sunt disponibile doar în Kotlin. Google recomandă Kotlin pentru proiecte noi.

Cu ce se deosebește ViewModel de onSaveInstanceState?

ViewModel stochează obiecte în memorie și supraviețuiește rotației. onSaveInstanceState este potrivit doar pentru primitive serializabile (Bundle). ViewModel nu se salvează la uciderea procesului — pentru aceasta este necesar SavedStateHandle.

Când să folosim WorkManager în loc de corutine?

WorkManager — pentru sarcini care trebuie executate chiar și după închiderea aplicației: sincronizare, încărcare log-uri, trimitere analitică. Corutinele — pentru sarcini legate de ecran.

Cum migrăm de la SharedPreferences la DataStore?

Înlocuiți importurile SharedPreferences cu DataStore<Preferences>. Citirea prin dataStore.data.first() (suspend), scrierea prin dataStore.edit { ... }. DataStore este asincron și protejat împotriva ANR.

Rezumat

  • Android Jetpack — un set de peste 50 de biblioteci pentru dezvoltarea Android, unite sub AndroidX cu compatibilitate retroactivă până la API 21.
  • ViewModel supraviețuiește rotațiilor ecranului și păstrează datele UI, iar Lifecycle notifică componentele despre schimbarea stării Activity/Fragment.
  • Room — ORM type-safe peste SQLite cu verificarea interogărilor la compilare, migrații și suport pentru corutine.
  • Navigation Component gestionează tranzițiile prin grafuri cu argumente type-safe și deep link automat.
  • WorkManager garantează executarea sarcinilor în fundal chiar și după închiderea aplicației, DataStore înlocuiește SharedPreferences.
  • Jetpack se împarte în patru categorii: Architecture, UI, Behavior, Foundation — fiecare acoperind propriul strat al aplicației.
  • Aplicațiile pe Jetpack au cu 30% mai puține crash-uri legate de ciclul de viață și se dezvoltă mai rapid datorită soluțiilor arhitecturale gata făcute.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și