Version: 2020.2
言語: 日本語
Android の Gradle
権限のリクエスト

Android マニフェスト

AndroidManifest は XML ファイルで、Android アプリケーションに関する重要なメタデータが含まれています。これには、パッケージ名、アクティビティ名、主要アクティビティ (アプリケーションの開始個所)、Android バージョンサポート、ハードウェア機能サポート、権限、その他の設定などが含まれます。

複Android マニフェストに関する詳細は、Android Manifests に関する Android デベロッパードキュメントを参照してください。

Unity で Android マニフェストを作成する方法

Unity 2019.3 以降のバージョンでは、Unity が生成する Android Gradle プロジェクトに 2 つのテンプレートマニフェストファイルがあります。

  1. LauncherManifest.xml - エクスポートされたプロジェクトの root/launcher/src/main/AndroidManifest.xml にあります。このファイルには、アプリケーションに関する以下のものが含まれます。
    • アイコン
    • 名前
    • 開始アクティビティとそのインテント
    • インストール場所
    • サポートされる画面サイズ
    • isGame 設定
  2. LibraryManifest.xml - エクスポートされたプロジェクトの root/unityLibrary/src/main/AndroidManifest.xml にあります。このマニフェストを_Plugins/Android_ フォルダーに加えたカスタム製の _ AndroidManifest.xml_ でオーバーライドできます。このファイルは以下を宣言します。
    • Unity のアクティビティ
    • 権限
    • Unity アクティビティが使用するテーマ
    • VR モード
    • VR パフォーマンス
    • アクティビティをサイズ変更不可にする (VR 用)
    • 最大アスペクト比の設定
    • 設定変更への対応
    • 向き
    • 起動モード
    • Android UI ハードウェアアクセラレーション
    • 使用されている機能 (ゲームパッドやグラフィックス APIなど)
    • ノッチサポート

Unity がアプリケーションをビルドすると、以下の手順に従って Android マニフェストファイルが自動的に生成されます。

  1. Unity はメインのマニフェストとして LibraryManifest.xml または AndroidManifest.xml を使用します。
  2. 次に、プラグインの Android マニフェスト (.aar ファイルと Android ライブラリ) をすべて見つけます。
  3. Google の manifmerger クラスを使用して、プラグインマニフェストをメインマニフェストにマージします。
  4. Unity はランチャーとライブラリモジュールのマニフェストファイルを変更します。権限、設定オプション、使用する機能、その他の情報を自動的に追加します。

Android マニフェストのオーバーライド

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 に基づいて、必要な権限をマニフェストに自動的に追加します。以下はその例です。

許可の詳細については、Android 開発者 向け ドキュメントの Android マニフェストパーミッション を参照してください。

プラグインのマニフェストで宣言して権限が必要な場合は、マージの段階で、結果の Android マニフェストに権限が自動的に追加されます。プラグインが呼び出すすべての Unity API も権限リストに含まれます。

Android 6.0 (Marshmallow) の ランタイムパーミッション

アプリケーションが 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 デベロッパードキュメントの アプリの権限をリクエストする を参照してください。

作成した Android マニフェストの検査

アプリケーションのために Unity が生成した最終的な Android マニフェストを検査するには、プロジェクトをビルドした後で、しかも、Unity エディターを終了する前に Temp/StagingArea/AndroidManifest.xml ファイルを開きます。

マニフェストは出力パッケージ (APK) にバイナリ形式で格納されています。APK 内のマニフェストのコンテンツを検査するには、Android Studio APK Analyzer やその他のサードパーティー製のツール (Apktool など) の利用が可能です。


  • Android 用に Unity をライブラリとして使用は2019.3 で追加NewIn20193
  • Android ランタイムパーミッションのサポートを 2018.3 で追加
  • バージョン 5.5 の更新機能
Android の Gradle
権限のリクエスト