NoClassDefFoundError - Eclipse và Android


193

Tôi đang gặp sự cố khi chạy ứng dụng Android, cho đến khi thêm thư viện bên ngoài thứ hai vào đường dẫn xây dựng, nó vẫn hoạt động tốt. Kể từ khi đã thêm bình scoreninja, bây giờ tôi nhận được NoClassDefFoundError khi tôi cố chạy ứng dụng.

Đây là thông báo:

02-11 21:45:26.154: ERROR/AndroidRuntime(3654): java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter

Vì tất cả các tập lệnh xây dựng được tạo bởi các công cụ Android (?), Tôi không chắc tôi có thể làm gì khác ngoài việc dọn dẹp và xây dựng lại hoặc khởi động lại nhật thực (tôi đã thử cả ba). Có ai biết làm thế nào tôi có thể sửa đổi điều này?


1
Làm thế nào bạn đã thêm các tập tin jar? Bạn đã thêm bằng cách sử dụng đường dẫn xây dựng -> Thư viện -> Bình bên ngoài ??
Teja Kantamneni

1
Nhấp chuột phải vào dự án> Xây dựng đường dẫn> Thêm lưu trữ bên ngoài ... theo hướng dẫn tại đây: scoreninja.appspot.com
Tom R

4
Nếu bạn đã cập nhật ADT gần đây, thì hãy xem câu trả lời của John bên dưới (và nâng cấp nó!) Stackoverflow.com/a/9916751/361852
Atul G Lòng tin

1
Nếu bạn gặp phải vấn đề này, trước khi bạn bắt đầu trả lời đúng câu trả lời của John, câu trả lời của @Till dưới đây sẽ giải quyết nó cho rất nhiều người, bao gồm cả tôi.
Carlos P

Bạn đã thử multidex?
Ashish Rawat

Câu trả lời:


234

Tôi đã có vấn đề này sau khi cập nhật ADT.

Tôi đã lưu trữ tất cả các tệp JAR của mình trong một thư mục có tên là "lib" và thêm các tệp vào đường dẫn xây dựng theo cách thông thường của Eclipse. Điều này làm việc tốt cho đến khi cập nhật của tôi.

Sau khi cập nhật, tôi đã nhận được NoClassDefFoundError cho một lớp mà tôi có thể thấy rõ được bao gồm trong jar (kiểm tra các lớp ReferenceencedL Library).

Giải pháp là xóa các lọ của tôi khỏi đường dẫn xây dựng và đổi tên thư mục "lib" của tôi thành "libs". Đây là một quy ước về kiến ​​và dường như là cách mà ADT mới tìm thấy và bao gồm các thư viện trong tệp .apk. Một khi tôi đã làm điều này, mọi thứ hoạt động tốt.


1
Cảm ơn rất nhiều! Tôi không có thư mục lib hoặc libs trước khi cập nhật ADT ngày hôm qua và mọi thứ đều hoạt động tốt. Sau khi cập nhật, tất cả các lọ bên ngoài có vấn đề này. Họ đã được sửa chữa nhờ câu trả lời của bạn. Tôi phải kết hợp của bạn với Brian để làm cho nó hoạt động.
Hồng

Cảm ơn John! Tôi sẽ thêm rằng sau khi thay đổi thư mục thành lib, tôi phải khởi động lại nhật thực để nó hoạt động.
Michaeldcooney

5
Tôi gặp vấn đề tương tự sau khi cập nhật ADT, nhưng tôi đã giữ các lọ của mình trong một thư mục bên ngoài dự án của tôi và bao gồm chúng là Thư viện người dùng trong đường dẫn xây dựng của tôi. Giải pháp là xóa thư viện người dùng khỏi đường dẫn xây dựng của tôi và thay vào đó bao gồm các lọ bằng cách sử dụng "Thêm lọ bên ngoài", sau đó làm cho chúng được xuất bằng cách chọn các hộp kiểm trên tab "Đặt hàng và xuất".
Travis

1
Tôi đã tham khảo android-support-v13.jar như một thư viện bên ngoài tại C: \ android-sdk-windows \ extend \ android \ integration \ v13. Tôi đã chuyển JAR đó vào thư mục libs của dự án và xóa tham chiếu khỏi Java Build Path -> Thư viện. Một bản dựng sạch sẽ và tôi đã đi một lần nữa.
Snowwire

Chào. tôi đã thử cách tiếp cận của chúng tôi bằng cách thêm các lib jar bên ngoài vào bên trong / libs và bây giờ tôi nhận được lỗi này: Chuyển đổi sang định dạng Dalvik không thành công với lỗi 1
Jonathan

100

Tôi không phải đặt thư viện jar trong tài sản hoặc lib (s), nhưng chỉ đánh dấu vào ô cho tệp này trong Thuộc tính -> Đường dẫn xây dựng Java -> "Đặt hàng và xuất" (được liệt kê trước, nhưng không được chọn )


Cám ơn rất nhiều! Tôi đã phải vật lộn với lỗi này trong một thời gian dài và tất cả những gì tôi cần làm là kiểm tra hộp mờ cho lọ trong màn hình "Đặt hàng và Xuất khẩu". Điều thú vị là tôi chỉ phải làm điều này để nó hoạt động trên trình giả lập Nook Tablet. Không có vấn đề trên thiết bị hoặc trình giả lập khác.
Luis

5
Có ai biết tại sao bạn phải làm cả hai, thêm thư viện và cũng chọn hộp kiểm trong Đặt hàng và Xuất không? Có một lý do tại sao tôi muốn thêm JAR bên ngoài nhưng không bao gồm nó trong Đơn hàng và Xuất khẩu?
Lou Morda

Tôi đã có vấn đề này sau khi cập nhật ADT và điều này đã giải quyết nó cho tôi.
cdavidyoung

5
Nó đã giúp tôi, nhưng chỉ sau khi tôi thực hiện Dự án -> Sạch sẽ
altumano

Cảm ơn!! Cứu tôi. Phải làm sạch và khởi động lại sau khi cài đặt Eclipse Juno.
Rynardt

68

Bằng cách thêm jar bên ngoài vào đường dẫn xây dựng của bạn, chỉ cần thêm jar vào gói của bạn, nhưng nó sẽ không khả dụng trong thời gian chạy.

Để jar có sẵn trong thời gian chạy , bạn cần:

  • Đặt bình trong assetsthư mục của bạn
  • Bao gồm bản sao này của jar trong đường dẫn xây dựng của bạn
  • Chuyển đến tab xuất trên cùng một cửa sổ bật lên
  • Kiểm tra hộp chống lại bình mới được thêm vào

ScoreNinjaAd CHƯƠNG là mã của người khác, nhưng tôi sẽ rất ngạc nhiên nếu nó có lỗi như vậy vì nó được sử dụng phổ biến. Lỗi xảy ra tại một điểm trong mã của riêng tôi.
Tom R

Lỗi theo nghĩa đen chỉ xảy ra ở đây: sna = new ScoreNinjaAd CHƯƠNG (this, SN_APP_ID, SN_APP_KEY);
Tom R

Bạn có cần một importtuyên bố cho các tập tin jar bên ngoài? Tôi chưa bao giờ sử dụng chúng.
Anthony Forloney

Bạn đã thử xóa tệp .jar khỏi assestscách tiếp cận thư mục chưa?
Anthony Forloney

Vâng. Cuối cùng, tôi đã chán ngấy với tất cả những điều này và chỉ cần tải xuống nguồn và sao chép các tệp nguồn vào dự án của tôi. Không phải là giải pháp tốt nhất, nhưng nó hoạt động ngay bây giờ. Cảm ơn tất cả sự giúp đỡ của bạn.
Tom R

48

Tôi đã có cái này cho MapActivity. Các bản dựng trong Eclipse được NoClassDefFound trong trình gỡ lỗi.

Quên thêm thư viện vào tệp kê khai, bên trong <Application>...</Application>phần tử

<uses-library android:name="com.google.android.maps" />

27

Tôi đã thay đổi thứ tự của các dự án được bao gồm (Eclipse / Configure Build Path / Order and Export). Tôi đã chuyển hai dự án phụ thuộc của mình lên đầu danh sách "Đặt hàng và Xuất khẩu". Nó đã giải quyết vấn đề "NoClassDefFoundError".

Nó là lạ đối với tôi. Tôi đã không nghe về tầm quan trọng của thứ tự bao gồm các thư viện và dự án. Android + Eclipse rất thú vị :)


Đây cũng là giải pháp được đề cập bởi người dùng thứ hai ở đây trong bugruport: code.google.com/p/android/issues/detail?id=55304
arberg

15

Tôi không chắc điều này có liên quan hay không, hoặc thậm chí bạn vẫn đang tìm kiếm câu trả lời, nhưng tôi đã gặp chủ đề này trong khi cố gắng nghiên cứu cùng một lỗi (nhưng có thể vì những lý do khác nhau).

Tôi không thể tìm thấy bất kỳ giải pháp trực tuyến nào, nhưng một câu trả lời trên một chủ đề tương tự khiến tôi suy nghĩ và nhận ra có lẽ tôi chỉ cần xây dựng lại (hoặc làm sạch) dự án.

Trong Eclipse, đi đến Project => Clean. Chọn dự án của bạn và Eclipse dường như tự sửa nó. Đối với tôi điều này đã giải quyết vấn đề.

Hi vọng điêu nay co ich.


Vâng, dường như có một lỗi trong Eclipse / ADT / dex / bất cứ điều gì về cơ bản bỏ lỡ các lớp trong bản dựng. Nó cũng có thể bỏ lỡ Applicationlớp dẫn đến một lỗi khác.
Timmmm

13

Tôi đã gặp vấn đề tương tự. Lý do là thư viện mà tôi đang cố sử dụng đã được biên dịch với JDK 7 tiêu chuẩn.

Tôi biên dịch lại nó với các -source 1.6 -target 1.6tùy chọn và nó hoạt động tốt.


CẢM ƠN YOUUUUUUUUUUUUUUU !!!!!!!!!!!!!!!!!!! Tôi đã thất vọng vì vấn đề này và bạn đã giải quyết nó! Có một chút mỉa mai là ngay cả SDK Jelly Bean 4.3 mới nhất (API 18) vẫn không thể đọc 1.7 JAR / lớp. Và tệ nhất trong tất cả là nó không phàn nàn gì cả :(
Hendy

Tôi đã có cùng một vấn đề. Điều tồi tệ nhất là tôi đã nghĩ trong tùy chọn này và sau đó tôi đã thay đổi nguồn-1.7 của tôi với -ource 1.5 (để chắc chắn) và vấn đề không được giải quyết. Nhưng, sau khi đọc bình luận của bạn, tôi đã thử lại với 1.6 và sau đó, nó hoạt động như một cơ duyên.
Pedro Náñez

7

Điều tương tự cũng xảy ra với tôi: Thuộc tính -> Đường dẫn xây dựng Java -> "Đặt hàng và xuất" Thật thú vị - tại sao việc này không được thực hiện tự động? Tôi đoán một số thiết lập bị thiếu. Ngoài ra điều này đã xảy ra với tôi sau khi nâng cấp SDK.


3

Nhấp chuột phải vào thư mục dự án của bạn, tìm các thuộc tính trong đường dẫn xây dựng Java và chọn các tệp jar mà bạn thấy. Nó đã làm cho tôi.



2

Tôi đã thử mọi thứ từ bài đăng này (và một số bài đăng khác) và nó không hiệu quả với tôi, đây là bản nâng cấp ADT khủng khiếp nhất tôi từng trải qua và tôi sẽ không bao giờ nâng cấp nếu không có bản sao lưu ADT hoạt động.

Tôi quản lý để giải quyết nó bằng cách loại bỏ dự án, và sau đó thêm nó một lần nữa bằng cách sử dụng một bản sao lưu nguồn mà tôi có.


2

Tôi đã có lỗi tương tự với ADT22. Đã giải quyết nó kiểm tra "Thư viện riêng Android" trong các thuộc tính -> đường dẫn xây dựng Java -> Đặt hàng và xuất. Nếu bạn đang sử dụng bất kỳ dự án thư viện nào, điều tương tự cũng nên được thực hiện cho chúng.


Nó cũng làm việc cho tôi. Tôi đã bao gồm thư viện nhưng quên kiểm tra nó trong "Đặt hàng và xuất". Cảm ơn bạn!
jmrodrigg

2

Tất cả các câu trả lời hiện tại không phù hợp với tôi vì trường hợp của tôi hơi khác một chút. Tôi phải mất vài giờ để làm việc. Tôi đang sử dụng Eclipse.

Dự án Android của tôi bao gồm một dự án java 1.6 bình thường khác, cần tệp jar của bên thứ 3. Bí quyết là:

  • bao gồm jar trong dự án java bình thường để nó biên dịch (chỉ), không kiểm tra nó trong tab "Đặt hàng và xuất"
  • đồng thời sao chép tệp jar này vào thư mục "libs" của dự án Android để nó có sẵn trong thời gian chạy

Hy vọng điều này sẽ giúp những người có kịch bản tương tự như tôi.


1

đôi khi bạn phải lấy toàn bộ dự án bên ngoài làm thư viện và không chỉ là jar:

vấn đề của tôi đã được giải quyết bằng cách thêm toàn bộ dự án (trong trường hợp của tôi là google-play-services_lib) làm thư viện và không chỉ là jar. các bước để thực hiện (từ câu trả lời @style ):

  1. Tệp-> Mới-> Khác
  2. Chọn dự án Android
  3. Chọn "Tạo dự án từ nguồn hiện tại"
  4. Nhấp vào nút "Duyệt ..." và điều hướng đến dự án mong muốn
  5. Kết thúc (Bây giờ dự án thanh hành động trong không gian làm việc của bạn)
  6. Nhấp chuột phải vào dự án của bạn -> Thuộc tính
  7. Trong phần Android-> Thư viện, nhấp vào Thêm
  8. chọn dự án đã thêm gần đây -> Ok

1

Đôi khi điều đó sẽ xảy ra do không bao gồm jar, mà bạn có sự phụ thuộc, với thẻ "used-libary" trong AndroidManifest.xml của bạn.

Ngoài ra, hãy chắc chắn rằng nó phải nằm trong thẻ "application".

Trân trọng,

Ravi


1

Tôi gặp vấn đề này và nguyên nhân là do không "xuất" thư viện. Tôi chỉ là do các tệp. Class cho một số lớp không có sẵn trong khi đóng gói APK. Thời gian biên dịch sẽ hoạt động tốt với việc hết hạn

Trong trường hợp của tôi, tôi đã sử dụng lớp "CusrsorAdOG" và trong "JavaBuildPath-> Đặt hàng và xuất khẩu" Tôi đã không kiểm tra jar V4 hỗ trợ. Một khi vấn đề được chọn đã biến mất.

Để chắc chắn rằng bạn đang gặp lỗi noClassDefFound vì lý do trên, vui lòng kiểm tra logacat của bạn, bạn sẽ thấy lỗi siêu lớp không xác định trong thời gian chạy.



0

Tôi đã thử nhiều thứ khác nhau và lý do lỗi trong trường hợp của tôi là xung đột giữa maps.jar và Google Api trong Java Build Path-> Thư viện. Vì vậy, khi tôi gỡ bỏ maps.jar, nó hoạt động tốt.

Trân trọng,

wahib


0

vui lòng đảm bảo tệp jar của bạn nằm trong thư mục libs của dự án mà bạn đang sử dụng phiên bản ADT mới hơn với nhật thực của bạn.


0

Tôi đã gặp vấn đề tương tự chính xác ... Để khắc phục, tôi chỉ cần gỡ bỏ Android Private Libs của mình trong "đường dẫn xây dựng" và nhấp vào ok ... và khi tôi mở lại "đường dẫn xây dựng" thì nhật thực lại thêm một lần nữa, và sau đó nó làm việc cho tôi;) ...


0

tôi đã dành hai ngày để giải quyết vấn đề này sau khi cập nhật ADT. cuối cùng tôi đã may mắn nhận được bài đăng này ở đây:

https://code.google.com.vn/p/android/issues/detail?id=55304

Điều đó dẫn tôi đi đúng hướng. khi bạn làm theo giải pháp - hãy nhớ thay thế thư viện hỗ trợ Android của tất cả các dự án của bạn thành cùng một phiên bản (gỡ bỏ nó và cài đặt lại nó cho các dự án). Tôi mong điều này giúp ích, chúc may mắn


0

Nếu bạn muốn biết tập tin nào thì cách giải quyết có liên quan đến đây là những gì tôi tìm thấy. Thay đổi đơn giản tệp. Classpath thành

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

Thay thế tệp. Classpath trong tất cả các dự án thư viện và trong dự án Android chính. Tệp. Classpath nằm trong thư mục gốc của dự án nhật thực. Vì lý do đừng quên thêm các mục nhập đường dẫn của riêng bạn, nếu bạn có bất kỳ mục nào (vì vậy hãy so sánh với phiên bản hiện tại của. Classpath).

Tôi tin rằng đây là kết quả tương tự như khi đi qua các menu nhật thực như người dùng thành phần đã giải thích ở trên (Eclipse / Configure Build Path / Order and Export).


0

Các giải pháp ở đây làm việc cho tôi. Đó là vấn đề nhập thư viện vào thư mục libs, sau đó sửa đổi tệp build.gradle và sau đó làm sạch bằng gradlew.


0

Nếu bạn thay đổi thứ tự và xuất trong đường dẫn xây dựng dự án của bạn, lỗi này sẽ không xảy ra. Cách khác để đạt được nó là thông qua. Classpath trong thư mục dự án của bạn.


0

Thử cái này:-

Bước 1

Thêm tất cả các thư viện để xây dựng pat trong Eclipse (có nghĩa là làm cho tất cả các thư viện được tham chiếu)

Bước 2

Xóa tệp R.java và xây dựng lại dự án. Đừng lo lắng, R.java sẽ tự động được tạo lại.

Làm lạnh :)


0

Theo tôi hiểu, Dự án của bạn không có lỗi, vì bạn đã bao gồm Jar. Nhưng Jar sẽ không được sử dụng khi Dự án của bạn được "xuất" sang thiết bị. Thử cái này

Dự án -> Thuộc tính

Java Build Path / Order and Export

[✔] Jar của bạn


0

Điều này xảy ra khá thường xuyên với tôi.

Lần cuối cùng xảy ra tôi có thể nhớ là do chuyển đổi ADT Eclipse (phiên bản đặc biệt của Google) sang Android Studio và chuyển trở lại. Về cơ bản, tôi đã thử tất cả các phương thức mà tôi có thể tìm thấy trên stackoverflow mà không hiệu quả với tôi.

Cuối cùng, tôi đã làm cho ứng dụng hoạt động trở lại (không còn NoCalssDeffoundError) bằng cách chuyển IDE của tôi sang Eclipse gốc (Kepler) với ADT.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.