【Android】AndroidManfestでよく見るタグについてゆるふわまとめ（自分用メモ）

## はじめに
とっても大事なのに意外に触る機会が多いわけでもないAndroidManifestファイル。たまに触ると何が何だか分からなかったので、また触るときにテンパらないように軽くまとめてみようと思います。
初心者ゆえに実際に触ったことがないタグも多いため、そのような箇所はかなりざっくりと書いています。あらかじめご了承ください。
もし間違いなどありましたらご指摘いただけますと幸いです。

## 実行環境

|  項目      |  情報                |      
| ------ | ---------------------------- | 
| PC     | MacBook Pro (14-inch,2021) |     
| CPU    | Apple M1 Pro 10-core                |      
| GPU  | Apple M1 Pro 16-core                       |      
| OS     | macOS Monterey (12.0.1)<br>  |   
|  Android Studio| Arctic Fox 2020.3.1 Patch4 | 

## そもそもAndroidManifestとは
> マニフェスト ファイルは、アプリに関する重要な情報を Android ビルドツール、Android オペレーティング システム、Google Play に対して説明するものです。
([アプリマニフェストの概要 | AndroidDevelopers](https://developer.android.com/guide/topics/manifest/manifest-intro?hl=ja)より引用)

アプリを実行するために必要な情報をOSさんに伝えるためのファイルってことですね。
xmlファイルで書かれているのでわかりやすいかと思いきや、アプリ全体の流れを知らないと理解できない箇所も多いため、なかなかマスターするのが大変そうだというのが個人的な感想です。

## とりあえずコード

```AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.hogeapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.hogeApplication">

        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>
```

## 解説
* manifestタグ
 * applicationタグ
     * activityタグ
           * intent-filterタグ
              *  actionタグ
               * categoryタグ
   
の順番に見ていきます。

### ```<manifest>```タグ内
名前空間とパッケージを定義する必要があるタグです。
AndroidManifest内でトップのタグとなり、このタグ内に他のタグを書いていく形になります。
```<application>```タグは必須で含めなければなりません。
他に含めることのできるタグは[こちら](https://developer.android.com/guide/topics/manifest/manifest-element?hl=ja)を参照してみてください。

### ```application```タグ内
```AndroidManifest.xml
android:allowBackup="true"
```
↑デフォルトだとtrueになっていますね。
Androidでは25MBまでという制限の中で自動でGoogleDriveにバックアップを取るという機能があるようです。このタグではそのバックアップ機能を使うかどうかというもの。
場合によっては自動バックアップをオフにしたいという時もあるかと思うので、その際はこの値をfalseにします。

```AndroidManifest.xml
android:dataExtractionRules="backup_rules.xml"
```
Android12以降で、どんなデータをバックアップするかを詳細に指定します。（[詳細](https://developer.android.com/identity/data/autobackup?hl=ja)）

```AndroidManifest.xml
android:fullBackupContent="backup_rules.xml"
```
Android11以下でバックアップ対象のファイルを制御する時に使います。（[詳細](https://developer.android.com/identity/data/autobackup?hl=ja#include-exclude-android-11)）


```AndroidManifest.xml
android:icon="@mipmap/ic_launcher"
```
↑ホーム画面で表示されるアイコンを設定します。
何も考えずアプリをビルドして実行するとホーム画面にドロイド君がにゅっと顔を出しているアイコンが表示されていましたが、そのドロイド君の画像はこのタグで設定されていたんですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1274260/a309d16f-0214-9c44-193a-b9c10f0204fc.png)



```AndroidManifest.xml
android:label="@string/app_name"
```
↑ホーム画面で表示されるアプリ名を設定します。
この文字を変えるとホーム画面でアイコンの下に表示される名前が変わりました。
ただ色々調べてると<activity>タグ内で```android:label=""```を設定している人もいたので要調査かも。
私が試した時はapplicationタグとactivityタグ両方に```android:label=""```を設定するとactivityタグに設定した値がホーム画面でも表示されていたので、おいおいその辺りも調べて記事にしたいです。

```AndroidManifest.xml
android:supportsRtl="true"
```
↑RTLレイアウトをサポートするかどうかを設定します。
右から左へ文字を書く言語とかありますもんね。（アラビア語とか）
デフォルトではfalseらしいですがなぜかtrueになってました。


## ```<activity>```タグ内

```
android:name=".MainActivity"
```
↑Activityを実装するクラスを記述します。
もしActivityがAndroidManifestと違うディレクトリにある場合はパッケージ名が合うように書かないと怒られます。MainActivityがActivityクラスを継承していない場合も当然怒られます。

```
android:exported="true"
```
↑よそのアプリがこのアプリを起動できるかを設定します。
今回のように```<activity>```タグ内に```<intent-filter>```を入れ子にしている場合、この値はtrueでなければいけません。

## ```<intent-filter>```タグ
このタグを使うと暗黙的インテントを使うことができるようになります。（インテントについては[こちら](https://outofmem.hatenablog.com/entry/2014/05/23/030837)がとってもわかりやすかったです。神）
このintent-filter内ではactionタグが必須です。

### ```<action>```タグ
```
<action android:name="android.intent.action.MAIN" />
```
↑actionタグではアプリケーション起動時のアクションを設定します。
このMAINはエントリーポイントとして動作することを示します。（=最初に起動するアクティビティに設定します）
他に設定可能なアクションとしては電話をかけるCALLなどがあります。
まだまだたくさんあるので、ぜひ[こちら](https://developer.android.com/reference/android/content/Intent?hl=ja#standard-activity-actions)も参照してみてください。（英語しかなさげなのが残念）

### ```<category>```タグ

```
 <category android:name="android.intent.category.LAUNCHER" />
```
↑categoryタグはactionタグの追加情報を記述できるタグです。
このLAUNCHERはホーム画面から起動可能なことを表します。
他に指定可能なcategoryはactionと同じページの[こちら](https://developer.android.com/reference/android/content/Intent?hl=ja#standard-categories)
にまとまっています。


## 最後に
とりあえずざっくりですがAndroidManifestファイルをまとめてみました。
ここで取り上げたタグはほんの一部で、まだまだ設定可能な項目は星の数ほどあります。しかもその1つ1つが大きな意味を持っているので、調べるだけでも大変ですね...！
今回取り上げたものの中にも実際に手を動かせていない箇所がたくさんあったので、そのうち詳細版を記事にしたいなと思います。（android:labelの挙動とかインテントとかまだまだ把握できていないのでとりあえずここだけでもやりたい感）