こんにちは、エンジニアのオオバです。

お悩みさん
お悩みさん
  • ビルド後のAndroidManifest.xmlがどこにあるかわからない
  • AndroidManifestを確認したい
  • ビルド方式でパスが変わる?
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    ビルド方式によって書き出し場所が異なる

    👉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  
    
    ※IL2CPPビルドの場合のパスです。Monoビルドでは IL2CPP の部分が Mono に変わります

    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をマージして最終的なマニフェストを生成します。マージの優先順位は以下の通りです。

    AndroidManifest.xmlのマージ優先順位
    優先度ソース説明
    Assets/Plugins/Android/AndroidManifest.xmlユーザー定義のカスタムマニフェスト
    各プラグインのAndroidManifest.xmlFirebase、Admob等のSDKが持つマニフェスト
    Unity自動生成Player Settingsの内容をもとに自動生成

    プラグイン同士のマニフェストが競合してビルドエラーになるケースもあります。
    エラーが出た場合は、ビルド後のマージ済みAndroidManifest.xmlを確認して、どの設定が競合しているか特定しましょう。

    ビルドエラー時の確認手順

    AndroidManifest.xml関連のビルドエラーが発生した場合の確認手順です。

    1. ビルド後のマージ済みマニフェストを開く(上記のパスを参照)
    2. エラーメッセージのタグ名で検索して競合箇所を特定
    3. Assets/Plugins/Android/AndroidManifest.xml明示的に設定を上書きする
    4. 再ビルドして解消を確認する

    よくあるビルドエラーと対処法

    AndroidManifest.xml関連で遭遇しやすいエラーをまとめます。

    Attribute application@icon value conflicts

    複数のマニフェストでandroid:iconが定義されている場合に発生します。
    カスタムマニフェストにtools:replace="android:icon"を追加して解決できます。

    <application  
        android:icon="@mipmap/ic_launcher"  
        tools:replace="android:icon">  
    
    ※`tools`名前空間の宣言が必要です。manifestタグに`xmlns:tools="http://schemas.android.com/tools"`を追加してください

    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:replacetools:node="remove"を使いこなすと、プラグイン間の競合もスムーズに解消できます。

    オススメ記事
    検証環境