Android Studioでの「Manifest merger failed」エラーの解決方法

中級📱 Android2026-06-08| Android Studio (Arctic Fox から Hedgehog まで), Gradle 7.0以上, Windows/macOS/Linux

Error Message

Error: Manifest merger failed with multiple errors, see logs
#android-studio#gradle#manifest#build-error

問題の概要このエラーは通常、新しいライブラリを追加したり、Gradleのバージョンを上げたりした直後に発生します。「Build」をクリックした際、アプリが起動する代わりに、Build Outputウィンドウに以下のような一般的で不可解なメッセージが表示されます。

Error: Manifest merger failed with multiple errors, see logs

このエラーは、いわば車の「エンジンチェックランプ」のようなものです。問題があることは分かりますが、詳細は隠されています。簡単に言うと、メインの AndroidManifest.xml とライブラリのマニフェストの間で設定が競合している状態です。Gradleはどちらを優先すべきか判断できず、処理を中断してしまいます。

フェーズ 1:隠れたエラーログを見つける詳細が表示されるのを期待して、一般的なエラー出力を眺めて時間を無駄にしないでください。実際の競合の詳細を調査する必要があります。ここでは、それらを見つけるための最も効果的な2つの方法を紹介します。

方法 A:Merged Manifest タブ- Android Studio で AndroidManifest.xml ファイルを開きます。- エディタウィンドウの下部を確認します。「Code」と「Design」の隣にある Merged Manifest タブをクリックします。- 数秒待つと、Android Studio が競合箇所を赤くハイライトします。下部のエラーをクリックすると、どの属性が衝突しているかを正確に確認できます。### 方法 B:ターミナルを使用する方法Merged Manifest タブが空白のままだったり、読み込みに失敗したりすることがあります。そんな時はターミナルが役立ちます。Android Studio 下部のターミナルを開き、以下のコマンドを実行してください。

./gradlew assembleDebug --stacktrace

出力結果の中から Suggestion: とラベル付けされたセクションを探してください。多くの場合、競合を修正するためのコピー&ペースト可能な解決策が提示されています。

フェーズ 2:よくあるシナリオと修正方法### シナリオ 1:属性の競合これが最も一般的な原因です。2つのマニフェストが同じ属性を異なる値で定義している場合に発生します。例えば、Firebase SDK が android:allowBackup="true" を設定している一方で、自社のセキュリティポリシーで false が要求されている場合などです。

修正方法: tools:replace を使用して、アプリのマニフェストが正解(優先される情報源)であることを Gradle に伝えます。

  • まず、<manifest> タグに tools 名前空間を追加します。<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">- 次に、<application> タグに tools:replace を追加します。競合している属性をカンマ区切りでリストします。``` ...

### シナリオ 2:minSdkVersion の不一致プロジェクトが API 21 をターゲットにしているのに、API 26 を必要とするライブラリをインポートした場合、ビルドは即座に失敗します。ログには *"uses-sdk:minSdkVersion 21 cannot be smaller than version 26 declared in library..."* のようなメッセージが表示されます。
**修正方法:** ここでは2つの選択肢があります。
- **安全な方法:** `build.gradle` (Module: app) を更新して、ライブラリの `minSdkVersion` に合わせます。これにより、完全な互換性が確保されます。- **リスクのある方法:** そのライブラリが古いデバイスで使用されないことが分かっている場合は、強制的にマージさせます。```
<uses-sdk tools:overrideLibrary="com.example.conflicting.library"/>

シナリオ 3:'android:exported' の欠落 (Android 12以降)Android 12 (API 31) 以降、<intent-filter> を持つすべての Activity、Service、Receiver は、android:exported="true" または false を明示的に指定する必要があります。古いライブラリでこれが指定されていない場合、ビルドは失敗します。

修正方法: ログに "Element activity#... is missing android:exported attribute" という記述がないか確認してください。自身のマニフェストでその特定のコンポーネントを手動で宣言し、android:exported タグを追加して、ライブラリ側の不備のある定義を上書きする必要があります。

フェーズ 3:検証修正を適用した後、すぐにアプリを再実行するのではなく、まず古い生成物をクリアしてください。

  • Build > Clean Project を選択します。- Build > Rebuild Project を選択します。- 最後にもう一度 Merged Manifest タブを確認します。赤いテキストが消えているはずです。まだ解決しませんか? build/outputs/logs/ フォルダ内の manifest-merger-debug-report.txt を探してください。ここには、ビルドプロセス中にマージ機能が行ったすべての決定が 1 行ずつ記録されています。

Related Error Notes