# AndroidManifest.xml

{% hint style="info" %}
Cordova 6.2 以降では、`AndroidManifest.xml` ファイルを使用しない仕様となりました。 Cordova 6.2 以降は、[ Custom Config プラグイン ](https://ja.docs.monaca.io/reference/third_party_phonegap/custom_config)をご利用ください。
{% endhint %}

Android アプリの基本的な挙動を設定する場合、`AndroidManifest.xml` ファイルを編集します。このファイルは、Monaca プロジェクトの `android` フォルダー下に置かれています。

![](https://3046938759-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MfWrOnV1iKerkfShm9O%2F-Mgd3cIC4BsOih0Jl-BV%2F-Mgd71uhJeib5kf0UOMe%2Fimage.png?alt=media\&token=d06a8180-c4ae-47e7-85f7-1e238fbcfae8)

## AndroidManifest.xml ( 主な要素のみ記載 )

```markup
<?xml version="1.0" encoding="utf-8"?>
<manifest>

  <uses-permission />
  <uses-sdk />
  <uses-feature />
  <supports-screens />

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

</manifest>
```

## \<manifest>

`AndroidManifest.xml` でルートとなる要素です。この要素内で、`xlmns:android` 属性と `package` 属性を指定します。また、この要素下に `<application>` などの子要素を置きます。

| 属性                    | 型   | 解説                                                                                             |
| --------------------- | --- | ---------------------------------------------------------------------------------------------- |
| `xmlns:android`       | 文字列 | Android の名前空間を宣言するための属性です。この属性値には、常に、 `http://schemas.android.com/apk/res/android` を設定します。     |
| `android:versionCode` | 文字列 | 内部で使用するバージョン番号です。最新バージョンを決定するときに使用されます。比較して、数が多いほうが、より新しいバージョンとなります。このバージョン番号は、ユーザー側には表示されません。 |
| `android:versionName` | 文字列 | ユーザー側に表示するバージョン番号です。                                                                           |
| `package`             | 文字列 | Package name                                                                                   |

**例**

```markup
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="%%%VERSION_CODE%%%"
    android:versionName="%%%VERSION_NAME%%%" package="%%%PACKAGE_NAME%%%">
</manifest>
```

## \<uses-sdk>

アプリで使用する API のレベルを設定します。 `<manifest>` タグ下に、この要素を記述します。

| 属性                         | 型  | 解説                                                                     |
| -------------------------- | -- | ---------------------------------------------------------------------- |
| `android:minSdkVersion`    | 数値 | アプリの実行に必要な、最低レベルの API です。Android では、この値を確認して、端末にアプリをインストールできる否かを決定します。 |
| `android:targetSdkVersion` | 数値 | 要求する API レベルを指定します。                                                    |

**例**

```markup
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="22" />
```

## \<uses-permission>

パーミッション ( 権限 ) の設定です。アプリのインストール時に、パーミッションも有効になります。`<manifest>` 下に、この要素を記述します。

| 属性             | 型   | 解説                                                                       |
| -------------- | --- | ------------------------------------------------------------------------ |
| `android:name` | 文字列 | Android 側のリソースを使うためのパーミッションです。アプリが使用するリソース ( Camera、Network など ) を指定します。 |

**\<uses-permission>の定義方法**

`<components/loader.js>` を読み込む場合には、 `ACCESS_NETWORK_STATE` パーミッションが必要となります。 このファイルをアプリ側で必要としない場合には、 `<uses-permission>` の対象から外せます。

```markup
<uses-permission android:name="%%%PERMISSION_NAME%%%"></uses-permission>
```

| Permission　　                   | PERMISSION\_NAME                                    | 解説                               |
| ------------------------------ | --------------------------------------------------- | -------------------------------- |
| Access Coarse Location         | `android.permission.ACCESS_COARSE_LOCATION`         | 位置情報の取得を許可                       |
| Access Fine Location           | `android.permission.ACCESS_FINE_LOCATION`           | 位置情報関連のサービスの使用を許可                |
| Access Network State           | `android.permission.ACCESS_NETWORK_STATE`           | ネットワーク状態の取得を許可                   |
| Access Location Extra Commands | `android.permission.ACCESS_LOCATION_EXTRA_COMMANDS` | 位置情報プロバイダーが提供するコマンドへのアクセスを許可     |
| Bluetooth                      | `android.permission.BLUETOOTH`                      | ペアリング済みの BlueTooth 機器への接続を許可     |
| Bluetooth (Admin)              | `android.permission.BLUETOOTH_ADMIN`                | BlueTooth 機器の検知とペアリング ( 接続 ) を許可 |
| Camera                         | `android.permission.CAMERA`                         | カメラ機能の使用を許可                      |
| Flashlight                     | `android.permission.FLASHLIGHT`                     | フラッシュライトへのアクセスを許可                |
| Internet                       | `android.permission.INTERNET`                       | インターネット接続を許可                     |
| Modify Audio Setting           | `android.permission.MODIFY_AUDIO_SETTINGS`          | オーディオ設定の変更を許可                    |
| Read Phone State               | `android.permission.READ_PHONE_STATE`               | 電話関連の情報へのアクセスを許可 ( 読み取り専用 )      |
| Receive SMS                    | `android.permission.RECEIVE_SMS`                    | SMS メッセージの受信を許可                  |
| Record Audio                   | `android.permission.RECORD_AUDIO`                   | 録音を許可                            |
| Read Contacts                  | `android.permission.READ_CONTACTS`                  | 連絡先の読み込みを許可                      |
| Vibrate                        | `android.permission.VIBRATE`                        | バイブレーション機能の使用を許可                 |
| Write Contacts                 | `android.permission.WRITE_CONTACTS`                 | 連絡先へのアクセスを許可 ( 書き込み )            |
| Write External Storage         | `android.permission.WRITE_EXTERNAL_STORAGE`         | 外部ストレージへのアクセスを許可 ( 書き込み )        |

**例**

カメラのパーミッション

```markup
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
```

## \<uses-feature>

アプリ側で使用する、ハードウェアまたはソフトウェアを宣言します。たとえば、アプリ側でカメラを使用する場合、カメラが搭載されていない端末では、アプリは動作しません。`<manifest>` 下に、この要素を記述します。

| 属性                 | 型   | 解説                                                                                                                           |
| ------------------ | --- | ---------------------------------------------------------------------------------------------------------------------------- |
| `android:name`     | 文字列 | アプリ側で使用する機能の名前です。                                                                                                            |
| `android:required` | 真偽値 | 真偽値を使用して、`android:name` に指定した機能を、アプリ側で使用するか否か指定します。`true` に設定した場合、該当機能がないときには、アプリは動作しません。`false` に設定した場合には、該当機能がないときでも動作します。 |

**例**

アプリ側でカメラを使用する場合のコードを、次に記します。

```markup
<uses-feature android:name="android.hardware.camera" android:required="true" />
```

## \<application>

application タグです。 `<manifest>` タグ下に、この要素を記述します。

```markup
<application android:icon="@drawable/icon"
             android:label="%%%APPLICATION_NAME%%%"
             android:name="mobi.monaca.framework.MonacaApplication">
</application>
```

| 属性                          | 型   | 解説                                                                                            |
| --------------------------- | --- | --------------------------------------------------------------------------------------------- |
| `android:name`              | 文字列 | アプリ名です。完全修飾名 ( Fully Qualified Class Name / FQCN ) を指定します ( クラスは、Application クラスを継承していること ) 。 |
| `android:icon`              | 文字列 | アプリで使用するアイコンです。アプリの各コンポーネント用のデフォルトのアイコンにもなります。                                                |
| `android:label`             | 文字列 | アプリで使用するラベルです。                                                                                |
| `android:theme`             | 文字列 | アプリで使用するテーマです。                                                                                |
| `android:screenOrientation` | 文字列 | 画面のオリエンテーションをアプリ毎に指定します。                                                                      |

## \<intent-filter>

インテントフィルターの処理を定義します。 `<activity>` 下に、この要素を記述します。子要素 `<action>` は、必ず定義します。

```markup
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
```

## \<action>

インテントフィルターのアクションを指定します。 `<intent-filter>` 下に、この要素を記述します。

| 属性             | 型   | 解説       |
| -------------- | --- | -------- |
| `android:name` | 文字列 | アクション名です |

## \<category>

インテントフィルターのカテゴリー名です。 `<intent-filter>` 下に、この要素を記述します。

| 属性             | 型   | 解説        |
| -------------- | --- | --------- |
| `android:name` | 文字列 | カテゴリー名です。 |
