IT story

NoClassDefFoundError-Eclipse 및 Android

hot-time 2020. 5. 11. 08:06
반응형

NoClassDefFoundError-Eclipse 및 Android


빌드 경로에 두 번째 외부 라이브러리를 추가 할 때까지 Android 앱을 실행하는 데 문제가 있습니다. scoreninja jar을 추가 한 후 앱을 실행하려고 하면 NoClassDefFoundError가 발생합니다.

메시지는 다음과 같습니다.

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

모든 빌드 스크립트가 Android 도구 (?)에 의해 생성되므로 Eclipse를 정리하고 다시 작성하거나 다시 시작하는 것 외에 다른 작업을 수행 할 수 있는지 잘 모르겠습니다 (이미 세 가지를 모두 시도했습니다). 누구든지 내가 이것을 어떻게 수정할 수 있는지 알고 있습니까?


ADT를 업데이트 한 후이 문제가 발생했습니다.

모든 JAR 파일을 "lib"라는 폴더에 저장하고 jar를 빌드 경로에 일반적인 Eclipse 방식으로 추가했습니다. 이것은 내 업데이트까지 잘 작동했습니다.

내 업데이트 후, 명확하게 볼 수있는 클래스에 대한 NoClassDefFoundError가 Jar에 포함되었습니다 (ReferencedLibraries 클래스 확인).

해결책은 빌드 경로에서 항아리를 제거하고 "lib"폴더의 이름을 "libs"로 바꾸는 것입니다. 이것은 개미 협약이며 새로운 ADT가 .apk 파일에서 라이브러리를 찾아서 포함하는 방식 인 것 같습니다. 일단이 작업을 수행하면 모든 것이 잘 작동했습니다.


jar 라이브러리를 자산 또는 lib에 넣을 필요는 없었지만 속성-> Java 빌드 경로-> "주문 및 내보내기"(이전에 나열되었지만 선택되지 않음)에서이 jar의 상자를 선택하십시오. )


빌드 경로에 외부 jar를 추가하면 jar가 패키지에 추가되지만 런타임 중에는 사용할 수 없습니다.

jar가 런타임에 사용 가능하게 하려면 다음을 수행해야합니다.

  • 항아리를 assets폴더 아래에 넣으십시오.
  • 이 항아리 사본을 빌드 경로에 포함하십시오.
  • 동일한 팝업 창의 내보내기 탭으로 이동
  • 새로 추가 된 병에 대해 상자를 확인하십시오.

나는 MapActivity를 위해 이것을 가지고있었습니다. Eclipse의 빌드는 디버거에서 NoClassDefFound를 가져옵니다.

<Application>...</Application>요소 내부에서 매니페스트에 라이브러리를 추가하는 것을 잊었습니다.

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

포함 된 프로젝트의 순서를 변경했습니다 (Eclipse / Build Path 구성 / 주문 및 내보내기). 두 개의 종속 프로젝트를 "주문 및 내보내기"목록의 맨 위로 옮겼습니다. "NoClassDefFoundError"문제를 해결했습니다.

나에게는 이상하다. 포함 된 라이브러리 및 프로젝트 순서의 중요성에 대해 들어 보지 못했습니다. 안드로이드 + 이클립스 재미 :)


이것이 관련이 있는지 또는 여전히 답을 찾고 있는지 확실하지 않지만 동일한 오류를 조사하려고 시도 하면서이 스레드를 발견했습니다 (아마도 다른 이유로).

온라인에서 솔루션을 찾을 수 없었지만 비슷한 스레드에 대한 답변을 통해 프로젝트를 재구성 (또는 정리)해야한다고 생각했습니다.

Eclipse에서 Project => Clean으로 이동하십시오. 프로젝트를 선택하면 Eclipse가 자체적으로 수정하는 것 같습니다. 나를 위해 이것은 문제를 해결했습니다.

도움이 되었기를 바랍니다.


같은 문제가 발생했습니다. 사용하려는 라이브러리가 표준 JDK 7로 컴파일 되었기 때문입니다.

-source 1.6 -target 1.6옵션으로 다시 컴파일하고 정상적으로 작동했습니다.


속성-> Java 빌드 경로-> "주문 및 내보내기"도 흥미로 웠습니다. 왜 자동으로 수행되지 않습니까? 일부 설정이 누락 된 것 같습니다. 또한 이것은 SDK 업그레이드 후 나에게 일어났습니다.


프로젝트 폴더를 마우스 오른쪽 단추로 클릭하고 Java 빌드 경로에서 특성을 찾은 후 표시되는 jar 파일을 선택하십시오. 그것은 나를 위해 일했다.


John O'Connor가 문제에 옳습니다. ADT 17 이상을 설치해도 문제가 해결됩니다. 오류 수정을 위해이 링크를 찾았습니다.

http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17


이 게시물 (및 다른 게시물)에서 모든 것을 시도했지만 효과가 없었습니다. 이것은 지금까지 경험 한 가장 끔찍한 ADT 업그레이드이며 ADT 백업이 없으면 업그레이드되지 않습니다.

프로젝트를 제거한 다음 소스 백업을 사용하여 다시 추가하여 문제를 해결했습니다.


ADT22에서도 이와 동일한 오류가 발생했습니다. 속성-> Java 빌드 경로-> 주문 및 내보내기에서 "Android 개인 라이브러리"를 확인하는 문제가 해결되었습니다. 라이브러리 프로젝트를 사용하는 경우에도 동일한 프로젝트를 수행해야합니다.


내 사례가 약간 다르기 때문에 기존의 모든 답변이 효과가 없습니다. 작동시키는 데 몇 시간이 걸렸습니다. Eclipse를 사용하고 있습니다.

내 안드로이드 프로젝트에는 타사 JAR 파일이 필요한 또 다른 일반적인 Java 1.6 프로젝트가 포함되어 있습니다. 비결은 다음과 같습니다.

  • 컴파일 할 수 있도록 일반 자바 프로젝트에 jar 파일을 포함 시키십시오 (전용), "Order and Export"탭에서 확인하지 마십시오
  • 이 jar 파일을 Android 프로젝트의 "libs"폴더에 복사하여 런타임에 사용할 수있게하십시오.

Hope this help those who have similar scenarios like mine.


sometimes you have to take the whole external project as library and not only the jar:

my problem solved by adding the whole project (in my case google-play-services_lib) as library and not only the jar. the steps to to it (from @style answer):

  1. File->New->Other
  2. Select Android Project
  3. Select "Create Project from existing source"
  4. Click "Browse..." button and navigate to the wanted project
  5. Finish (Now action bar project in your workspace)
  6. Right-click on your project -> Properties
  7. In Android->Library section click Add
  8. select recently added project -> Ok

Sometimes it will happen due to not including jar, which you have dependency, with "uses-libary" tag in your AndroidManifest.xml.

Also, make sure it should be inside "application" tag.

Regards,

Ravi


I had this problem and it was caused by not "exporting" the library.Issue was just because the .class files for some classes are not available while packaging the APK.Compile time it will work fine with out exporiting

In my case I was using "CusrsorAdapter" class and under "JavaBuildPath->Order and Export" I didn't check the support V4 jar.Once it is selected issue is gone.

To make sure you are getting noClassDefFound error because of above reason, please check your logacat, you will see unknown super classs error at run time.


I tried various things and the reason for error in my case was conflict between maps.jar and Google Api in Java Build Path-> Libraries. So, when i removed the maps.jar it worked fine.

Regards,

wahib


please make sure your jar file is in the libs directory of your project in you are using newer ADT version with your eclipse.


I got the exact same problem ... To fix it, I just removed my Android Private Libs in "build path" and clicked ok ... and when i opened op the "build path" again eclipse had added them by itself again, and then it worked for me ;)...


i spent two days trying to solve this issue after updating ADT. finally i was lucky to get this post here:

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

which led me in the right direction. when you follow the solution - remember to replace the android support library of all your projects to the same version (remove it and re-install it to the projects). i hope this helps - good luck


If you prefer to know which files the workaround is related to here's what I found. Simple change the .classpath file to

<?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>

Replace the .classpath file in all library projects and in main android project. The .classpath file is in the root folder of the eclipse project. Of cause don't forget to add your own classpath entries, should you have any (so compare with your current version of .classpath).

I believe this is the same result as going through the eclipse menus as componavt-user explained above (Eclipse / Configure Build Path / Order and Export).


The solution here worked for me. It's a matter of importing the library to the libs folder, then modifying the build.gradle file and then cleaning with gradlew.


If you change your order and export in your project build path, this error will not occur. The other way of achieving it is through .classpath in your project folder.


Try this:-

Step 1

Add all the libraries to build pat in Eclipse( means make all libraries referenced libraries)

Step 2

Delete R.java file and again build the project. Don't worry, R.java will automatically get recreated.

Chill :)


As i understood, your Project shows no errors, because you included the Jar. But the Jar won't be used, when your Project got "exported" to the device. Try this

Project -> Properties

Java Build Path / Order and Export

[✔] Your Jar


This happens quite very often to me.

Last time that happened I can remembered was caused by switching the Eclipse ADT (Google special edition) to Android Studio, and switching back. I basically tried all methods that I can found on stackoverflow which didn't work for me.

Eventually, I got the app working again (no more NoCalssDeffoundError) by switching my IDE to original Eclipse (Kepler) with ADT.


Acutally you have reached the infamous 64k limit issue, you need to enable multidex.

This is how you do it. https://developer.android.com/tools/building/multidex.html

참고URL : https://stackoverflow.com/questions/2247998/noclassdeffounderror-eclipse-and-android

반응형