AndroidManifest.xml の備忘録

# はじめに
<!--
	AndroidManifest.xml はAndroidアプリにおいて必須のファイルです。
	マニフェストはアプリケーションに関する必要不可欠な情報が記載されています。
	またマニフェストに記載された情報は、アプリケーションのコードが実行される前にAndroidシステムに伝える必要があります。

	Eclipse や Android Stdudio などの IDE では新規プロジェクトの生成と同時に自動的に生成されるのであまり意識していませんでした。
	また Eclipseに至っては各要素の追加や削除などをGUIから簡単に行う事が出来ました。
	しかし Android Studio にはマニフェストの要素をGUIで追加や削除する機能がありません(v1.5の時点で)

	なのでマニフェストを更新するにはXMLファイルを直接弄る必要があります。
	更に詳しい内容は[Android Developers 公式サイト][1]や[他のサイト][2]を参考にしてください。
	ここには初歩的な内容を自分用の備忘録として残します。
-->
AndroidManifest.xml は、アプリ作成において必須のファイルです。
AndroidManifest.xml には、ファイルにはアプリケーションに関する情報が記載されています。
マニフェストに記載された情報は、Androidシステムに提供されます。

ここには初歩的な内容を自分用の備忘録として残します。

# AndroidManifest.xmlの要素
マニフェストで使用している要素の一例です。[^1]
軽く眺める程度で覚えなくていいです。

```xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="string">

    <permission />
    <permission-tree />
    <permission-group />

    <instrumentation />

    <uses-permission />
    <uses-sdk />
    <uses-configuration /> 
	<uses-feature />

	<supports-screens />

	<application>

        <activity>
            <intent-filter>
                <action />
                <category />
                <data />
            </intent-filter>

            <meta-data />
        </activity>

        <activity-alias>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </activity-alias>

        <service>
            <intent-filter> . . . </intent-filter>
            <meta-data/>
        </service>

        <receiver>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </receiver>

        <provider>
            <grant-uri-permission />
            <path-permission />
            <meta-data />
        </provider>

        <uses-library />

    </application>

</manifest>
```

# AndroidManifest.xml の約束
<!--
	AndroidManifest を記載する上で重要な事は以下の点です。

	+ マニフェストは規定された要素のみで独自の要素や属性を追加することはできません
	+ マニフェストには `<manifest>` と `<application>` の要素は必須
	+ <manifest> と <application> の要素の記載は__AndroidManifest内で1回のみ__(それ以外の要素はアプリの構成によってあったり無かったり複数あったり…)
	+ `<application>` 要素は `<manifest>` 要素内に含む
-->
AndroidManifest.xml を記載する上で重要な事は以下の4点です。

* マニフェストは規定された要素のみで独自の要素や属性を追加することはできません
* マニフェストには `<manifest>` と `<application>` の要素は必須です
*  `<manifest>` と`<application>` の要素の記載はAndroidManifest内で1回のみ[^2]
* `<application>` 要素は `<manifest>` 要素内に含むこと

つまりAndroidManifest.xmlの最小構成はこの様になります。

```xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="string">

	<application>

	</application>

</manifest>
```

# manifest 要素について
AndroidManifest.xml ファイルのルート要素です。
ここにはひとつの <application> 要素を含め、xlmns:android と package 属性を特定する必要があります。

## xmlns:android
<!--
	Android ネームスペースを定義します。
	この属性は常に xmlns:android="http://schemas.android.com/apk/res/android"  と設定されている必要があります。

	xmlns とは、名前空間（NameSpace)の宣言のことです。
	宣言内容は「このXML文書で使う用語はAndroidの定義に従います」という意味です。
	たとえば違うAPIでLinearLayoutという用語を使うかもしれません。
	そんなときに混同しないよう、Androidの用語であるという宣言が必要なのです。
	要約すると、xmlns:android="http://schemas.android.com/apk/res/android" とは「これはAndroid用のxmlファイルです。」と宣言しています。
-->
xmlns:android は Androidネームスペースを定義します。
この属性は常に xmlns:android="http://schemas.android.com/apk/res/android"  と設定されている必要があります。
要約すると「このファイルはAndroid用のxmlファイルです」と宣言しているのです。

## package
Androidアプリを識別するために必要な情報。
Java言語のパッケージと同じ様にメインファイルまでのパスを指定します。

以下のファイル構成の場合は `package="com.example"` となります。

```
main
├ AndroidManifest.xml
└ java
    └ example
        └ com
            ├ Main.java
            └ Sub.java 
```




# application 要素について
AndroidManifest.xml ファイルで定義するアプリの構成要素です。
アプリの設定に関するサブ要素を含んでいて、アプリに関する様々な指定が行えます(ラベル、アクティビティ、サービスなど)


# 最後に
本当に初歩の各要素(＋属性)について細かく書いていったら時間がいくらあっても足りないし、更新されて仕様が変わったら無駄なので必要な箇所だけを記載しておきます。




[^1]: 以前は全要素と書いていましたが、今調べたところ`supports-gl-texture`などの新しい要素が加わっていたので全要素の文字を削除しました
[^2]: それ以外の要素はアプリの構成によってあったり無かったり複数あったり…

<!-- Android Developers -->
[1]: http://developer.android.com/guide/topics/manifest/manifest-element.html

<!-- ソフトウェア技術ドキュメントを勝手に翻訳 -->
[2]: http://www.techdoctranslator.com/android/guide/manifest
<!-- xmlns:android="http://schemas.android.com/apk/res/android" についての説明 -->
[3]: http://androidhacker.blog94.fc2.com/blog-entry-33.html