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ím ale není snadná. Xamarin.Android pomáhá minimalizovat tyto potíže tím, že umožňuje přidat do tříd vlastní atributy, které se pak použijí k automatickému vygenerování manifestu za vás. Naším cílem je, že 99 % uživatelů by nikdy nemělo ručně upravovat AndroidManifest.xml.
AndroidManifest.xml se vygeneruje jako součást procesu sestavení a XML nalezený v rámci vlastností/AndroidManifest.xml se slučuje s XML vygenerovanými z vlastních atributů. Výsledný sloučený AndroidManifest.xml se nachází v podadresáři obj . Nachází se například v obj/Debug/android/AndroidManifest.xml for Debug builds. Proces sloučení je triviální: používá vlastní atributy v kódu k vygenerování elementů XML a vloží tyto prvky do AndroidManifest.xml.
Základy
V době kompilace jsou sestavení prohledávána pro třídy,abstract
které jsou odvozeny z activity a mají [Activity]
atribut deklarován 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 AndroidManifest.xml nic negeneruje. Pokud chcete vygenerovat <activity/>
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; abstract
typy jsou ignorovány.
Název aktivity
Počínaje Xamarin.Android 5.1 je název typu aktivity založen na MD5SUM kvalifikovaného názvu sestavení exportovaného typu. To umožňuje poskytnutí stejného plně kvalifikovaného názvu ze dvou různých sestavení a nezískute chybu balení. (Před Xamarin.Android 5.1 byl vytvořen výchozí název typu aktivity z nižšího oboru názvů a názvu třídy.)
Pokud chcete toto výchozí nastavení přepsat a explicitně zadat název vaší aktivity, použijte Name
tuto 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žít Name
pouze z důvodu zpětné kompatibility, například přejmenování může zpomalit vyhledávání typu za běhu. Pokud máte starší verzi kódu, který očekává, že výchozí název typu aktivity bude založený na nižším oboru názvů a názvu třídy, přečtěte si téma Pojmenování Obálka pro Android, kde najdete tipy pro zachování kompatibility.
Záhlaví aktivity
Android ve výchozím nastavení dává vaší aplikaci při spuštění záhlaví.
Hodnota použitá pro toto je /manifest/application/activity/@android:label
.
Ve většině případů se tato hodnota bude lišit od názvu třídy. Pokud chcete zadat popisek aplikace na záhlaví, použijte Label
tuto vlastnost.
Pří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" />
Spustitelné z výběru aplikace
Ve výchozím nastavení se vaše aktivita nezobrazí 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 spouštěče aplikací se má spustit, použijte MainLauncher
tuto vlastnost. Pří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, kterou poskytuje systém. Pokud chcete použít vlastní ikonu, nejprve přidejte svůj .png do zdroje nebo kreslení, nastavte jeho akci sestavení na AndroidResource a pak pomocí Icon
vlastnosti určete ikonu, která se má použít. Pří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 Androidu přidáte oprávnění (jak je popsáno v části Přidat oprávnění do manifestu Androidu), budou tato oprávnění zaznamenána ve vlastnostech/AndroidManifest.xml.
Pokud například nastavíte INTERNET
oprávnění, přidá se do vlastnosti/AndroidManifest.xml následující prvek:
<uses-permission android:name="android.permission.INTERNET" />
Ladicí buildy automaticky nastavují některá oprávnění, aby bylo ladění jednodušší (například INTERNET
a READ_EXTERNAL_STORAGE
) – tato nastavení jsou nastavená pouze ve vygenerované obj/Debug/android/AndroidManifest.xml a nezobrazují se jako povolená v nastavení Požadovaná oprávnění .
Pokud například prozkoumáte vygenerovaný soubor manifestu na adrese obj/Debug/android/AndroidManifest.xml, může se zobrazit následující přidané prvky oprávnění:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Ve verzi buildu vydané verze manifestu (na adrese obj/Debug/android/AndroidManifest.xml) nejsou tato oprávnění automaticky nakonfigurována. Pokud zjistíte, že přepnutí na build vydané verze způsobí ztrátu oprávnění dostupného v sestavení 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 sadě Visual Studio).
Rozšířené funkce
Akce a funkce záměru
Manifest Pro Android 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 vhodné pro vaši aktivitu pomocí IntentFilter
a které kategorie jsou vhodné pro Categories
Vlastnost. Musí být poskytována alespoň jedna aktivita (proto jsou aktivity poskytovány v konstruktoru). [IntentFilter]
lze zadat vícekrát a každé použití má za následek samostatný <intent-filter/>
prvek v rámci <activity/>
. Pří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>
Application Element
Manifest Pro Android také poskytuje způsob, jak deklarovat vlastnosti pro celou aplikaci. To se provádí prostřednictvím elementu <application>
a jeho protějšku, vlastního atributu Application . Všimněte si, že se jedná o nastavení pro celou aplikaci (pro celé sestavení) místo nastavení pro jednotlivé aktivity. Obvykle deklarujete <application>
vlastnosti pro celou aplikaci a pak tato nastavení (podle potřeby) přepíšete podle jednotlivých aktivit.
Například do AssemblyInfo.cs se přidá následující Application
atribut, který indikuje, že aplikaci lze ladit, že jeho uživatelsky čitelný název je Moje aplikace a že používá Theme.Light
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í nastaveny na Theme.Light
styl. Pokud nastavíte motiv aktivity na Theme.Dialog
hodnotu , bude tento styl používat Theme.Dialog
pouze tato aktivita, zatímco všechny ostatní aktivity v aplikaci se ve výchozím nastavení Theme.Light
nastaví na styl nastavený v elementu <application>
.
Tento Application
prvek není jediným způsobem konfigurace <application>
atributů. Můžete také vložit atributy přímo do <application>
elementu Properties/AndroidManifest.xml. Tato nastavení se sloučí do konečného <application>
prvku, který se nachází v obj/Debug/android/AndroidManifest.xml. Všimněte si, že obsah vlastností/AndroidManifest.xml vždy přepsat data poskytovaná vlastními atributy.
V elementu <application>
je mnoho atributů pro celou aplikaci. Další informace o těchto nastaveních najdete v části Veřejné vlastnosti atributu ApplicationAttribute.
Seznam vlastních atributů
- Android.App.ActivityAttribute: Generuje fragment XML /manifest/application/activity
- Android.App.ApplicationAttribute : Vygeneruje fragment XML /manifest/aplikace .
- Android.App.InstrumentationAttribute: Vygeneruje fragment XML /manifest/instrumentation
- Android.App.IntentFilterAttribute: Vygeneruje fragment XML //intent-filter
- Android.App.MetaDataAttribute : Vygeneruje fragment XML //meta-data .
- Android.App.PermissionAttribute : Vygeneruje fragment XML //permission .
- Android.App.PermissionGroupAttribute: Vygeneruje fragment XML //permission-group
- Android.App.PermissionTreeAttribute: Vygeneruje fragment XML //permission-tree
- Android.App.ServiceAttribute : Vygeneruje fragment XML /manifest/application/service .
- Android.App.UsesLibraryAttribute: Generuje fragment XML /manifest/application/uses-library
- Android.App.UsesPermissionAttribute: Generuje fragment XML /manifest/uses-permission
- Android.Content.BroadcastReceiverAttribute: Generuje fragment XML /manifest/application/receiver
- Android.ContentProviderAttribute: Generuje fragment XML /manifest/application/provider
- Android.Content.GrantUriPermissionAttribute : Generuje fragment XML /manifest/application/provider/grant-uri-permission XML