2012-03-23 29 views
15

Tôi đã gặp phải một lỗi lạ. Tôi có một dự án Android có sử dụng thư viện bên ngoài, cụ thể:Android Eclipse NoClassDefFoundError cho các tệp .jar bên ngoài

  • android-support-v4.jar (hỗ trợ Fragment trong Android 1.6)
  • GoogleAdMobAdsSdk-4.3.1.jar (đối với quảng cáo)

Dự án chạy tốt cho đến khi tôi cập nhật một số khía cạnh của plugin (không thể nhớ lại chi tiết cụ thể vì tôi không chú ý quá nhiều) và sau đó, bất cứ khi nào tôi cố gắng sử dụng bất kỳ lớp nào từ trên .jar các tệp (hoặc bất kỳ lớp con nào của nó, ngay cả các lớp con được định nghĩa bởi tôi), tôi sẽ nhận được một java.lang.NoClassDefFoundError. Tôi không thể tìm thấy câu trả lời sau khi tìm kiếm nhiều, vì vậy tôi thực sự bối rối.

Tôi tin rằng vấn đề này có liên quan đến cách IDE của tôi được thiết lập và nó ít có liên quan đến mã thực, vì vậy tôi sẽ không đăng bất kỳ mã nào trừ khi hoàn toàn cần thiết.

Trả lời

35

Bạn cần đọc điều này - Dealing with dependencies in Android projects.

Liên kết này cũng rất hữu ích - ClassDefNotFoundError with ADT 17

Về cơ bản, tạo ra một thư mục có tên libs và đặt tất cả các jar tập tin của bạn bên trong. Bản cập nhật gần đây sẽ tự động xử lý phần còn lại cho bạn. Bạn không cần chỉnh sửa đường dẫn của mình nữa.

+0

Tôi thực sự không biết tại sao họ thay đổi ADT để hành xử theo cách này vì các thư viện này sẽ được chia sẻ giữa một số dự án. Nhưng ít nhất đây sẽ là một sửa chữa ngắn hạn. – Dan

+0

Cảm ơn bạn, rất nhiều! – AVEbrahimi

+5

Điều này không hiệu quả đối với tôi .. sử dụng ADT 20 – Cheluis

0

Tôi cũng đã gặp lỗi này vì cập nhật lên SDK Android Android, r17. Các liên kết mà @aneal chỉ ra không thảo luận là làm thế nào để xử lý các thư viện thời gian chạy bên ngoài (chẳng hạn như các thư viện được nhập dưới tiêu đề của chính chúng - không phải là thư viện người dùng đã nhập).

Cách dễ nhất để giải quyết vấn đề này là thay đổi thứ tự xây dựng trong đường dẫn xây dựng. Chỉ cần nhấp chuột phải vào dự án của bạn và chọn Thuộc tính. Từ đây, chọn Đường dẫn xây dựng Java. Ở đầu màn hình, chọn tab đơn đặt hàng và xuất và di chuyển GoogleAdMobAdsSdk-4.3.1.jar trên Android X (thay thế x bằng phiên bản bạn đang sử dụng). Tiếp theo, làm sạch dự án của bạn và chạy nó. Bạn sẽ được tốt để đi!

1

Cũng là cảnh báo cho những người khác đã cập nhật thành r17 với nhiều phụ thuộc. Tôi đã có một dự án khác tham chiếu trên con đường xây dựng của tôi và nó vẫn không hoạt động sau khi làm theo TẤT CẢ các hướng dẫn về vấn đề r17 này trên internet.

Phát hiện sau một giờ mà dự án tham chiếu của tôi đã sử dụng phiên bản cũ hơn của một Jar ngoài hơn dự án chính của tôi. Khi cố gắng biên dịch dự án chính, Eclipse sẽ từ bỏ do sự khác biệt về phiên bản jar này và tôi không bao giờ nhận thấy thông báo cảnh báo trong Console.

Giải pháp là sao chép tệp jar bên ngoài phiên bản mới hơn vào thư mục libs của dự án được tham chiếu.

Wow - kẻ giết người năng suất như vậy .....

7

Android không hỗ trợ Java1.7 cho đến bây giờ. Lọ được xây dựng với mức tuân thủ 1.7 không thể được sử dụng trong các ứng dụng Android. Xây dựng lại dự án Java của bạn với mức tuân thủ 5.0 hoặc 6.0 trước khi xuất tệp jar.

Tôi thấy bài đăng này qua google và câu trả lời ở trên không giải quyết được sự cố của tôi. Hy vọng những gì tôi nói sẽ hữu ích cho người khác.

+0

Điều này hóa ra là vấn đề của tôi. Tôi biên dịch lại với 1,6 và thì đấy! Tôi đã sử dụng "javac-source 6 -arget 6 ..." – Jason

0

Cách tôi giải quyết được bằng cách: Nhấp chuột phải vào dự án và chọn đường dẫn xây dựng. Chọn cấu hình đường dẫn xây dựng trong các lựa chọn xuất hiện. Sau đó, xem các thư viện của bạn có trong thư mục thư viện hay không và sau đó chọn tab thứ tự và xuất và trên đó chọn tất cả các tệp jar của bạn. Sau đó chọn ok và chạy dự án của bạn.

7

Nếu bạn thấy NoClassDefFoundError sau khi nâng cấp lên ADT 22, hãy thử này trong Eclipse:

  • Đến Thuộc tính dự ánJava Build PathTrình tự, xuất khẩu tab.
  • Kiểm tra Thư viện riêng tư trên Android tùy chọn.

Android Private Libraries option

+0

Đó là một thủ thuật cho tôi. Cảm ơn rất nhiều ! – Vahron

0

Nếu bạn đang sử dụng Eclipse với Maven IDE (M2E) đi đến "Java Build Path" sau đó "Trình tự, xuất khẩu" và cuối cùng đánh dấu vào mục "Maven Dependencies" và kéo nó xuống BOTTOM của danh sách. Bạn nên làm tương tự với các tham chiếu dự án trong cùng một không gian làm việc. Mỗi khi tôi thiết lập dự án trong một máy tính mới xảy ra.

Các vấn đề liên quan