Jetpack — je sada knihoven Android od Google, které zjednodušují vývoj a urychlují vytváření stabilních aplikací. Komponenty jako ViewModel, Room a Navigation řeší typické úkoly: správu životního cyklu, ukládání dat a navigaci. Podle Android Developers (2026) Jetpack pokrývá více než 50 knihoven, z nichž každá je zpětně kompatibilní s Android 5.0 (API 21) prostřednictvím AndroidX — knihovny kompatibility, která nahradila Support Library.
Hlavní body
Android Jetpack — je kolekce knihoven, nástrojů a architektonických doporučení od Google, představená v roce 2018 na Google I/O. Jetpack nahradil Support Library a Android Architecture Components a sjednotil je do jednoho ekosystému. Před Jetpackem se každá knihovna Android aktualizovala nezávisle, což způsobovalo konflikty verzí. Jetpack synchronizoval verze pod jednotným identifikátorem AndroidX a zavedl model stabilních hlavních verzí s menšími opravami.
Knihovny Jetpack se dělí do čtyř kategorií: Architecture (ViewModel, Room, Navigation, WorkManager), UI (Fragment, Compose, Animation, Palette), Behavior (DownloadManager, Media, Permissions, Sharing), Foundation (Android KTX, Multidex, AppCompat). Každá kategorie řeší úkoly určité vrstvy aplikace — od správy dat až po uživatelské rozhraní.
Google prosazuje tři principy Jetpacku: accelerate development (méně boilerplate, více obchodní logiky), eliminate boilerplate (ViewModel odstraňuje ruční ukládání stavu, Room — psaní SQLiteOpenHelper) a build with confidence (každá knihovna prochází 15+ tisíci testy před vydáním). Podle Android Developers (2026) mají aplikace na Jetpacku o 30% méně pádů souvisejících s životním cyklem.
Všechny knihovny Jetpack jsou distribuovány pod identifikátorem AndroidX (artefakty ve tvaru androidx.*). AndroidX nahradil Support Library (artefakty com.android.support.*), rozdělil monolitickou knihovnu na modulární artefakty s nezávislým verzováním. Migrace na AndroidX se provádí pomocí volby android.useAndroidX=true v gradle.properties — Android Studio automaticky převede importy.
ViewModel — centrální komponenta architektury Jetpack, která ukládá data UI. Na rozdíl od Activity, která je zničena při otáčení obrazovky, ViewModel zůstává v paměti. Uživatel vyplní formulář, otočí telefon — data se neztratí. ViewModel se automaticky vyčistí, když LifecycleOwner (Activity nebo Fragment) definitivně ukončí svůj životní cyklus (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("Obrazovka spuštěna")
}
}
LiveData — pozorovatelný kontejner pro data, který bere v úvahu životní cyklus. Pokud obrazovka není viditelná (onStop), LiveData neodesílá aktualizace — to zabraňuje únikům paměti a pádům při pokusu o aktualizaci neexistující Activity. Lifecycle — třída, která ukládá aktuální stav (CREATED, STARTED, RESUMED) a umožňuje ostatním komponentám přihlásit se k odběru změn stavu. Společně ViewModel, LiveData a Lifecycle tvoří základ reaktivní architektury Android.
viewModelScope — vestavěný CoroutineScope vázaný na životní cyklus ViewModel. Všechny korutiny spuštěné v tomto scope jsou automaticky zrušeny při čištění ViewModel. To eliminuje ruční správu Disposable a CompositeDisposable v každém ViewModel. Pro práci s viewModelScope je vyžadována závislost androidx.lifecycle:lifecycle-viewmodel-ktx.
Room — je ORM knihovna Jetpacku, která poskytuje abstraktní vrstvu nad SQLite. Místo psaní nezpracovaných SQL dotazů a ručního převodu Cursor na objekty vývojář deklaruje Entity (tabulku), DAO (Data Access Object) a Database (vstupní bod). Room kontroluje SQL dotazy v době kompilace prostřednictvím anotace @Query — pokud tabulky nebo sloupce neexistují, sestavení selže se srozumitelnou chybou.
@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 popisuje tabulku se třemi sloupci. DAO deklaruje suspend-funkce pro práci s korutinami — dotaz se automaticky provádí na pozadí. Room podporuje migrace prostřednictvím anotace @Migration: vývojář popíše SQL skript přechodu mezi verzemi a Room jej provede bez ztráty dat. Při neexistenci migrace Room vyvolá IllegalStateException — tím jsou projekty chráněny před náhodnou ztrátou dat při aktualizaci schématu.
Room ukládá pouze primitivní typy a jejich obaly. Pro ukládání seznamů, Date nebo vlastních objektů se používá @TypeConverter — statická metoda převádějící typ na String (JSON) nebo Long (timestamp). Vztahy mezi tabulkami se modelují pomocí vnořených objektů s anotací @Relation a pomocných tříd POJO s @Transaction pro efektivní join dotazy.
Navigation Component — knihovna Jetpacku pro správu přechodů mezi obrazovkami. Místo ručního volání FragmentTransaction vývojář vytvoří navigační graf (XML soubor s uzly-destinacemi) a systém vygeneruje třídu Directions s type-safe metodami přechodů. Navigation Component zaručuje správnou funkci back stack, deep links a předávání argumentů mezi obrazovkami.
// nav_graph.xml
// <fragment android:id="@+id/profileFragment"
// android:name=".ProfileFragment">
// <argument android:name="userId"
// android:defaultValue="-1"
// app:argType="integer" />
// </fragment>
// V kódu fragmentu:
class ProfileFragment : Fragment() {
private val args: ProfileFragmentArgs by navArgs()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
loadProfile(args.userId)
}
}
Argumenty userId jsou předávány v navigačním grafu s určením typu (integer) a výchozí hodnoty. Třída ProfileFragmentArgs je automaticky generována pluginem Navigation Safe Args — obsahuje všechny argumenty se správnými typy Kotlin. Hluboké odkazy se konfigurují v grafu: app:deepLink="app://profile/{userId}". Navigation Component sám analyzuje URL a vytváří back stack, jako by uživatel procházel rozhraním.
Navigation Component se integruje s BottomNavigationView prostřednictvím NavController: každá položka menu je vázána na destinaci v grafu. Přechod mezi kartami znovu nevytváří fragment — Navigation Component uchovává stav prostřednictvím NavBackStackEntry. Pro podmíněnou navigaci (zobrazení přihlášení, pokud není autorizován) se používá navController.navigate(condition) s kontrolou v onCreate.
AndroidX — je přepracovaná architektura Support Library, ve které každá knihovna získala vlastní artefakt s nezávislou verzí. Místo jediného com.android.support:appcompat-v7:28.0.0 AndroidX nabízí androidx.appcompat:appcompat:1.7.0, androidx.recyclerview:recyclerview:1.4.0 a tak dále. To odstranilo problém, kdy různé závislosti tahaly různé verze Support Library, což způsobovalo konflikt.
Migrace na AndroidX se provádí automaticky v Android Studio 3.2+ pomocí nabídky Refactor → Migrate to AndroidX. Studio nahrazuje všechny importy v Java/Kotlin souborech, manifestech a zdrojích. Zpětná kompatibilita — hlavní výhoda AndroidX: knihovny fungují na Android 5.0 (API 21) a vyšším, pokrývající 97% aktivních zařízení podle Google Play Console (2025).
Nejčastěji používané artefakty: appcompat (tmavý motiv, Material Design na starých API), recyclerview (adaptivní seznamy s ViewHolder), constraintlayout (flexibilní kontejner s plochou hierarchií), cardview (karty Material Design), preference (obrazovka nastavení ve stylu Material). Každý artefakt je verzován nezávisle, což urychluje získávání oprav bez aktualizace celého balíku.
Kromě Architecture a AndroidX obsahuje Jetpack mnoho specializovaných knihoven pro typické úkoly mobilního vývoje. WorkManager — pro úlohy na pozadí s garantovaným provedením (synchronizace, nahrávání logů), podporuje periodické a odložené úlohy, stejně jako omezení sítě a baterie. DataStore — náhrada za SharedPreferences založená na korutinách, podporující typované vlastnosti (Preferences DataStore) a Protocol Buffers (Proto DataStore).
Každá knihovna má vlastní minimální SDK a artefakt. Google vydává hlavní verze jednou ročně (souběžně s vydáním Android) a bezpečnostní záplaty — čtvrtletně. Doporučení — připojujte pouze potřebné knihovny, abyste nezvětšovali velikost APK. Jetpack jako celek (všechny artefakty) váží přes 20 MB, ale typická aplikace používá 5-7 knihoven, přidávajících do APK 3-5 MB.
Často kladené otázky
Ano, Google ukončil podporu Support Library v roce 2019. Všechny nové knihovny Jetpack a Google Play Services vyžadují AndroidX. Migrace se provádí za 30-60 minut pomocí Android Studio.
Jetpack je plně kompatibilní s Java. Nicméně mnoho funkcí (viewModelScope, korutiny, Compose) je dostupných pouze v Kotlin. Google doporučuje Kotlin pro nové projekty.
ViewModel ukládá objekty v paměti a přežije otáčení. onSaveInstanceState je vhodný pouze pro serializovatelné primitivy (Bundle). ViewModel se neukládá při zabití procesu — k tomu je potřeba SavedStateHandle.
WorkManager — pro úlohy, které musí být provedeny i po zavření aplikace: synchronizace, nahrávání logů, odesílání analytiky. Korutiny — pro úlohy vázané na obrazovku.
Nahraďte importy SharedPreferences za DataStore<Preferences>. Čtení pomocí dataStore.data.first() (suspend), zápis pomocí dataStore.edit { ... }. DataStore je asynchronní a chráněný proti ANR.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také