AndroidManifest.xml — co to je, hlavní komponenty a konfigurace manifestu

Autor: IT Sectr Publikováno: 2026-05-31 Doba čtení: 8 min

AndroidManifest.xml je povinný konfigurační soubor každé Android aplikace, který popisuje její komponenty, oprávnění a metadata. Systém Android tento soubor čte při instalaci a spouštění každé aplikace. Podle Android Developers, 2025 se bez správného manifestu aplikace neinstaluje do zařízení. AndroidManifest.xml registruje Activity, Service, BroadcastReceiver a ContentProvider pro operační systém.

Hlavní body

  • AndroidManifest.xml — XML soubor deklarující všechny komponenty a požadavky Android aplikace
  • Activity, Service, BroadcastReceiver, ContentProvider se registrují uvnitř tagu application
  • Oprávnění se uvádějí pomocí tagů uses-permission a uses-permission-sdk-23
  • Intent Filters určují, jaké systémové akce může každá komponenta zpracovávat
  • Atribut exported řídí dostupnost komponenty pro ostatní aplikace

Co je AndroidManifest.xml

AndroidManifest.xml je hlavní konfigurační soubor ve formátu XML, který musí každý Android projekt obsahovat v adresáři app/src/main. Systém Android jej analyzuje před spuštěním jakéhokoli kódu aplikace — ve fázi parsování APK při instalaci. Pokud je v manifestu syntaktická chyba nebo chybí povinná deklarace, instalace je přerušena chybovou zprávou.

Soubor obsahuje úplnou deklaraci aplikace: seznam všech komponent (Activity, Service, BroadcastReceiver, ContentProvider), požadovaná oprávnění, minimální verzi SDK, hardwarové požadavky a konfiguraci motivů a stylů. Každá komponenta, která může být volána systémem nebo jinými aplikacemi, musí být explicitně deklarována v manifestu. Toto je bezpečnostní požadavek: bez explicitní deklarace není komponenta k dispozici pro volání.

Bez správně nakonfigurovaného manifestu nelze aplikaci nainstalovat prostřednictvím Google Play nebo sideloadingu. Systém kontroluje manifest ve fázi parsování APK a při chybách instalaci odmítá. Google Play také skenuje manifest kvůli nebezpečným konfiguracím: pro exported=true na komponentě bez intent-filter se zobrazí varování, a při chybějících povinných oprávněních pro targetSdk 34+ je publikování blokováno. Proto je porozumění struktuře manifestu povinnou dovedností vývojáře Androidu.

Komponenty aplikace v manifestu

Každá komponenta Android aplikace musí být explicitně zaregistrována v manifestu. Toto je povinný požadavek platformy pro všechny čtyři typy komponent. Bez registrace nemůže být komponenta vytvořena systémem a pokus o její spuštění povede k výjimce ActivityNotFoundException nebo podobné. Komponenty se registrují uvnitř tagu application v pořadí, které neovlivňuje jejich činnost.

Activity

Tag activity registruje obrazovku aplikace. Atribut exported určuje, zda mohou jiné aplikace spouštět tuto Activity. Od Androidu 12 způsobuje absence exported při přítomnosti intent-filter chybu kompilace — to je bezpečnostní požadavek. Vstupní bod se nastavuje pomocí intent-filter s action MAIN a category LAUNCHER. Každá Activity musí mít jedinečný android:name odpovídající úplnému nebo relativnímu názvu třídy.

xml
<activity
    android:name=".MainActivity"
    android:exported="true"
    android:windowSoftInputMode="adjustResize">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Service

Tag service definuje službu na pozadí. Od Androidu 8 mají služby na pozadí přísná omezení: foreground service vyžaduje povinné oznámení s ikonou viditelnou uživateli, a bound service žije pouze při existenci připojeného klienta. Služby běžící na pozadí bez oznámení jsou automaticky ukončeny systémem několik minut po přechodu aplikace do režimu na pozadí. Pro dlouhodobé úlohy používejte WorkManager místo Service.

xml
<service
    android:name=".SyncService"
    android:exported="false"
    android:foregroundServiceType="dataSync" />

BroadcastReceiver

Tag receiver deklaruje přijímač systémových nebo vlastních vysílacích zpráv. Od Androidu 8 většina implicitních vysílání již není doručována staticky deklarovaným přijímačům v manifestu. Místo toho se doporučuje dynamická registrace přijímačů pomocí Context.registerReceiver v kódu. Výjimkou jsou některá systémová vysílání, například BOOT_COMPLETED, která stále vyžadují statickou registraci v manifestu.

xml
<receiver
    android:name=".ConnectivityReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
</receiver>

Oprávnění (Permissions) v Androidu

Každé nebezpečné oprávnění v Androidu vyžaduje deklaraci v manifestu pomocí tagu uses-permission. Od Androidu 6 jsou nebezpečná oprávnění vyžadována za běhu prostřednictvím dialogu s uživatelem, ale deklarace v manifestu zůstává povinná. Bez ní metoda requestPermissions vyvolá výjimku SecurityException. Oprávnění normální úrovně, jako INTERNET a ACCESS_NETWORK_STATE, jsou udělena automaticky při instalaci.

OprávněníÚčel
CAMERAPřístup ke kameře zařízení pro focení a video
ACCESS_FINE_LOCATIONPřesná geolokace pomocí GPS a sítě
RECORD_AUDIONahrávání zvuku z mikrofonu zařízení
READ_CONTACTSČtení kontaktů z telefonního seznamu
POST_NOTIFICATIONSOdesílání oznámení na Android 13+

Tag uses-permission-sdk-23 určuje oprávnění potřebná pouze na Android 6.0+. To umožňuje zachovat kompatibilitu se staršími verzemi bez žádosti o neexistující oprávnění. Například POST_NOTIFICATIONS je dostupné pouze na Android 13+, proto musí být uvedeno pomocí uses-permission-sdk-33, aby na starších zařízeních nedošlo k chybě neznámého oprávnění. Atribut maxSdkVersion v uses-permission umožňuje automatické odvolání nepotřebných oprávnění při aktualizaci aplikace na novější verze Androidu.

Oprávnění normální úrovně (INTERNET, ACCESS_NETWORK_STATE) jsou udělována automaticky při instalaci a nevyžadují žádost za běhu. Jsou také deklarována pomocí uses-permission, ale nejsou uživateli zobrazena v dialogu. Pro řízení přístupu ke komponentám aplikace z jiných aplikací se používá mechanismus permission-protected components: lze nastavit vlastní oprávnění na úrovni Activity nebo Service, které bude systém kontrolovat při volání komponenty zvenčí. To poskytuje další úroveň zabezpečení pro meziprocesovou komunikaci.

Intent Filters a hluboké odkazy

Tag intent-filter v manifestu deklaruje, jaké implicitní intenty může komponenta zpracovávat. Toto je mechanismus, kterým Android propojuje systémové nebo vlastní akce s aplikací. Intent filter se skládá ze tří prvků: action (akce), category (kategorie) a data (data). Všechny tři lze kombinovat pro přesný popis toho, jaké intenty má komponenta přijímat. Systém vybírá vhodnou komponentu na základě nejkonkrétnějšího filtru.

xml
<activity android:name=".DeepLinkActivity">
    <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="https"
            android:host="itsectr.com"
            android:pathPrefix="/app" />
    </intent-filter>
</activity>

Atribut autoVerify zapíná ověření Android App Links: systém kontaktuje server pro potvrzení vlastnictví domény. Bez ověření fungují hluboké odkazy prostřednictvím standardního dialogu výběru, kde uživatel volí, kterou aplikací odkaz otevřít. Po úspěšném ověření se odkazy otevírají přímo v aplikaci bez dialogu. Google Search Console také používá autoVerify pro indexování deep linků a jejich zobrazování ve výsledcích vyhledávání.

Filtry s action.VIEW a kategoriemi DEFAULT a BROWSABLE zpracovávají odkazy z prohlížeče, e-mailu a dalších aplikací. Toto je hlavní mechanismus implementace hlubokých odkazů v Androidu. Pro podporu vlastních URL schémat, například myapp://, stačí uvést scheme bez hostitele. Google však doporučuje používat HTTPS hluboké odkazy místo vlastních schémat, protože jsou bezpečnější a nevyžadují další oprávnění. Vlastní schémata mohou být zachycena jakoukoli aplikací, která zaregistrovala stejné schéma.

Atributy aplikace a metadata

Kořenový tag manifest obsahuje atributy balíčku, verze a SDK. Tag application ukládá globální nastavení: motiv, ikonu, popisek a ladící příznaky. Atributy manifestu nastavují verzování na úrovni balíčku, zatímco atributy application definují vzhled a chování aplikace jako celku. Hodnoty mohou být odkazy na zdroje pomocí @-syntaxe nebo řetězcové literály.

xml
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itsectr.myapp"

    <uses-sdk
        android:minSdkVersion="24"
        android:targetSdkVersion="34" />

    <application
        android:label="MyApp"
        android:icon="@mipmap/ic_launcher"
        android:theme="@style/Theme.MyApp"
        android:supportsRtl="true"
        android:allowBackup="true">
        <!--  Komponenty aplikace  -->
    </application>
</manifest>

Tag meta-data uvnitř application umožňuje ukládání libovolných párů klíč-hodnota. To je vhodné pro konfiguraci knihoven třetích stran: API klíče, adresy endpointů a příznaky funkcionality. Data z meta-data jsou dostupná prostřednictvím PackageManager.getApplicationInfo().metaData za běhu. Například Firebase a Google Maps používají meta-data k předávání přístupových klíčů bez pevného kódování ve zdrojovém kódu. Klíče se uvádějí v manifestu a mohou se lišit pro různé varianty sestavení.

Atribut android:extractNativeLibs řídí extrakci nativních knihoven z APK. Pro aplikace s targetSdk 34+ musí být tento atribut explicitně uveden, jinak může sestavení selhat s chybou INSTALL_FAILED_INVALID_APK. Pokud je extractNativeLibs=false, nativní knihovny zůstávají uvnitř APK bez rozbalení, což snižuje velikost nainstalované aplikace, ale zvyšuje dobu načítání knihoven. Pro většinu moderních aplikací se doporučuje extractNativeLibs=false pro úsporu místa na disku uživatele.

Atribut android:networkSecurityConfig umožňuje zadat konfigurační soubor zabezpečení sítě. To je důležité zejména pro aplikace s targetSdk 28+, kde je HTTP provoz ve výchozím nastavení blokován. Konfigurační soubor určuje důvěryhodné certifikáty, domény pro HTTP připojení a pravidla pro přiřazování certifikátů. Nahrazuje zastaralý atribut android:usesCleartextTraffic a poskytuje flexibilnější mechanismus správy zabezpečení připojení na úrovni operačního systému.

Atribut android:largeHeap požaduje zvětšenou velikost haldy pro aplikaci. Výchozí nastavení Androidu přiděluje každé aplikaci omezené množství paměti v závislosti na zařízení a verzi operačního systému. Pokud aplikace pracuje s těžkými obrázky, videem nebo velkými datovými sadami, largeHeap může zabránit OutOfMemoryError. Zneužívání tohoto atributu je však škodlivé: aplikace s vysokou spotřebou paměti je při nedostatku zdrojů systémem rychleji ukončena. Používejte largeHeap pouze po profilování a potvrzení nezbytnosti.

Často kladené otázky

Co se stane, když neuvedu exported pro Activity?

Od Androidu 12 způsobuje absence atributu exported při přítomnosti intent-filter chybu kompilace. Systém vyžaduje explicitní uvedení viditelnosti každé komponenty s intent-filter — to je bezpečnostní opatření k zabránění náhodnému otevření komponent jinými aplikacemi. Pro Activity bez intent-filter je exported ve výchozím nastavení false.

Může mít více Activity intent-filter LAUNCHER?

Ano, ale v launcheru se zobrazí několik ikon aplikace. Každá Activity s MAIN/LAUNCHER se stává samostatným vstupním bodem. Používá se to k vytváření zástupců do různých částí aplikace, například pro přímý přechod do nastavení nebo vytvoření nového záznamu. Každá ikona otevírá přímo odpovídající Activity.

Jak funguje slučování manifestů v Androidu?

Android slučuje manifesty z knihoven s hlavním manifestem aplikace. Při konfliktu atributů se používá tools:replace nebo tools:node="merge" k vyřešení. Tento mechanismus je automatický: při přidání knihovny přes Gradle se její manifest sloučí s hlavním. Pro zrušení nebo nahrazení atributu z knihovny použijte tools:node="remove" nebo tools:replace="attributeName".

Proč se dialog oprávnění nezobrazuje?

Typické příčiny: oprávnění není deklarováno v manifestu pomocí uses-permission, používá se oprávnění normální úrovně (bez žádosti za běhu), uživatel zvolil "Znovu se neptat" a oprávnění je natrvalo odepřeno, nebo targetSdkVersion je nižší než 23, kde se oprávnění vyžadují při instalaci. Pro diagnostiku zkontrolujte manifest a protokoly pomocí adb logcat.

Co je debuggable v manifestu?

Atribut android:debuggable zapíná ladění aplikace přes ADB. Pro vydání v Google Play musí být false. Pokud je debuggable=true ve vydání, může se útočník připojit k aplikaci přes ADB, číst data a spouštět libovolný kód. Google Play automaticky blokuje publikování sestavení s debuggable=true.

Shrnutí

  • AndroidManifest.xml — povinný konfigurační soubor s deklarací všech komponent Android aplikace
  • Activity, Service, Receiver, Provider se registrují uvnitř tagu application s atributy viditelnosti a konfigurace
  • Oprávnění se deklarují pomocí uses-permission, nebezpečná se vyžadují za běhu po Androidu 6.0
  • Intent Filters s autoVerify zapínají Android App Links pro přímé hluboké odkazy bez dialogu výběru
  • uses-sdk nastavuje minSdkVersion a targetSdkVersion pro řízení kompatibility s verzemi Androidu
  • exported je povinný pro všechny komponenty s intent-filter od Androidu 12
  • Sloučení manifestů kombinuje konfigurace z modulů a knihoven s podporou přepisování atributů

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

Prodiskutovat projekt

Přečtěte si také