AndroidManifest は XML ファイルで、Android アプリケーションに関する重要なメタデータが含まれています。これには、パッケージ名、アクティビティ名、主要アクティビティ (アプリケーションの開始個所)、Android バージョンサポート、ハードウェア機能サポート、権限、その他の設定などが含まれます。
複Android マニフェストに関する詳細は、Android Manifests に関する Android デベロッパードキュメントを参照してください。
Unity 2019.3 以降のバージョンでは、Unity が生成する Android Gradle プロジェクトに 2 つのテンプレートマニフェストファイルがあります。
isGame
設定Unity がアプリケーションをビルドすると、以下の手順に従って Android マニフェストファイルが自動的に生成されます。
manifmerger
クラスを使用して、プラグインマニフェストをメインマニフェストにマージします。Unity はアプリケーションに対して正しいマニフェストを生成しますが、そのコンテンツを直接管理したい場合もあるでしょう。
Unity 以外で作成した Android マニフェストを使用するには、以下の場所にその Android マニフェストファイルを置いてください。 Assets/Plugins/Android/AndroidManifest.xml 。こうすることによって、デフォルトの LibraryManifest.xml をオーバーライドすることができます。
この場合、Unity は Android ライブラリのマニフェストをメインマニフェストにマージし、結果のマニフェストの設定が正しいことを確認します。権限を含め、マニフェストを完全に管理するには、プロジェクトをエクスポート し、最終的なマニフェストを Android Studio で変更する必要があります。
注意:Unity は [launchMode - singleTask](https://developer.android.com/guide/topics/manifest/activity-element.html#lmode)
起動モードのみをサポートします。
Unity は、Android Player 設定 とアプリケーションがスクリプトから呼び出す Unity API に基づいて、必要な権限をマニフェストに自動的に追加します。以下はその例です。
Network
クラスは INTERNET
権限を加えます。Handheld.Vibrate
など) は VIBRATE を加えます。InternetReachability
プロパティーは ACCESS_NETWORK_STATE を加えます。LocationService
など) は ACCESS_FINE_LOCATION を加えます。WebCamTexture
API は CAMERA 権限を加えます。Microphone
クラスは RECORD_AUDIO を加えます。NetworkDiscovery
と NetworkTransport.SetMulticastLock
は CHANGE_WIFI_MULTICAST_STATE を加えます。許可の詳細については、Android 開発者 向け ドキュメントの Android マニフェストパーミッション を参照してください。
プラグインのマニフェストで宣言して権限が必要な場合は、マージの段階で、結果の Android マニフェストに権限が自動的に追加されます。プラグインが呼び出すすべての Unity API も権限リストに含まれます。
アプリケーションが Android 6.0 (Marshmallow) 以降をもつデバイスで実行され、さらに、Android API レベル 23 以上をターゲットにしている場合、そのアプリケーションは Android の ランタイムパーミッションシステム を使用します。
Android ランタイムパーミッションシステムは、アプリケーションが最初にインストールされたときではなく、アプリケーションが実行されている間にアプリケーションのユーザーに権限を要求します。ユーザーは、通常、アプリケーションが実行されている時にアプリケーションの必要に応じて各権限を許可または拒否することができます (例えば、写真を撮る前のカメラの権限の要求など)。これにより、権限がない場合のアプリケーションの機能を制限します。Android.Permission
クラスを使用すると、特定の権限が許可されているか否かを確認できます。アプリケーションが必要としている権限が拒否されている場合は、その理由をアプリケーションユーザーに知らせ、権限の承認を依頼することができます。権限のリクエスト を参照してください。
通常、アプリケーションは Android の起動時にいわゆる “危険な” 権限の呼び出しを許可するようにユーザーに求めます。詳細については、Android デベロッパードキュメントで 危険なアクセス許可 について参照してください。ただし、起動時にアプリケーションがアクセス権を要求しないようにするには、マニフェストの Application またはActivity セクションのいずれかに以下のコードを加えます。
<meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="true" />
ノート: このコードは、起動時にアプリケーションが表示する権限ダイアログを抑制しますが、クラッシュを避けるためにランタイム権限を慎重に処理する必要があります。これは、ランタイム権限を処理する高度な方法です。
ランタイムパーミッションシステムと権限の処理に関する詳細は、 Android デベロッパードキュメントの アプリの権限をリクエストする を参照してください。
アプリケーションのために Unity が生成した最終的な Android マニフェストを検査するには、プロジェクトをビルドした後で、しかも、Unity エディターを終了する前に Temp/StagingArea/AndroidManifest.xml ファイルを開きます。
マニフェストは出力パッケージ (APK) にバイナリ形式で格納されています。APK 内のマニフェストのコンテンツを検査するには、Android Studio APK Analyzer やその他のサードパーティー製のツール (Apktool など) の利用が可能です。