
Hướng dẫn xử lý triệt để lỗi Duplicate class found in modules trong React Native và Expo
Lỗi Duplicate class found in modules là cơn ác mộng phổ biến khi phát triển ứng dụng di động. Bài viết này cung cấp giải pháp kỹ thuật chuyên sâu để khắc phục xung đột thư viện trong React Native và Expo, giúp tối ưu hóa quy trình build dự án.
Bài viết được dịch và tổng hợp từ tin tức gốc. Bạn có thể đọc bài viết gốc bằng tiếng Anh tại đây.
Điểm tin nhanh:
- Lỗi Duplicate class thường xuất phát từ việc xung đột phiên bản thư viện hoặc các dependency chồng chéo trong dự án.
- Giải pháp cốt lõi bao gồm việc dọn dẹp bộ nhớ đệm (cache), kiểm tra file build.gradle và quản lý chặt chẽ các phiên bản package.
- Việc hiểu rõ cơ chế dependency resolution giúp lập trình viên tránh được các lỗi build tương tự trong tương lai.
Trong thế giới phát triển ứng dụng di động, không gì gây ức chế hơn việc dự án đang chạy ổn định bỗng dưng báo lỗi build hàng loạt chỉ vì một thay đổi nhỏ trong cấu hình. Lỗi Duplicate class found in modules là một trong những rào cản kỹ thuật khiến nhiều lập trình viên mất hàng giờ đồng hồ để debug. Nếu bạn đang đối mặt với thông báo lỗi này trong quá trình phát triển với React Native hoặc Expo, hãy bình tĩnh, vì đây thường là dấu hiệu của sự xung đột trong cây phụ thuộc (dependency tree).

Nguyên nhân gốc rễ của xung đột lớp
Lỗi này xảy ra khi trình biên dịch (compiler) phát hiện hai hoặc nhiều file JAR/AAR chứa cùng một định nghĩa lớp (class definition) trong quá trình đóng gói ứng dụng Android. Điều này thường xảy ra khi bạn cài đặt nhiều thư viện khác nhau nhưng chúng lại cùng phụ thuộc vào một thư viện thứ ba với các phiên bản khác nhau.
Bảng so sánh các nguyên nhân phổ biến
| Nguyên nhân | Mô tả kỹ thuật | Tác động |
|---|---|---|
| Xung đột phiên bản | Hai thư viện yêu cầu hai phiên bản khác nhau của cùng một dependency | Build thất bại |
| Cache cũ | Bộ nhớ đệm của Gradle hoặc Metro chứa các tệp tin lỗi thời | Lỗi biên dịch không rõ lý do |
| Cấu hình sai | Khai báo trùng lặp trong file build.gradle | Xung đột tài nguyên |
Khi gặp phải vấn đề này, việc đầu tiên cần làm là kiểm tra lại cấu trúc dự án. Nếu bạn đang xây dựng các hệ thống phức tạp, việc quản lý tốt các thành phần là cực kỳ quan trọng, tương tự như cách chúng ta quản trị Feature Flag để tránh nợ kỹ thuật.
Các bước khắc phục chi tiết
1. Dọn dẹp bộ nhớ đệm (Clean Build)
Trước khi can thiệp vào mã nguồn, hãy thử làm sạch môi trường build. Đối với dự án React Native, hãy thực hiện các lệnh sau trong thư mục android:
cd android
./gradlew clean
cd ..
Đồng thời, hãy xóa thư mục node_modules và file package-lock.json hoặc yarn.lock, sau đó cài đặt lại toàn bộ phụ thuộc. Điều này giúp loại bỏ các tệp tin rác có thể gây ra lỗi. Nếu bạn đang tối ưu hóa quy trình làm việc, hãy cân nhắc việc xây dựng công cụ quản lý quyết định dựa trên Git để theo dõi các thay đổi trong file cấu hình.

2. Kiểm tra file build.gradle
Nếu lỗi vẫn tiếp diễn, hãy mở file android/app/build.gradle và kiểm tra các khai báo implementation. Đôi khi, việc khai báo trùng lặp một thư viện trong cả dependencies của project và module con sẽ dẫn đến lỗi này. Hãy đảm bảo rằng bạn không import cùng một thư viện nhiều lần với các phiên bản khác nhau.
Mẹo hay: Sử dụng lệnh ./gradlew app:dependencies để xem cây phụ thuộc đầy đủ của ứng dụng. Điều này giúp bạn xác định chính xác thư viện nào đang kéo theo các dependency gây xung đột.
3. Sử dụng exclude trong Gradle
Nếu bạn xác định được thư viện nào gây ra lỗi, bạn có thể loại trừ (exclude) module đó trong file build.gradle:
implementation ('com.example:library:1.0.0') {
exclude group: 'com.conflicting.module', module: 'conflicting-library'
}
Đánh giá & Lời khuyên Thực tiễn
Từ góc độ của một Senior Tech Lead, lỗi Duplicate class không chỉ là vấn đề về cú pháp mà là vấn đề về quản trị dependency.
- Ưu điểm: Việc xử lý lỗi này giúp bạn hiểu sâu hơn về cách Gradle hoạt động và cách các thư viện được đóng gói trong Android.
- Nhược điểm: Tốn thời gian và có thể gây ra các lỗi runtime tiềm ẩn nếu bạn loại trừ nhầm các dependency cần thiết.
- Lưu ý: Luôn ưu tiên cập nhật các thư viện lên phiên bản mới nhất thay vì cố gắng loại trừ thủ công, vì các phiên bản mới thường đã giải quyết được các xung đột dependency. Nếu dự án của bạn đang gặp khó khăn trong việc duy trì tính ổn định, hãy xem xét chiến lược ưu tiên xử lý lỗi SEO và kỹ thuật để có lộ trình sửa lỗi khoa học hơn.
Câu hỏi thường gặp (FAQ)
Tại sao lỗi này chỉ xuất hiện trên Android mà không phải iOS?
Android sử dụng Gradle để quản lý dependency và đóng gói file JAR/AAR, trong khi iOS sử dụng CocoaPods. Cơ chế xung đột lớp của hai nền tảng này hoàn toàn khác nhau, do đó lỗi này thường đặc thù cho môi trường Android.
Có nên xóa hoàn toàn node_modules không?
Có, đây là bước đầu tiên và hiệu quả nhất để loại bỏ các tệp tin bị lỗi hoặc xung đột trong quá trình cài đặt package.
Làm thế nào để tránh lỗi này trong tương lai?
Hãy luôn sử dụng các phiên bản thư viện tương thích (compatible versions) và kiểm tra kỹ tài liệu hướng dẫn của từng thư viện trước khi thêm vào dự án.
Kết luận
Lỗi Duplicate class found in modules tuy gây khó chịu nhưng hoàn toàn có thể kiểm soát nếu bạn nắm vững quy trình build của Android và cách quản lý dependency. Hy vọng bài viết này giúp bạn giải quyết nhanh chóng vấn đề và tiếp tục tập trung vào việc phát triển tính năng. Nếu bạn có bất kỳ thắc mắc nào hoặc muốn chia sẻ kinh nghiệm debug, hãy để lại bình luận bên dưới và đừng quên theo dõi hi_dev để cập nhật những kiến thức công nghệ mới nhất.
Do you like this post?
Upvote to push this post higher on the community feed





