NoClassDefFoundError-Eclipse 및 Android


193

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

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

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

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


1
jar 파일을 어떻게 추가 했습니까? 빌드 경로-> 라이브러리-> 외부 항아리를 사용하여 추가 했습니까?
Teja Kantamneni 2019

1
지침에 따라 프로젝트를 마우스 오른쪽 버튼으로 클릭> 빌드 경로> 외부 아카이브 추가 ... : scoreninja.appspot.com
Tom R

4
최근에 ADT를 업데이트 한 경우 아래에서 John의 답변을보고 찬성하십시오! stackoverflow.com/a/9916751/489852
Atul Goyal

1
이 문제가 발생하면 John의 답변으로 바로 뛰어 들기 전에 아래의 @Till 답변은 많은 사람들에게도 해결됩니다.
Carlos P

멀티 덱스를 사용해 보셨습니까?
Ashish Rawat 8

답변:


234

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

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

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

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


1
고마워요! 어제의 ADT 업데이트 전에 lib 또는 libs 폴더가 없었으며 모든 것이 잘 작동했습니다. 업데이트 후 모든 외부 병 에이 문제가 발생했습니다. 귀하의 답변 덕분에 수정되었습니다. 나는 당신을 Brian와 결합시켜야 작동합니다.
Hong

고마워 존! 폴더를 libs로 변경 한 후 작동하려면 Eclipse를 다시 시작해야한다고 덧붙였습니다.
Michaeldcooney

5
ADT를 업데이트 한 후에도 같은 문제가 발생했지만 프로젝트 외부의 디렉토리에 항아리를 보관하고 빌드 경로에 사용자 라이브러리로 포함 시켰습니다. 해결책은 빌드 경로에서 사용자 라이브러리를 제거하고 대신 "외부 항아리 추가"를 사용하여 항아리를 포함시킨 다음 "주문 및 내보내기"탭의 확인란을 선택하여 내보내도록하는 것입니다.
트래비스

1
C : \ android-sdk-windows \ extras \ android \ compatibility \ v13에서 android-support-v13.jar을 외부 라이브러리로 참조했습니다. 해당 JAR을 프로젝트 라이브러리 폴더로 이동하고 Java 빌드 경로-> 라이브러리에서 참조를 제거했습니다. 깨끗한 빌드와 나는 다시 가고 있었다.
Snowwire

안녕하세요. 나는 / libs 안에 외부 jar 라이브러리를 추가하여 우리의 접근 방식을 시도했지만 이제이 오류를받습니다 .Dalvik 형식으로 변환하지 못했습니다. 오류 1
Jonathan

100

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


정말 고마워! 나는이 오류로 오랫동안 어려움을 겪고 있었고 "Order and Export"화면에서 항아리의 상자를 확인하기 만하면됩니다. 재미있는 것은 Nook Tablet 에뮬레이터에서 작동하도록하기 위해이 작업을 수행해야한다는 것입니다. 장치 나 다른 에뮬레이터에 문제가 없었습니다.
Luis

5
누구나 왜 두 가지를 모두 해야하는지 알고 라이브러리를 추가하고 주문 및 내보내기에서 확인란을 선택합니까? 외부 JAR을 추가하고 싶지만 주문 및 내보내기에 포함하지 않으려는 이유가 있습니까?
Lou Morda

ADT를 업데이트 한 후이 문제가 발생하여 해결되었습니다.
cdavidyoung

5
그것은 나를 도왔지만, 내가 프로젝트를 마친 후에야-> Clean
altumano

감사!! 저를 구했습니다. Eclipse Juno를 설치 한 후 정리하고 다시 시작해야했습니다.
Rynardt

68

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

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

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

ScoreNinjaAdapter는 다른 사람의 코드이지만 일반적인 사용법과 같은 오류가 포함되어 있으면 매우 놀랍습니다. 내 코드의 특정 지점에서 오류가 발생합니다.
Tom R

오류는 문자 그대로 여기에서 발생합니다. sna = new ScoreNinjaAdapter (this, SN_APP_ID, SN_APP_KEY);
Tom R

import외부 jar 파일에 대한 명령문 이 필요 합니까? 나는 그들을 사용한 적이 없다.
Anthony Forloney

에서 .jar 파일을 제거해 보셨습니까? assests폴더 접근 방식 ?
Anthony Forloney

네. 결국, 나는이 모든 것을 먹었고 소스를 다운로드하고 소스 파일을 내 프로젝트에 복사했습니다. 가장 좋은 해결책은 아니지만 지금은 작동합니다. 모든 도움을 주셔서 감사합니다.
Tom R

48

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

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

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

27

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

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


이것은 또한 bugruport에서 두 번째 사용자 의견으로 언급 된 솔루션입니다 : code.google.com/p/android/issues/detail?id=55304
arberg

15

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

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

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

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


네, Eclipse / ADT / dex /에 기본적으로 빌드에서 클래스를 놓친 버그가있는 것 같습니다. 또한 Application다른 오류로 이어지는 클래스를 놓칠 수 있습니다 .
Timmmm

13

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

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


감사합니다 YOUUUUUUUUUUUUUUUU !!!!!!!!!!!!!!!!!!! 이 문제로 인해 좌절했으며 해결했습니다! 최신 Jelly Bean 4.3 SDK (API 18)조차도 여전히 1.7 JAR / 클래스를 읽을 수 없다는 것은 약간 아이러니합니다. 그리고 무엇보다도 그것은 전혀 불평하지 않습니다 :(
Hendy Irawan

나는 같은 문제를 겪고 있었다. 가장 나쁜 점은이 옵션에서 생각한 다음 -source 1.7을 -source 1.5로 변경했는데 문제가 해결되지 않았다는 것입니다. 그러나 귀하의 의견을 읽은 후 1.6으로 다시 시도한 다음 매력처럼 작동했습니다.
Pedro Náñez

7

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


3

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



2

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

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


2

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


그것은 또한 나를 위해 일했습니다. 라이브러리를 포함했지만 "주문 및 내보내기"에서 라이브러리를 확인하는 것을 잊었습니다. 감사합니다!
jmrodrigg

2

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

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

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

이것이 나와 비슷한 시나리오를 가진 사람들에게 도움이되기를 바랍니다.


1

때로는 항아리뿐만 아니라 전체 외부 프로젝트를 라이브러리로 가져와야합니다.

내 문제는 항아리뿐만 아니라 전체 프로젝트 (내 경우에는 google-play-services_lib)를 라이브러리로 추가하여 해결되었습니다. 단계 ( @style answer ) :

  1. 파일-> 신규-> 기타
  2. 안드로이드 프로젝트 선택
  3. "기존 소스에서 프로젝트 작성"을 선택하십시오.
  4. "찾아보기 ..."버튼을 클릭하고 원하는 프로젝트로 이동하십시오.
  5. 마침 (이제 작업 영역의 작업 표시 줄 프로젝트)
  6. 프로젝트를 마우스 오른쪽 버튼으로 클릭-> 속성
  7. Android-> Library 섹션에서 추가를 클릭하십시오.
  8. 최근에 추가 한 프로젝트 선택-> 확인

1

때로는 AndroidManifest.xml에 "uses-libary"태그가있는 jar을 포함하지 않아서 발생할 수 있습니다.

또한 "application"태그 안에 있어야합니다.

문안 인사,

라비


1

이 문제가 발생했으며 라이브러리를 "내보내기"하지 않아 발생했습니다. 문제는 APK를 패키징하는 동안 일부 클래스의 .class 파일을 사용할 수 없기 때문입니다.

필자의 경우 "CusrsorAdapter"클래스를 사용하고 "JavaBuildPath-> 주문 및 내보내기"에서 지원 V4 jar을 확인하지 않았습니다.

위의 이유로 noClassDefFound 오류가 발생하는지 확인하려면 logacat을 확인하십시오. 런타임에 알 수없는 수퍼 클래스 오류가 표시됩니다.



0

나는 여러 가지를 시도했고 내 경우 오류의 원인은 Java Build Path-> Libraries의 maps.jar와 Google Api 간의 충돌이었습니다. 그래서 maps.jar을 제거하면 정상적으로 작동했습니다.

문안 인사,

와 이브


0

Eclipse 파일과 함께 최신 ADT 버전을 사용하는 경우 jar 파일이 프로젝트의 libs 디렉토리에 있는지 확인하십시오.


0

나는 똑같은 문제를 겪었습니다 ... 수정하기 위해 방금 "빌드 경로"에서 내 Android Private Libs를 제거하고 확인을 클릭했습니다 ... 그리고 "빌드 경로"를 다시 열면식이 자체적으로 다시 추가되었습니다. 그리고 그것은 나를 위해 일했습니다.) ...


0

ADT를 업데이트 한 후이 문제를 해결하기 위해 이틀을 보냈습니다. 마침내 나는이 포스트를 여기에서 얻는 것이 운이 좋았다 :

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

그것은 올바른 방향으로 나를 이끌었습니다. 솔루션을 따를 때-모든 프로젝트의 Android 지원 라이브러리를 동일한 버전으로 바꾸십시오 (제거하고 프로젝트에 다시 설치하십시오). 나는 이것이 도움이되기를 바랍니다-행운을 빕니다


0

해결 방법이 어떤 파일인지 알고 싶다면 여기에 내가 찾은 것이 있습니다. .classpath 파일을 다음과 같이 간단히 변경하십시오.

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

모든 라이브러리 프로젝트 및 기본 Android 프로젝트에서 .classpath 파일을 바꾸십시오. .classpath 파일은 이클립스 프로젝트의 루트 폴더에 있습니다. 원인이있는 경우 자신 만의 클래스 경로 항목을 추가하는 것을 잊지 마십시오 (현재 버전의 .classpath와 비교).

나는 이것이 위에서 설명한 componavt-user (Eclipse / Build Path / Order and Export)와 같은 이클립스 메뉴를 통과하는 것과 동일한 결과라고 생각합니다.


0

이 솔루션은 여기에 날 위해 일했습니다. 라이브러리를 libs 폴더로 가져온 다음 build.gradle 파일을 수정 한 다음 gradlew로 정리해야합니다.


0

프로젝트 빌드 경로에서 주문을 변경하고 내 보내면이 오류가 발생하지 않습니다. 그것을 달성하는 다른 방법은 프로젝트 폴더의 .classpath를 사용하는 것입니다.


0

이 시도:-

1 단계

Eclipse에서 pat을 빌드하기 위해 모든 라이브러리 추가 (모든 라이브러리가 라이브러리를 참조하도록 함)

2 단계

R.java 파일을 삭제하고 프로젝트를 다시 빌드하십시오. 걱정하지 마십시오. R.java는 자동으로 재생성됩니다.

진정 :)


0

내가 이해했듯이 Jar를 포함했기 때문에 프로젝트에 오류가 표시되지 않습니다. 그러나 프로젝트를 장치로 "내 보낸"경우 Jar가 사용되지 않습니다. 이 시도

프로젝트-> 속성

자바 빌드 경로 / 주문 및 내보내기

[✔] 당신의 항아리


0

이것은 나에게 매우 자주 발생합니다.

내가 기억할 수있는 마지막 시간은 Eclipse ADT (Google 특별판)를 Android Studio로 전환하고 다시 전환했기 때문에 발생했습니다. 나는 기본적으로 내가 작동하지 않는 stackoverflow에서 찾을 수있는 모든 방법을 시도했다.

결국, ADT를 사용하여 IDE를 원래 Eclipse (Kepler)로 전환하여 앱이 다시 작동하도록했습니다 (NoCalssDeffoundError가 더 이상 없음).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.