Gradle のトラブルシューティング
Facebook

Android マニフェスト

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

AndroidManifest ファイルに関する詳細は Android デベロッパードキュメントの アプリマニフェスト を参照してください。

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

アプリケーションをビルドするときに、Unity は以下の手順で自動的に Android のマニフェストを生成します。

  1. Unity は主要な Android マニフェストを取り出します。

  2. プラグインからすべての Android マニフェスト (AAR と Android ライブラリ) を見つけます。

  3. プラグインからのマニフェストを、Google の manifmerger クラスを使って、主要マニフェストに合併します。

  4. そのマニフェストを修正して、自動的にパーミッション、設定オプション、使用機能、その他の情報をマニフェストに加えます。

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

Unity は適切なマニフェストを生成しますが、そのコンテンツを直接制御したい場合もあるでしょう。

Unity 以外で作成した Android マニフェストを使用するには、以下の場所にその Android マニフェストファイルを置いてください。 Assets/Plugins/Android/AndroidManifest.xml 。こうすることによって、デフォルトの Unity が作成したマニフェストをオーバーライドすることができます。

このような場合、Android ライブラリのマニフェストは後でメインのマニフェストにマージされます。その結果として生じたマニフェストはさらに、設定が正しいことを確認するため Unity によって調整されます。権限を含め、マニフェストを完全に制御するには、プロジェクトをエクスポートし、Android Studio で最終的なマニフェストを修正する必要があります。Unity は launchMode - singleTask のみをサポートしていることに注意してください。

パーミッション

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 6.0 (Marshmallow) 以降をもつデバイスで実行され、さらに、Android API レベル 23 以上をターゲットにしている場合、そのアプリケーションは Android 実行時のパーミッション リクエスト を使用します。

Android の実行時のパーミッション リクエストシステムでは、アプリケーションのインストール時ではなく、実行時にパーミッションを付与するようユーザーに求めます。ユーザーは通常、アプリケーションの実行中に各パーミッションを許可、または、却下します (例えば、写真撮影前のカメラパーミッションの要求)。これにより、パーミッションなしの制限された機能でアプリケーションを実行することが可能です。

Unity は実行時のパーミッション リクエストシステムをサポートしていません。ですから、アプリケーションは、起動時に Android に言わせると「危険」なパーミッションをユーザーに求めます。詳しくは Android デベロッパードキュメントの dangerous permissions を参照してください。

危険なパーミッションの許可をユーザーに求めることが、パーミッションがない理由でプラグインがクラッシュすることを避ける唯一の方法です。ただし、 起動時に Unity の Android アプリケーションがパーミッションを求めることを止めるには、マニフェストの ApplicationActivity 部分に以下を加えます。

<meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="true" />

これを加えると、起動時に表示されるパーミッションダイアログを完全に抑えることができます。しかし、クラッシュを避けるために、注意深くランタイムのパーミッションを処理する必要があります。この方法は上級レベルの Android 開発者にのみ推奨されます。

ランタイムのパーミッションシステムとパーミッションの処理に関する詳細は、Android デベロッパードキュメントの 実行時のパーミッション リクエスト を参照してください。

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

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

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


  • 2017–05–25 編集レビュー を行ってパブリッシュされたページ

  • バージョン 5.5 の更新機能

Gradle のトラブルシューティング
Facebook