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. これは、存在する可能性は多くのアクティビティで、アプリケーションごとのアイコンをたくないためです。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リソース/描画、そのビルド アクションに設定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、アクセス許可の要素を追加する、次を参照してください可能性があります。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 アプリケーションMac; 用の Visual Studio で、次を参照してください。プロパティ > 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