Jetpack — to zestaw bibliotek Androida od Google, upraszczających tworzenie oprogramowania i przyspieszających budowę stabilnych aplikacji. Komponenty takie jak ViewModel, Room i Navigation rozwiązują typowe zadania: zarządzanie cyklem życia, przechowywanie danych i nawigację. Według danych Android Developers (2026), Jetpack obejmuje ponad 50 bibliotek, z których każda jest wstecznie kompatybilna z Android 5.0 (API 21) poprzez AndroidX — bibliotekę zgodności, która zastąpiła Support Library.
Najważniejsze
Android Jetpack — to kolekcja bibliotek, narzędzi i zaleceń architektonicznych od Google, zaprezentowana w 2018 roku na Google I/O. Jetpack zastąpił Support Library i Android Architecture Components, łącząc je w jedną ekosystem. Przed Jetpack każda biblioteka Androida aktualizowała się niezależnie, co powodowało konflikty wersji. Jetpack zsynchronizował wersje pod jednolitym identyfikatorem AndroidX i wprowadził model stabilnych wersji głównych z pomniejszymi łatkami.
Biblioteki Jetpack dzielą się na cztery kategorie: Architecture (ViewModel, Room, Navigation, WorkManager), UI (Fragment, Compose, Animation, Palette), Behavior (DownloadManager, Media, Permissions, Sharing), Foundation (Android KTX, Multidex, AppCompat). Każda kategoria rozwiązuje zadania określonej warstwy aplikacji — od zarządzania danymi po interfejs użytkownika.
Google promuje trzy zasady Jetpack: accelerate development (mniej boilerplate, więcej logiki biznesowej), eliminate boilerplate (ViewModel eliminuje ręczne zapisywanie stanu, Room — pisanie SQLiteOpenHelper) i build with confidence (każda biblioteka przechodzi 15+ tysięcy testów przed wydaniem). Według Android Developers (2026), aplikacje na Jetpack mają o 30% mniej crashy związanych z cyklem życia.
Wszystkie biblioteki Jetpack są rozpowszechniane pod identyfikatorem AndroidX (artefakty postaci androidx.*). AndroidX zastąpił Support Library (artefakty com.android.support.*), dzieląc monolityczną bibliotekę na modułowe artefakty z niezależnym wersjonowaniem. Migrację na AndroidX wykonuje się poprzez opcję android.useAndroidX=true w gradle.properties — Android Studio automatycznie konwertuje importy.
ViewModel — centralny komponent architektury Jetpack, przechowujący dane UI. W przeciwieństwie do Activity, które jest niszczone przy obrocie ekranu, ViewModel pozostaje w pamięci. Użytkownik wypełnia formularz, obraca telefon — dane nie są tracone. ViewModel automatycznie się czyści, gdy LifecycleOwner (Activity lub Fragment) kończy swój cykl życia na stałe (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("Ekran uruchomiony")
}
}
LiveData — obserwowalny kontener dla danych, uwzględniający cykl życia. Jeśli ekran nie jest widoczny (onStop), LiveData nie wysyła aktualizacji — zapobiega to wyciekom pamięci i crashem przy próbie aktualizacji nieistniejącego Activity. Lifecycle — klasa przechowująca bieżący stan (CREATED, STARTED, RESUMED) i umożliwiająca innym komponentom subskrypcję zmian stanu. Razem ViewModel, LiveData i Lifecycle tworzą fundament reaktywnej architektury Androida.
viewModelScope — wbudowany CoroutineScope powiązany z cyklem życia ViewModel. Wszystkie korutyny uruchomione w tym zakresie są automatycznie anulowane przy czyszczeniu ViewModel. Eliminuje to ręczne zarządzanie Disposable i CompositeDisposable w każdym ViewModel. Do pracy z viewModelScope wymagana jest zależność androidx.lifecycle:lifecycle-viewmodel-ktx.
Room — to biblioteka ORM Jetpack, zapewniająca abstrakcyjną warstwę nad SQLite. Zamiast pisania surowych zapytań SQL i ręcznego przekształcania Cursor na obiekty, programista deklaruje Entity (tabelę), DAO (Data Access Object) i Database (punkt wejścia). Room sprawdza zapytania SQL na etapie kompilacji przez adnotację @Query — jeśli tabele lub kolumny nie istnieją, kompilacja kończy się zrozumiałym błędem.
@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 opisuje tabelę z trzema kolumnami. DAO deklaruje suspend-funkcje do pracy z korutynami — zapytanie wykonuje się automatycznie w tle. Room obsługuje migracje przez adnotację @Migration: programista opisuje skrypt SQL przejścia między wersjami, a Room wykonuje go bez utraty danych. W przypadku braku migracji Room rzuca IllegalStateException — w ten sposób projekty są chronione przed przypadkową utratą danych przy aktualizacji schematu.
Room przechowuje tylko typy prymitywne i ich opakowania. Do przechowywania list, Date lub niestandardowych obiektów używa się @TypeConverter — statycznej metody konwertującej typ na String (JSON) lub Long (timestamp). Relacje między tabelami modeluje się poprzez zagnieżdżone obiekty z adnotacją @Relation i pomocnicze klasy POJO z @Transaction dla efektywnych zapytań join.
Navigation Component — biblioteka Jetpack do zarządzania przejściami między ekranami. Zamiast ręcznego wywoływania FragmentTransaction programista tworzy graf nawigacji (plik XML z węzłami-destynacjami), a system generuje klasę Directions z bezpiecznymi typami metod przejść. Navigation Component gwarantuje poprawną pracę back stack, deep links i przekazywania argumentów między ekranami.
// nav_graph.xml
// <fragment android:id="@+id/profileFragment"
// android:name=".ProfileFragment">
// <argument android:name="userId"
// android:defaultValue="-1"
// app:argType="integer" />
// </fragment>
// W kodzie fragmentu:
class ProfileFragment : Fragment() {
private val args: ProfileFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
loadProfile(args.userId)
}
}
Argumenty userId są przekazywane w grafie nawigacji z określeniem typu (integer) i wartości domyślnej. Klasa ProfileFragmentArgs jest generowana automatycznie przez plugin Navigation Safe Args — zawiera wszystkie argumenty z poprawnymi typami Kotlin. Głębokie linki konfiguruje się w grafie: app:deepLink="app://profile/{userId}". Navigation Component sam analizuje URL i tworzy back stack, tak jakby użytkownik przeszedł przez interfejs.
Navigation Component integruje się z BottomNavigationView przez NavController: każda pozycja menu jest przypisywana do destynacji w grafie. Przejście między zakładkami nie odtwarza fragmentu — Navigation Component zachowuje stan przez NavBackStackEntry. Do nawigacji warunkowej (pokazanie loginu, jeśli nie jest zalogowany) używa się navController.navigate(condition) z sprawdzeniem w onCreate.
AndroidX — to przeprojektowana architektura Support Library, w której każda biblioteka otrzymała własny artefakt z niezależną wersją. Zamiast jednego com.android.support:appcompat-v7:28.0.0 AndroidX oferuje androidx.appcompat:appcompat:1.7.0, androidx.recyclerview:recyclerview:1.4.0 i tak dalej. Rozwiązało to problem, gdy różne zależności ciągnęły różne wersje Support Library, powodując konflikt.
Migracja na AndroidX wykonywana jest automatycznie w Android Studio 3.2+ przez menu Refactor → Migrate to AndroidX. Studio zastępuje wszystkie importy w plikach Java/Kotlin, manifestach i zasobach. Wsteczna kompatybilność — główna zaleta AndroidX: biblioteki działają na Android 5.0 (API 21) i nowszych, pokrywając 97% aktywnych urządzeń według Google Play Console (2025).
Najczęściej używane artefakty: appcompat (ciemny motyw, Material Design na starych API), recyclerview (adaptacyjne listy z ViewHolder), constraintlayout (elastyczny kontener z płaską hierarchią), cardview (karty Material Design), preference (ekran ustawień w stylu Material). Każdy artefakt jest wersjonowany niezależnie, przyspieszając otrzymywanie poprawek bez aktualizacji całego pakietu.
Oprócz Architecture i AndroidX, Jetpack zawiera wiele wyspecjalizowanych bibliotek do typowych zadań tworzenia aplikacji mobilnych. WorkManager — do zadań w tle z gwarantowanym wykonaniem (synchronizacja, wysyłanie logów), obsługuje zadania okresowe i opóźnione, a także ograniczenia sieciowe i bateryjne. DataStore — zamiennik SharedPreferences oparty na korutynach, obsługujący właściwości typowane (Preferences DataStore) i Protocol Buffers (Proto DataStore).
Każda biblioteka ma własny minimalny SDK i artefakt. Google wydaje główne wersje raz w roku (zbiegając się z wydaniem Androida) i łatki bezpieczeństwa — kwartalnie. Zalecenie — podłączać tylko niezbędne biblioteki, aby nie zwiększać rozmiaru APK. Jetpack w całości (wszystkie artefakty) waży ponad 20 MB, ale typowa aplikacja używa 5–7 bibliotek, dodając do APK 3–5 MB.
Często zadawane pytania
Tak, Google zakończyło wsparcie Support Library w 2019 roku. Wszystkie nowe biblioteki Jetpack i Google Play Services wymagają AndroidX. Migracja wykonuje się w 30–60 minut przez Android Studio.
Jetpack jest w pełni kompatybilny z Java. Jednak wiele funkcji (viewModelScope, korutyny, Compose) jest dostępnych tylko w Kotlin. Google zaleca Kotlin dla nowych projektów.
ViewModel przechowuje obiekty w pamięci i przetrzymuje obrót. onSaveInstanceState nadaje się tylko do serializowalnych prymitywów (Bundle). ViewModel nie jest zachowywany przy zabiciu procesu — do tego potrzebny jest SavedStateHandle.
WorkManager — do zadań, które muszą się wykonać nawet po zamknięciu aplikacji: synchronizacja, wysyłanie logów, przesyłanie analityki. Korutyny — do zadań związanych z ekranem.
Zastąp importy SharedPreferences na DataStore<Preferences>. Odczyt przez dataStore.data.first() (suspend), zapis przez dataStore.edit { ... }. DataStore jest asynchroniczny i chroniony przed ANR.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również