Android マニフェストの使用Working with the Android Manifest

概要Overview

AndroidManifest.xmlは、Android プラットフォーム機能と android アプリケーションの要件について説明するために強力なファイルです。AndroidManifest.xml is a powerful file in the Android platform that allows you to describe the functionality and requirements of your application to Android. ただし、扱うことは簡単ではありません。However, working with it is not easy. Xamarin.Android は、マニフェストを自動的に生成するを使用してクラスをカスタム属性を追加することによってこの問題を最小限に抑えるには役立ちます。Xamarin.Android helps to minimize this difficulty by allowing you to add custom attributes to your classes, which will then be used to automatically generate the manifest for you. 目標は、ユーザーの 99% が手動で変更する必要があることはありませんAndroidManifest.xmlします。Our goal is that 99% of our users should never need to manually modify AndroidManifest.xml.

AndroidManifest.xmlは、ビルド プロセスと内にある XML の一部として生成Properties/AndroidManifest.xmlカスタム属性から生成される XML に結合されます。AndroidManifest.xml is generated as part of the build process, and the XML found within Properties/AndroidManifest.xml is merged with XML that is generated from custom attributes. マージ結果AndroidManifest.xmlに存在する、 objサブディレクトリ; に存在するなど、 obj/Debug/android/AndroidManifest.xmlデバッグ ビルドには.The resulting merged AndroidManifest.xml resides in the obj subdirectory; for example, it resides at obj/Debug/android/AndroidManifest.xml for Debug builds. マージ プロセスは簡単です: コード内のカスタム属性を使用して、XML 要素の生成と挿入それらの要素にAndroidManifest.xmlします。The merging process is trivial: it uses custom attributes within the code to generate XML elements, and inserts those elements into AndroidManifest.xml.

基本事項The Basics

ため、コンパイル時にアセンブリがスキャンされる以外abstractから派生するクラスアクティビティいて、 [Activity] 属性で宣言されています。At compile time, assemblies are scanned for non-abstract classes that derive from Activity and have the [Activity] attribute declared on them. 使用して、これらのクラスと属性、マニフェストをビルドします。It then uses these classes and attributes to build the manifest. 次に例を示します。For example, consider the following code:

namespace Demo
{
    public class MyActivity : Activity
    {
    }
}

これは、結果内で生成される何も、 AndroidManifest.xmlします。This results in nothing being generated in AndroidManifest.xml. 場合は、 <activity/> 、生成される要素を使用する必要がある、 [Activity] カスタム属性。If you want an <activity/> element to be generated, you need to use the [Activity] custom attribute:

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

この例では、次の xml フラグメントに追加するAndroidManifest.xml:This example causes the following xml fragment to be added to AndroidManifest.xml:

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

[Activity]属性も何も起こりませんabstract型です。abstract種類は無視されます。The [Activity] attribute has no effect on abstract types; abstract types are ignored.

活動名Activity Name

Xamarin.Android 5.1 以降では、アクティビティの型名がエクスポートされる型のアセンブリ修飾名の md5 チェックサムに基づいています。Beginning with Xamarin.Android 5.1, the type name of an activity is based on the MD5SUM of the assembly-qualified name of the type being exported. これにより、2 つの異なるアセンブリから指定して、パッケージのエラーを取得できませんに同じ完全修飾名です。This allows the same fully-qualified name to be provided from two different assemblies and not get a packaging error. (Xamarin.Android 5.1 では、前に、アクティビティの既定の型名が作成、小文字の名前空間とクラス名から)。(Before Xamarin.Android 5.1, the default type name of the activity was created from the lowercased namespace and the class name.)

この既定をオーバーライドし、使用して、アクティビティの名前を明示的に指定する場合、 Name プロパティ。If you wish to override this default and explicitly specify the name of your activity, use the Name property:

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

この例では、次の xml フラグメントが生成されます。This example produces the following xml fragment:

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

: 使用する必要があります、Nameプロパティは下位互換性の理由から、その名前を変更するには実行時に型の照合の速度が低下します。Note: you should use the Name property only for backward-compatibility reasons, as such renaming can slow down type lookup at runtime. 小文字の名前空間に基づくアクティビティの既定の型名とクラス名では、参照が必要とするレガシ コードがあればAndroid 呼び出し可能ラッパー名前付け互換性の維持に関するヒント。If you have legacy code that expects the default type name of the activity to be based on the lowercased namespace and the class name, see Android Callable Wrapper Naming for tips on maintaining compatibility.

アクティビティのタイトル バーActivity Title Bar

既定では、Android ことで、アプリケーションのタイトル バーを実行した場合。By default, Android gives your application a title bar when it is run. このために使用する値は /manifest/application/activity/@android:labelします。The value used for this is /manifest/application/activity/@android:label. ほとんどの場合、この値は、クラス名と異なります。In most cases, this value will differ from your class name. タイトル バーに、アプリのラベルを指定するには、使用、 Label プロパティ。To specify your app's label on the title bar, use the Label property. 例えば:For example:

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

この例では、次の xml フラグメントが生成されます。This example produces the following xml fragment:

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

アプリケーションの選択 ダイアログ ボックスから起動可能Launchable from Application Chooser

既定では、アクティビティは表示されませんで Android のアプリケーションの起動画面。By default, your activity will not show up in Android's application launcher screen. これは、存在する可能性は多くのアクティビティで、アプリケーションでは、1 つにつき、アイコンが必要ないためです。This is because there will likely be many activities in your application, and you don't want an icon for every one. アプリケーション起動プログラムから起動可能なものがありますを指定するには、使用、 MainLauncher プロパティ。To specify which one should be launchable from the application launcher, use the MainLauncher property. 例えば:For example:

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

この例では、次の xml フラグメントが生成されます。This example produces the following xml fragment:

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

アクティビティのアイコンActivity Icon

既定では、システムによって提供される既定のランチャー アイコン、アクティビティが指定されます。By default, your activity will be given the default launcher icon provided by the system. カスタム アイコンを使用するには、まず追加、 .pngリソース/drawable、ビルド アクションを設定AndroidResourceを使用して、 Icon プロパティを使用するアイコンを指定します。To use a custom icon, first add your .png to Resources/drawable, set its Build Action to AndroidResource, then use the Icon property to specify the icon to use. 例えば:For example:

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

この例では、次の xml フラグメントが生成されます。This example produces the following xml fragment:

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

アクセス許可Permissions

Android マニフェストにアクセス許可を追加すると (」の説明に従ってAndroid マニフェストへのアクセス許可を追加)、これらのアクセス許可に記録されるProperties/AndroidManifest.xmlします。When you add permissions to the Android Manifest (as described in Add Permissions to Android Manifest), these permissions are recorded in Properties/AndroidManifest.xml. たとえば、設定した場合、 INTERNET 、アクセス許可に次の要素が追加Properties/AndroidManifest.xml:For example, if you set the INTERNET permission, the following element is added to Properties/AndroidManifest.xml:

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

デバッグ ビルドが容易にデバッグする一部のアクセス許可を自動的に設定 (などINTERNETREAD_EXTERNAL_STORAGE)–これらの設定を設定のみに生成されたobj/Debug/android/AndroidManifest.xmlはできません有効になっていると表示される、アクセス許可が必要な設定します。Debug builds automatically set some permissions to make debug easier (such as INTERNET and READ_EXTERNAL_STORAGE) – these settings are set only in the generated obj/Debug/android/AndroidManifest.xml and are not shown as enabled in the Required permissions settings.

生成されたマニフェスト ファイルを確認する場合など、 obj/Debug/android/AndroidManifest.xml次の追加の permission 要素を参照してください可能性があります。For example, if you examine the generated manifest file at obj/Debug/android/AndroidManifest.xml, you may see the following added permission elements:

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

リリースでのビルド マニフェストのバージョン (でobj/Debug/android/AndroidManifest.xml)、これらの権限はいない自動的に構成されています。In the Release build version of the manifest (at obj/Debug/android/AndroidManifest.xml), these permissions are not automatically configured. リリース ビルドに切り替えると、アプリをデバッグ ビルドで使用可能なアクセス許可を失ったで発生する場合このアクセス許可を明示的に設定することを確認、アクセス許可が必要な(参照アプリの設定ビルド > Android アプリケーションVisual studio for Mac は、次を参照してください。プロパティ > Android マニフェストVisual Studio で)。If you find that switching to a Release build causes your app to lose a permission that was available in the Debug build, verify that you have explicitly set this permission in the Required permissions settings for your app (see Build > Android Application in Visual Studio for Mac; see Properties > Android Manifest in Visual Studio).

高度な機能Advanced Features

インテント アクションと機能Intent Actions and Features

Android マニフェストでは、アクティビティの機能を記述するための手段を提供します。The Android manifest provides a way for you to describe the capabilities of your activity. 使用してこれにはインテント [IntentFilter] カスタム属性。This is done via Intents and the [IntentFilter] custom attribute. アクティビティの適切なアクションを指定することができます、 IntentFilter コンス トラクター、および対象のカテゴリは適切な Categories プロパティ。You can specify which actions are appropriate for your activity with the IntentFilter constructor, and which categories are appropriate with the Categories property. 少なくとも 1 つのアクティビティには、(これは、コンス トラクターでアクティビティが提供されているためにです) を提供する必要があります。At least one activity must be provided (which is why activities are provided in the constructor). [IntentFilter] 複数回、および使用するたびの個別の結果に用意できる<intent-filter/>内の要素、<activity/>します。[IntentFilter] can be provided multiple times, and each use results in a separate <intent-filter/> element within the <activity/>. 例えば:For example:

[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
{
}

この例では、次の xml フラグメントが生成されます。This example produces the following xml fragment:

<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 要素Application Element

Android マニフェストでは、アプリケーション全体のプロパティを宣言することもできます。The Android manifest also provides a way for you to declare properties for your entire application. 使用してこれには、<application>要素と、対応する、アプリケーションカスタム属性。This is done via the <application> element and its counterpart, the Application custom attribute. アクティビティごとの設定ではなく、アプリケーション全体 (アセンブリ全体) の設定できることに注意してください。Note that these are application-wide (assembly-wide) settings rather than per-Activity settings. 通常を宣言する<application>全体のアプリケーションのプロパティをオーバーライドしてこれらの設定 (必要に応じて)、アクティビティごとに、します。Typically, you declare <application> properties for your entire application and then override these settings (as needed) on a per-Activity basis.

たとえば、次Application属性が追加されますAssemblyInfo.csをアプリケーションをデバッグできること、そのユーザーが判読できる名前が示すMy App、し、を使用してTheme.Lightとしてすべてのアクティビティの既定のテーマのスタイル。For example, the following Application attribute is added to AssemblyInfo.cs to indicate that the application can be debugged, that its user-readable name is My App, and that it uses the Theme.Light style as the default theme for all activities:

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

この宣言により、次の XML フラグメントを生成するobj/Debug/android/AndroidManifest.xml:This declaration causes the following XML fragment to be generated in obj/Debug/android/AndroidManifest.xml:

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

この例で、アプリのすべての活動は既定になります、Theme.Lightスタイル。In this example, all activities in the app will default to the Theme.Light style. アクティビティのテーマを設定した場合Theme.Dialog、アクティビティを使用するだけ、Theme.Dialogスタイルの既定値は、アプリの他のすべてのアクティビティ中に、Theme.Lightスタイルで設定されている、<application>要素。If you set an Activity's theme to Theme.Dialog, only that Activity will use the Theme.Dialog style while all other activities in your app will default to the Theme.Light style as set in the <application> element.

Application要素は、構成する唯一の方法ではありません<application>属性。The Application element is not the only way to configure <application> attributes. 直接属性を挿入する代わりに、<application>要素のProperties/AndroidManifest.xmlします。Alternately, you can insert attributes directly into the <application> element of Properties/AndroidManifest.xml. これらの設定が最後にマージされる<application>要素内にあるobj/Debug/android/AndroidManifest.xmlします。These settings are merged into the final <application> element that resides in obj/Debug/android/AndroidManifest.xml. 注意の内容Properties/AndroidManifest.xmlカスタム属性によって提供されるデータを常にオーバーライドします。Note that the contents of Properties/AndroidManifest.xml always override data provided by custom attributes.

構成できる多くのアプリケーション全体の属性がある、<application>要素ですこれらの設定の詳細については、次を参照してください。、パブリック プロパティApplicationAttribute.There are many application-wide attributes that you can configure in the <application> element; for more information about these settings, see the Public Properties section of ApplicationAttribute.

カスタム属性の一覧List of Custom Attributes