こんにちは、エンジニアのオオバです。
ビルド方式によって書き出し場所が異なる
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
AndroidManifest.xmlの書き出し場所
Android開発では、AndroidManifest.xmlの中身を確認・修正したい場面がよくあります。
Unityでビルドした際に最終的に生成されるAndroidManifest.xmlのパスはビルド方式によって異なります。
Export Projectを使わない場合(デフォルト)
Unityから直接ビルドする場合、以下のパスに書き出されます。
Unityプロジェクトルート/Library/Bee/Android/Prj/IL2CPP/Gradle/
unityLibrary/build/intermediates/merged_manifests/debug/
AndroidManifest.xml
Export Projectを使う場合
Build SettingsでExport Projectにチェックを入れた場合は、指定した出力先フォルダ内に書き出されます。
出力先フォルダ/unityLibrary/src/main/AndroidManifest.xml
カスタムAndroidManifestを使う方法
自前のAndroidManifest.xmlを使いたい場合は、以下のパスに配置します。
Assets/Plugins/Android/AndroidManifest.xml
ここに配置したAndroidManifest.xmlがビルド時にマージされ、最終的なマニフェストに反映されます。
AndroidManifest.xmlを編集する主なユースケース
どんなときにAndroidManifest.xmlを直接編集するのか、よくあるケースをまとめます。
パーミッションの追加
Unity標準では追加されないパーミッションが必要な場合に追記します。
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
インテントフィルターの設定
ディープリンクやカスタムURLスキームを実装する際に設定が必要です。
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="myapp" android:host="open" />
</intent-filter>
画面の向きやテーマの制御
UnityのPlayer Settingsで設定できる内容もありますが、より細かい制御が必要な場合は直接編集します。
マージの優先順位に注意
Unityは複数のAndroidManifest.xmlをマージして最終的なマニフェストを生成します。マージの優先順位は以下の通りです。
| 優先度 | ソース | 説明 |
|---|---|---|
| 高 | Assets/Plugins/Android/AndroidManifest.xml | ユーザー定義のカスタムマニフェスト |
| 中 | 各プラグインのAndroidManifest.xml | Firebase、Admob等のSDKが持つマニフェスト |
| 低 | Unity自動生成 | Player Settingsの内容をもとに自動生成 |
プラグイン同士のマニフェストが競合してビルドエラーになるケースもあります。
エラーが出た場合は、ビルド後のマージ済みAndroidManifest.xmlを確認して、どの設定が競合しているか特定しましょう。
ビルドエラー時の確認手順
AndroidManifest.xml関連のビルドエラーが発生した場合の確認手順です。
- ビルド後のマージ済みマニフェストを開く(上記のパスを参照)
- エラーメッセージのタグ名で検索して競合箇所を特定
Assets/Plugins/Android/AndroidManifest.xmlで明示的に設定を上書きする- 再ビルドして解消を確認する
よくあるビルドエラーと対処法
AndroidManifest.xml関連で遭遇しやすいエラーをまとめます。
Attribute application@icon value conflicts
複数のマニフェストでandroid:iconが定義されている場合に発生します。
カスタムマニフェストにtools:replace="android:icon"を追加して解決できます。
<application
android:icon="@mipmap/ic_launcher"
tools:replace="android:icon">
Multiple entries with same key
同じパーミッションやメタデータが複数箇所で宣言されている場合のエラーです。
どのプラグインが重複宣言しているかを特定し、不要な方をtools:node="remove"で削除します。
<uses-permission android:name="android.permission.INTERNET"
tools:node="remove" />
minSdkVersionの不一致
プラグインが要求する最低SDKバージョンがプロジェクトの設定より高い場合に発生します。
Player Settings > Other Settings > Minimum API Levelを引き上げるか、プラグインのバージョンを確認しましょう。
Gradleテンプレートを使う方法
Unity 2019.3以降では、Project Settings > Player > Publishing SettingsにあるCustom Main Gradle Templateにチェックを入れると、Assets/Plugins/Android/mainTemplate.gradleが生成されます。
このテンプレートを編集することで、ビルド設定をより細かくカスタマイズ可能です。
AndroidManifest.xmlの修正だけでは対応できないケース(依存ライブラリのバージョン指定、ProGuardの設定など)で活用します。
Gradleテンプレートも同様にマージされるため、プラグインとの競合には注意が必要です。
まとめ
UnityでAndroidビルド後のAndroidManifest.xmlの書き出し場所はビルド方式によって異なります。
カスタムマニフェストはAssets/Plugins/Android/に配置すれば自動でマージされます。
ビルドエラー時はマージ済みマニフェストを確認して、競合箇所を特定するのが解決の近道です。
tools:replaceやtools:node="remove"を使いこなすと、プラグイン間の競合もスムーズに解消できます。

筆者のXをフォローしよう
- Unity6000.1.17f1









