Práce s manifestem androidu

AndroidManifest.xml je výkonný soubor na platformě Android, který umožňuje popsat funkce a požadavky vaší aplikace na Android. Práce s ní ale není jednoduchá. Xamarin.Android pomáhá tyto potíže minimalizovat tím, že umožňuje přidat do tříd vlastní atributy, které se pak budou používat k automatickému vygenerování manifestu za vás. Naším cílem je, aby 99 % našich uživatelů nikdy nemělo ručně upravovatAndroidManifest.xml.

AndroidManifest.xml se generuje jako součást procesu sestavení a XML nalezen v rámci Vlastnosti/AndroidManifest.xml je sloučen s XML, který je generován z vlastních atributů. Výsledný sloučený AndroidManifest.xml se nachází v podadresáři obj. Nachází se například v umístění obj/Debug/android/AndroidManifest.xml sestavení pro ladění. Proces sloučení je triviální: používá vlastní atributy v kódu k vygenerování elementů XML a vloží tyto prvky doAndroidManifest.xml.

Základy

V době kompilace jsou v sestaveních zkontrolovány jiné než třídy, které jsou odvozeny z třídy Activity a mají abstract atribut abstract[Activity] deklarovaný na nich. Pak tyto třídy a atributy použije k sestavení manifestu. Představte si například následující kód:

namespace Demo
{
    public class MyActivity : Activity
    {
    }
}

Výsledkem je, že se v souboru nic negenerujeAndroidManifest.xml. Pokud chcete <activity/> vygenerovat prvek, musíte použít[Activity] vlastní atribut:

namespace Demo
{
    [Activity]
    public class MyActivity : Activity
    {
    }
}

Tento příklad způsobí přidání následujícího fragmentu XML do AndroidManifest.xml:

<activity android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity" />

Atribut [Activity] nemá žádný vliv na abstract typy; typy jsou abstract ignorovány.

Název aktivity

Počínaje Xamarin.Androidem 5.1 je název typu aktivity založen na MD5SUM kvalifikovaného názvu sestavení exportovaného typu. To umožňuje, aby byl stejný plně kvalifikovaný název poskytnut ze dvou různých sestavení a nezískal chybu balení. (Před Verzí Xamarin.Android 5.1 se výchozí název typu aktivity vytvořil z oboru názvů s nižší velikostí a název třídy.)

Pokud chcete přepsat toto výchozí nastavení a explicitně zadat název aktivity, použijte Name vlastnost :

[Activity (Name="awesome.demo.activity")]
public class MyActivity : Activity
{
}

Tento příklad vytvoří následující fragment xml:

<activity android:name="awesome.demo.activity" />

Poznámka

Vlastnost byste měli používat pouze z důvodů zpětné kompatibility, protože takové přejmenování může zpomalit vyhledávání typů Name za běhu. Pokud máte starší kód, který očekává, že výchozí název typu aktivity bude založen na oboru názvů s nižším textem a názvu třídy, najdete tipy pro zachování kompatibility v tématu Pojmenování obálky volatelné pro Android.

Záhlaví aktivity

Android ve výchozím nastavení dává aplikaci při spuštění záhlaví. Hodnota použitá pro tuto hodnotu je /manifest/application/activity/@android:label . Ve většině případů se tato hodnota bude lišit od názvu vaší třídy. Pokud chcete zadat popisek aplikace na záhlaví, použijte Label vlastnost . Například:

[Activity (Label="Awesome Demo App")]
public class MyActivity : Activity
{
}

Tento příklad vytvoří následující fragment xml:

<activity android:label="Awesome Demo App" 
          android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity" />

Možnost spuštění z výběru aplikace

Ve výchozím nastavení se vaše aktivita nebude zobrazovat na obrazovce spouštěče aplikací pro Android. Je to proto, že ve vaší aplikaci bude pravděpodobně mnoho aktivit a nechcete pro každou z nich ikonu. Pokud chcete určit, který z nich se má spustit ze spouštěče aplikace, použijte MainLauncher vlastnost . Například:

[Activity (Label="Awesome Demo App", MainLauncher=true)] 
public class MyActivity : Activity
{
}

Tento příklad vytvoří následující fragment xml:

<activity android:label="Awesome Demo App" 
          android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

Ikona aktivity

Ve výchozím nastavení se vaší aktivitě zobrazí výchozí ikona spouštěče poskytovaná systémem. Pokud chcete použít vlastní ikonu, nejprve přidejte.pngdo resources/drawable, nastavte jeho akci sestavení na AndroidResourcea potom pomocí vlastnosti určete ikonu, která se má použít. Například:

[Activity (Label="Awesome Demo App", MainLauncher=true, Icon="@drawable/myicon")] 
public class MyActivity : Activity
{
}

Tento příklad vytvoří následující fragment xml:

<activity android:icon="@drawable/myicon" android:label="Awesome Demo App" 
          android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

Oprávnění

Když do manifestu pro Android přidáte oprávnění (jak je popsáno v článku Přidání oprávnění do manifestu Androidu),tato oprávnění se zaznamenávají v části Vlastnosti/AndroidManifest.xml. Pokud například nastavíte INTERNET oprávnění, do INTERNETse přidá následující AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />

Ladicí buildy automaticky nastavují některá oprávnění, aby bylo ladění jednodušší (například a ). Tato nastavení se nastavují jenom ve vygenerované sadě INTERNETREAD_EXTERNAL_STORAGEINTERNETREAD_EXTERNAL_STORAGE a v nastavení Požadovaných oprávnění se nezobrazují jako povolená.

Pokud například prozkoumáte vygenerovaný soubor manifestu na obj/Debug/android/AndroidManifest.xml, může se zobrazit následující přidané elementy oprávnění:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Ve verzi sestavení verze manifestu (v obj/Debug/android/AndroidManifest.xml) se tato oprávnění automaticky nenakonfigurují. Pokud zjistíte, že přepnutí na sestavení pro vydání způsobí, že vaše aplikace ztratí oprávnění, které bylo k dispozici v sestavení pro ladění, ověřte, že jste toto oprávnění explicitně nastavili v nastavení Požadovaná oprávnění pro vaši aplikaci (viz Sestavení aplikace pro Android v Visual Studio pro Mac; viz Vlastnosti manifestu Androidu v Visual Studio).

Pokročilé funkce

Akce a funkce záměru

Manifest Androidu poskytuje způsob, jak popsat možnosti vaší aktivity. To se provádí prostřednictvím záměrů a[IntentFilter] vlastní atribut. Můžete určit, které akce jsou pro vaši aktivitu vhodné, pomocíIntentFilter konstruktor a kategorie, které jsou vhodné proCategories Vlastnost. Musí být poskytnuta alespoň jedna aktivita (což je důvod, proč jsou aktivity poskytovány v konstruktoru). [IntentFilter] může být poskytnuta vícekrát a každý z nich má za výsledek <intent-filter/> samostatný prvek v rámci <activity/> . Například:

[Activity (Label="Awesome Demo App", MainLauncher=true, Icon="@drawable/myicon")] 
[IntentFilter (new[]{Intent.ActionView}, 
        Categories=new[]{Intent.CategorySampleCode, "my.custom.category"})]
public class MyActivity : Activity
{
}

Tento příklad vytvoří následující fragment xml:

<activity android:icon="@drawable/myicon" android:label="Awesome Demo App" 
          android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.SAMPLE_CODE" />
    <category android:name="my.custom.category" />
  </intent-filter>
</activity>

Element aplikace

Manifest Androidu také nabízí způsob, jak deklarovat vlastnosti pro celou aplikaci. To se provádí prostřednictvím <application> elementu a jeho protějšku, <application> Aplikace. Všimněte si, že se jedná o nastavení pro celou aplikaci (celé sestavení) místo nastavení pro aktivitu. Obvykle deklarujete vlastnosti pro celou aplikaci a pak tato nastavení (podle potřeby) přepíšete pro každou <application> aktivitu.

Do souboru ApplicationApplication je například přidán následující atribut, který označuje, že aplikaci lze ladit, že její uživatelem čitelný název je Mojeaplikace a že používá styl jako výchozí motiv pro všechny aktivity:

[assembly: Application (Debuggable=true,   
                        Label="My App",   
                        Theme="@android:style/Theme.Light")]

Tato deklarace způsobí vygenerování následujícího fragmentu XML v obj/Debug/android/AndroidManifest.xml:

<application android:label="My App" 
             android:debuggable="true" 
             android:theme="@android:style/Theme.Light"
                ... />

V tomto příkladu budou všechny aktivity v aplikaci ve výchozím nastavení ve Theme.Light stylu . Pokud nastavíte motiv aktivity na , styl bude používat jenom tato aktivita, zatímco všechny ostatní aktivity ve vaší aplikaci budou mít výchozí styl nastavený Theme.DialogTheme.Dialog v Theme.Light<application> elementu .

Element Application není jediný způsob, jak nakonfigurovat <application> atributy. Alternativně můžete atributy vložit přímo do <application> elementu <application>. Tato nastavení se sloučí s posledním <application> prvkem, který se nachází v <application>. Všimněte si, že obsah properties/AndroidManifest.xml vždy přepíše data poskytnutá vlastními atributy.

V elementu můžete nakonfigurovat mnoho atributů pro celou aplikaci. Další informace o těchto nastaveních najdete v části Veřejné vlastnosti <application>atributu ApplicationAttribute.<application>

Seznam vlastních atributů