Khắc phục lỗi 'Manifest merger failed' trong Android Studio

trung bình📱 Android2026-06-08| Android Studio (Arctic Fox đến Hedgehog), Gradle 7.0+, Windows/macOS/Linux

Error Message

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

Vấn đềLỗi này thường xảy ra ngay sau khi bạn thêm một thư viện mới hoặc nâng cấp phiên bản Gradle. Bạn nhấn 'Build' và thay vì ứng dụng chạy, bạn nhận được một thông báo chung chung, gây khó chịu trong cửa sổ Build Output:

Error: Manifest merger failed with multiple errors, see logs

Lỗi này về cơ bản giống như một chiếc 'đèn báo lỗi động cơ'. Nó cho bạn biết có vấn đề nhưng lại ẩn đi chi tiết. Nói ngắn gọn, tệp AndroidManifest.xml chính của bạn và manifest của một thư viện đang có các chỉ dẫn xung đột nhau. Gradle không biết nên chọn cái nào, nên nó dừng lại.

Giai đoạn 1: Tìm nhật ký lỗi bị ẩnĐừng lãng phí thời gian nhìn chằm chằm vào thông báo lỗi chung chung với hy vọng nó sẽ hiển thị thêm thông tin. Bạn cần đào sâu vào chi tiết xung đột thực tế. Dưới đây là hai cách hiệu quả nhất để tìm chúng.

Cách A: Tab Merged Manifest- Mở tệp AndroidManifest.xml của bạn trong Android Studio.- Nhìn vào phía dưới cửa sổ trình soạn thảo. Nhấp vào tab Merged Manifest bên cạnh 'Code' và 'Design'.- Đợi vài giây. Android Studio sẽ đánh dấu các xung đột bằng màu đỏ. Nhấp vào các lỗi ở phía dưới để xem chính xác thuộc tính nào đang xung đột.### Cách B: Sử dụng TerminalĐôi khi tab Merged Manifest bị trống hoặc không tải được. Khi đó, terminal là người bạn tốt nhất của bạn. Mở terminal ở phía dưới Android Studio và chạy:

./gradlew assembleDebug --stacktrace

Quét qua kết quả đầu ra để tìm phần có nhãn Suggestion:. Phần này thường cung cấp cho bạn một giải pháp có thể sao chép và dán để khắc phục xung đột.

Giai đoạn 2: Các tình huống phổ biến và cách khắc phục### Tình huống 1: Xung đột thuộc tínhĐây là nguyên nhân chính. Nó xảy ra khi hai tệp manifest định nghĩa cùng một thuộc tính với các giá trị khác nhau. Ví dụ: Firebase SDK có thể đặt android:allowBackup="true", nhưng chính sách bảo mật của công ty bạn yêu cầu false.

Cách khắc phục: Sử dụng tools:replace để báo cho Gradle rằng manifest của ứng dụng là nguồn thông tin chính xác nhất.

  • Đầu tiên, thêm namespace tools vào thẻ <manifest> của bạn:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">- Tiếp theo, thêm tools:replace vào thẻ <application>. Liệt kê các thuộc tính bị xung đột, cách nhau bởi dấu phẩy:``` ...

### Tình huống 2: Không khớp minSdkVersionNếu dự án của bạn nhắm mục tiêu API 21 nhưng bạn nhập một thư viện yêu cầu API 26, quá trình build sẽ thất bại ngay lập tức. Log của bạn sẽ hiển thị thông báo như: *"uses-sdk:minSdkVersion 21 cannot be smaller than version 26 declared in library..."*
**Cách khắc phục:** Bạn có hai lựa chọn ở đây.
- **Lộ trình an toàn:** Cập nhật `build.gradle` (Module: app) để khớp với `minSdkVersion` của thư viện. Điều này đảm bảo tính tương thích hoàn toàn.- **Lộ trình rủi ro:** Nếu bạn biết thư viện sẽ không được sử dụng trên các thiết bị cũ hơn, hãy ép buộc việc hợp nhất:```
<uses-sdk tools:overrideLibrary="com.example.conflicting.library"/>

Tình huống 3: Thiếu 'android:exported' (Android 12+)Bắt đầu từ Android 12 (API 31), mọi Activity, Service hoặc Receiver có <intent-filter> phải khai báo rõ ràng android:exported="true" hoặc false. Nếu một thư viện cũ quên điều này, bản build của bạn sẽ bị lỗi.

Cách khắc phục: Kiểm tra log để tìm lỗi "Element activity#... is missing android:exported attribute". Bạn sẽ cần khai báo thủ công thành phần cụ thể đó trong manifest của riêng mình và thêm thẻ android:exported để ghi đè lên định nghĩa bị thiếu của thư viện.

Giai đoạn 3: Xác minhSau khi áp dụng bản sửa lỗi, đừng chỉ thử chạy lại ứng dụng ngay. Hãy xóa các tệp cũ trước:

  • Truy cập Build > Clean Project.- Chọn Build > Rebuild Project.- Kiểm tra tab Merged Manifest lần cuối. Các dòng chữ màu đỏ sẽ biến mất.Vẫn còn kẹt? Hãy tìm tệp manifest-merger-debug-report.txt bên trong thư mục build/outputs/logs/ của bạn. Nó chứa nhật ký chi tiết từng dòng về mọi quyết định mà trình hợp nhất đã thực hiện trong quá trình build.

Related Error Notes