Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
AndroidManifest.xml to zaawansowany plik na platformie Android, który umożliwia opisanie funkcjonalności i wymagań aplikacji w systemie Android. Jednak praca z nim nie jest łatwa. Platforma Xamarin.Android pomaga zminimalizować tę trudność, umożliwiając dodawanie atrybutów niestandardowych do klas, które następnie będą używane do automatycznego generowania manifestu. Naszym celem jest to, że 99% naszych użytkowników nigdy nie powinno wymagać ręcznego modyfikowania AndroidManifest.xml.
AndroidManifest.xml jest generowany w ramach procesu kompilacji, a kod XML znaleziony w obszarze Właściwości/AndroidManifest.xml jest scalony z kodem XML generowanym na podstawie atrybutów niestandardowych. Wynikowy scalony AndroidManifest.xml znajduje się w podkatalogu obj , na przykład znajduje się w folderze obj/Debug/android/AndroidManifest.xml dla kompilacji debugowania. Proces scalania jest banalny: używa atrybutów niestandardowych w kodzie do generowania elementów XML i wstawia te elementy do AndroidManifest.xml.
Podstawy
W czasie kompilacji zestawy są skanowane pod kątem klas innych niżabstract klasy pochodzące z klasy Activity i mają [Activity] atrybut zadeklarowany na nich. Następnie użyje tych klas i atrybutów do skompilowania manifestu. Rozważmy na przykład następujący kod:
namespace Demo
{
public class MyActivity : Activity
{
}
}
Spowoduje to wygenerowanie niczego w AndroidManifest.xml. Jeśli chcesz <activity/> wygenerować element, musisz użyć polecenia [Activity] atrybut niestandardowy:
namespace Demo
{
[Activity]
public class MyActivity : Activity
{
}
}
Ten przykład powoduje dodanie następującego fragmentu xml do AndroidManifest.xml:
<activity android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity" />
Atrybut [Activity] nie ma wpływu na abstract typy; abstract typy są ignorowane.
Nazwa działania
Począwszy od platformy Xamarin.Android 5.1, nazwa typu działania jest oparta na MD5SUM nazwy kwalifikowanej przez zestaw typu eksportowanego. Dzięki temu ta sama w pełni kwalifikowana nazwa może być dostarczana z dwóch różnych zestawów i nie występuje błąd pakowania. (Przed wersją Xamarin.Android 5.1 domyślna nazwa typu działania została utworzona z małej przestrzeni nazw i nazwy klasy).
Jeśli chcesz zastąpić tę wartość domyślną i jawnie określić nazwę działania, użyj Name właściwości :
[Activity (Name="awesome.demo.activity")]
public class MyActivity : Activity
{
}
W tym przykładzie jest generowany następujący fragment xml:
<activity android:name="awesome.demo.activity" />
Uwaga
Właściwość powinna być używana Name tylko ze względów zgodności z poprzednimi wersjami, ponieważ taka zmiana nazwy może spowolnić wyszukiwanie typów w czasie wykonywania. Jeśli masz starszy kod, który oczekuje domyślnej nazwy typu działania na podstawie małej przestrzeni nazw i nazwy klasy, zobacz Android Callable Wrapper Naming , aby uzyskać wskazówki dotyczące zachowania zgodności.
Pasek tytułu działania
Domyślnie system Android udostępnia aplikacji pasek tytułu po uruchomieniu.
Wartość używana dla tego elementu to /manifest/application/activity/@android:label.
W większości przypadków ta wartość różni się od nazwy klasy. Aby określić etykietę aplikacji na pasku tytułu, użyj Label właściwości .
Na przykład:
[Activity (Label="Awesome Demo App")]
public class MyActivity : Activity
{
}
W tym przykładzie jest generowany następujący fragment xml:
<activity android:label="Awesome Demo App"
android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity" />
Uruchamianie z poziomu programu Application Selectr
Domyślnie działanie nie będzie wyświetlane na ekranie uruchamiania aplikacji systemu Android. Jest to spowodowane tym, że w aplikacji prawdopodobnie będzie wiele działań i nie potrzebujesz ikony dla każdego z nich. Aby określić, który z nich powinien być uruchamiany z poziomu uruchamiania MainLauncher aplikacji, użyj właściwości . Na przykład:
[Activity (Label="Awesome Demo App", MainLauncher=true)]
public class MyActivity : Activity
{
}
W tym przykładzie jest generowany następujący 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 działania
Domyślnie działanie będzie mieć domyślną ikonę uruchamiania udostępnioną przez system. Aby użyć ikony niestandardowej, najpierw dodaj .png do opcji Resources/drawable, ustaw jej akcję kompilacji na Wartość AndroidResource, a następnie użyj Icon właściwości , aby określić ikonę do użycia. Na przykład:
[Activity (Label="Awesome Demo App", MainLauncher=true, Icon="@drawable/myicon")]
public class MyActivity : Activity
{
}
W tym przykładzie jest generowany następujący 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>
Uprawnienia
Po dodaniu uprawnień do manifestu systemu Android (zgodnie z opisem w artykule Dodawanie uprawnień do manifestu systemu Android) te uprawnienia są rejestrowane w obszarze Właściwości/AndroidManifest.xml.
Jeśli na przykład ustawisz INTERNET uprawnienie, do właściwości/AndroidManifest.xml zostanie dodany następujący element:
<uses-permission android:name="android.permission.INTERNET" />
Kompilacje debugowania automatycznie ustawiają pewne uprawnienia, aby ułatwić debugowanie (takie jak INTERNET i READ_EXTERNAL_STORAGE) — te ustawienia są ustawiane tylko w wygenerowanym obj/Debug/android/AndroidManifest.xml i nie są wyświetlane jako włączone w ustawieniach Wymaganych uprawnień .
Jeśli na przykład zbadasz wygenerowany plik manifestu w folderze obj/Debug/android/AndroidManifest.xml, mogą zostać wyświetlone następujące dodane elementy uprawnień:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
W wersji kompilacji wydania manifestu (w obj/Debug/android/AndroidManifest.xml) te uprawnienia nie są konfigurowane automatycznie. Jeśli okaże się, że przełączenie do kompilacji wydania powoduje utratę uprawnień, które było dostępne w kompilacji debugowania, sprawdź, czy jawnie ustawiono to uprawnienie w ustawieniach Wymaganych uprawnień dla aplikacji (zobacz Kompilowanie > aplikacji systemu Android w Visual Studio dla komputerów Mac; zobacz Właściwości > Manifest systemu Android w programie Visual Studio).
funkcje zaawansowane
Akcje i funkcje intencji
Manifest systemu Android umożliwia opisanie możliwości działania. Odbywa się to za pośrednictwem intencji i [IntentFilter] atrybut niestandardowy. Możesz określić, które akcje są odpowiednie dla działania za pomocą polecenia IntentFilter konstruktor i które kategorie są odpowiednie dla Categories Właściwość. Należy podać co najmniej jedno działanie (dlatego działania są udostępniane w konstruktorze). [IntentFilter] można podać wiele razy, a każdy z nich używa wyników w osobnym <intent-filter/> elemecie w obiekcie <activity/>. Na przykład:
[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
{
}
W tym przykładzie jest generowany następujący 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 systemu Android umożliwia również deklarowanie właściwości dla całej aplikacji. Odbywa się to za pośrednictwem <application> elementu i jego odpowiednika, atrybutu niestandardowego Aplikacja . Należy pamiętać, że są to ustawienia obejmujące całą aplikację (w całym zestawie), a nie ustawienia dla poszczególnych działań. Zazwyczaj należy zadeklarować <application> właściwości dla całej aplikacji, a następnie zastąpić te ustawienia (zgodnie z potrzebami) dla poszczególnych działań.
Na przykład następujący Application atrybut jest dodawany do AssemblyInfo.cs , aby wskazać, że można debugować aplikację, że jej nazwa czytelna dla użytkownika to Moja aplikacja i że używa Theme.Light stylu jako motywu domyślnego dla wszystkich działań:
[assembly: Application (Debuggable=true,
Label="My App",
Theme="@android:style/Theme.Light")]
Ta deklaracja powoduje wygenerowanie następującego fragmentu XML w pliku obj/Debug/android/AndroidManifest.xml:
<application android:label="My App"
android:debuggable="true"
android:theme="@android:style/Theme.Light"
... />
W tym przykładzie wszystkie działania w aplikacji będą domyślnie oznaczać Theme.Light styl. Jeśli ustawisz motyw działania na Theme.Dialogwartość , tylko to działanie będzie używać Theme.Dialog stylu, podczas gdy wszystkie inne działania w aplikacji będą domyślnie ustawiane Theme.Light jako styl ustawiony w elemecie <application> .
Element Application nie jest jedynym sposobem konfigurowania <application> atrybutów. Alternatywnie można wstawić atrybuty bezpośrednio do <application> elementu Właściwości/AndroidManifest.xml. Te ustawienia są scalane z ostatnim <application> elementem, który znajduje się w pliku obj/Debug/android/AndroidManifest.xml. Należy pamiętać, że zawartość właściwości/AndroidManifest.xml zawsze przesłania dane dostarczane przez atrybuty niestandardowe.
Istnieje wiele atrybutów dla całej aplikacji, które można skonfigurować w elemecie <application> . Aby uzyskać więcej informacji na temat tych ustawień, zobacz sekcję Właściwości publiczne applicationAttribute.
Lista atrybutów niestandardowych
- Android.App.ActivityAttribute: generuje fragment XML /manifest/application/activity
- Android.App.ApplicationAttribute : generuje fragment /manifest/application XML
- Android.App.InstrumentationAttribute: generuje fragment XML /manifest/instrumentation
- Android.App.IntentFilterAttribute: generuje fragment XML //intent-filter
- Android.App.MetaDataAttribute: generuje fragment XML //meta-data
- Android.App.PermissionAttribute: generuje fragment XML //permission
- Android.App.PermissionGroupAttribute: generuje fragment XML //permission-group
- Android.App.PermissionTreeAttribute: generuje fragment XML //permission-tree
- Android.App.ServiceAttribute: generuje 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.Content.ContentProviderAttribute: generuje fragment XML /manifest/application/provider
- Android.Content.GrantUriPermissionAttribute : Generuje fragment XML /manifest/application/provider/grant-uri-permission XML