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