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 は、Player Settings とアプリケーションがスクリプトから呼び出す Unity APIs に基づいて、自動的に必要なパーミッションを加えます。例えば、以下のようなものが含まれます。
Network クラスにより INTERNET
パーミッションを加えます。
バイブレーションの使用 (Handheld.Vibrate など) により VIBRATE
を加えます。
InternetReachability プロパティーにより ACCESS_NETWORK_STATE
を加えます。
Location APIs (LocationService など) により ACCESS_FINE_LOCATION
を加えます。
WebCamTexture APIs により CAMERA
パーミッションを加えます。
Microphone クラスにより RECORD_AUDIO
を加えます。
パーミッションに関する詳細は Android デベロッパードキュメントのパーミッション を参照してください。
マニフェストで宣言することによってプラグインのパーミッションを得る必要がある場合は、そのパーミッションはマージした特に出来上がる Android マニフェストに自動的に加えられます。プラグインに呼び出される Unity API もすべて、パーミッションのリストに含まれます。
アプリケーションが Android 6.0 (Marshmallow) 以降をもつデバイスで実行され、さらに、Android API レベル 23 以上をターゲットにしている場合、そのアプリケーションは Android 実行時のパーミッション リクエスト を使用します。
Android の実行時のパーミッション リクエストシステムでは、アプリケーションのインストール時ではなく、実行時にパーミッションを付与するようユーザーに求めます。ユーザーは通常、アプリケーションの実行中に各パーミッションを許可、または、却下します (例えば、写真撮影前のカメラパーミッションの要求)。これにより、パーミッションなしの制限された機能でアプリケーションを実行することが可能です。
Unity は実行時のパーミッション リクエストシステムをサポートしていません。ですから、アプリケーションは、起動時に Android に言わせると「危険」なパーミッションをユーザーに求めます。詳しくは Android デベロッパードキュメントの dangerous permissions を参照してください。
危険なパーミッションの許可をユーザーに求めることが、パーミッションがない理由でプラグインがクラッシュすることを避ける唯一の方法です。ただし、 起動時に 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 など) の利用が可能です。