ADT 22로 업그레이드 한 후 라이브러리가 더 이상 APK에 추가되지 않습니다


238

여러 라이브러리 프로젝트를 참조하는 다소 큰 Android 앱 프로젝트가 있습니다. Eclipse ADT 플러그인을 최신 버전 (v22)으로 업그레이드 할 때까지 모든 것이 정상이었습니다. 물론 SDK도 업그레이드했습니다. 일식에 컴파일 오류가 표시되지 않지만 전화로 프로젝트를 실행하면 NoClassDefFoundError가 발생합니다.

java.lang.NoClassDefFoundError: org.acra.ACRA
....

arca 라이브러리는 참조 된 라이브러리 프로젝트 중 하나 (libs 폴더에 있음)에 포함되어 있으며 패키지 탐색기의 "Android Private Libraries"에서 컴파일 오류가 없음을 알 수 있습니다. 이 프로젝트는 ADT를 업그레이드하지 않은 다른 모든 컴퓨터에서 정상적으로 실행됩니다.

나는 이미 다음을 포함하여 많은 것들을 시도했다.

  • 안드로이드 SDK를 다시 설치
  • 새로운 ADT 번들 다운로드
  • 내 코드를 모두 삭제하고 git에서 다시 가져옵니다.
  • 해당 라이브러리를 앱 프로젝트에 복사
  • 이 라이브러리를 사용하는 코드를 주석 처리하십시오-다음 라이브러리에 대해 동일한 오류가 발생합니다.

모든 성공없이, 그래서 나는 정말 절망적입니다.

누군가 나에게 그 문제를 해결하는 방법에 대한 힌트를 줄 수 있다면 정말 기쁠 것입니다.

답변:


337

그의 adt-dev 게시물 에서 보스턴 거리 인용 :

업그레이드 할 때 새로운 'Android 비공개 라이브러리'의 '주문 및 내보내기'가 항상 확인되는 것은 아닙니다. 그리고 android-support-v4.jar은 이제이 'Android Private Libraries'섹션에 있습니다.

이 문제를 해결하려면 '주문 및 내보내기'로 이동하여 'Android 개인 라이브러리'를 확인하십시오. 그런 다음 새로 고침 / 청소 / 다시 작성하십시오.

라이브러리 프로젝트에 대해이 '수정'을 수행 한 후에는 해당 '수정'이 즉시 표시되지 않을 수 있으므로 종속 프로젝트를 닫았다가 다시 열어야 할 수도 있습니다.

이 기회를 줘서 운이 좋으면 문제를 해결할 것입니다.

여기에 이미지 설명을 입력하십시오


32
CommonsWare는 항상 최초의 개척자 중 하나입니다. 정말 감사합니다! :)
Paul Wein 2016 년

1
모든 새로운 ADT 버전은 새로운 놀라움;) 새로운 빌드 시스템이 더 나아지기를 바랍니다. 감사합니다 CommonsWare
lujop

3
이클립스와 라이브러리를 사용하는 모든 개발자가 모든 라이브러리 프로젝트에 들어가서 "Android Private Libraries"를 Exported로 표시하는 것이 나에게만 맞습니까? 이로 인해 Google이이 새로운 '기능'을 처음에 추가하려는 의도를 모두 잘못 알고 있다고 생각합니다. 라이브러리를 Exported로 표시하지 않아야 할 수도 있습니다. 어쩌면 누락 된 jar 파일을 "libs"폴더에 직접 추가해야 할 수도 있습니다. 예 : 이렇게하면 내 라이브러리 프로젝트에서 최신 android-support-v4.jar [v13]을 사용할 수 있지만 ABS는 내부적으로 android-support-v4-12.jar을 사용합니다.
swooby

2
@swooby : "이클립스와 라이브러리를 사용하는 모든 개발자가 모든 라이브러리 프로젝트에 들어가서"Android Private Libraries "를 Exported로 표시하도록하는 것이 나에게만 해당됩니까, 아니면 잘못된 것입니까?" -도구를 작성한 사람들이 인정하는 버그 인 한 "잘못된"것입니다. "아마도 누락 된 jar 파일을"libs "폴더에 직접 추가해야 할 것입니다."-지난 1 년 동안의 변경과 마찬가지로 그렇게해야합니다. 그러나 여전히이 확인란을 선택해야합니다.
CommonsWare

9
@ 필립 : AFAIK, 모든 프로젝트입니다. 더 정확하게 말하면, 모든 프로젝트가에 있다고 생각 libs/하지만 libs/몇 개월 후에 물건을 추가 하고 잊어 버릴 경우를 대비하여 모두 확인할 수도 있습니다 .
CommonsWare

10

Android 개인 라이브러리를 확인하는 것만으로는 충분하지 않았 으며 Android SDK 관리자에 Android SDK 빌드 도구 를 설치해야했습니다 .


이것이 필요하다는 것을 확인할 수는 없지만 설치하기 전에 SimonSays에서 발생한 오류를 극복하지 못했습니다. 위에서 설명한대로 내보내기 확인란의 적절한 설정 만 필요할 수 있지만 빌드 도구를 설치하는 동안 언급했음을 느꼈습니다.
strangeluck

이것은 나를 위해 작동합니다. 이클립스 환경 설정 만 변경하는 것만으로는 충분하지 않습니다 .Android SDK 관리자에서 설치된 빌드 도구를 확인해야 할 수도 있습니다.
Stevens

4

나는 또한 같은 문제를 가지고 내가 adt있었다 22.0.1. 그리고 위의 해결책 중 어느 것도 효과가 없었습니다. 또한 외부 라이브러리 프로젝트를 작업 프로젝트에 추가 할 때 항상 gen작업 프로젝트 의 폴더를 확인하고 R외부 라이브러리 프로젝트가있는 경우 (패키지 이름과 함께) 외부 라이브러리 프로젝트 만 내 보냅니다. 그리고 내 gen폴더에는 packagename외부 라이브러리가 표시 되지 않았습니다 .

그래서 project.properties파일을 확인했는데 외부 라이브러리 링크가 없습니다 android.library.reference.1=. 그래서 비록 내가 추가했지만 외부 라이브러리 참조를 수동으로 추가했습니다 project->properties->Java Build Path->Projects->Add. 그래서 수동으로 편집하면 project.properties모든 작업이 완료되었습니다.

여기에 이미지 설명을 입력하십시오


1
나는 세트에 GUI 장소 이후 일이 생각 android.library.reference.n입니다 하지 java build path 않고, project-> properties-> Android-> Library-> Add.... 잡았다 .
n611x007

4

비슷한 문제가 발생하여 약 3 시간을 보냈지 만 여기에 제안 된 결정 중 도움이되지 못했습니다 ... 마지막으로 문제의 원인을 찾았습니다. 내 프로젝트 파일 및 project.properties가 읽기 전용이었습니다. Eclipse에서 GUI에서 수행 할 때 라이브러리 종속성의 변경 사항을 자동으로 무시합니다.


3

나는 같은 문제가 있었다. 일식 프로젝트 때문이었습니다. 이 문제를 해결하기 위해 Eclipse에서 새 프로젝트를 만들고 기존 프로젝트 클래스와 리소스를 복사 한 다음 Eclipse를 다시 시작하고 사용자 정의 포함을 추가했습니다.


1
너무 많은 번거 로움, CommonsWare의 솔루션이 저에게 도움이 되었기 때문에 귀하에게도 도움이되었을 것입니다.
Bilthon 2016 년

2

나는 비슷한 문제가 있었고 내 대답은 CommonsWare와 약간 다릅니다. 스크린 샷은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

내 빌드에서 라이브러리를 다시 확인한 후 다시 작동하기 시작했습니다.


2
이 솔루션에주의를 기울일 것입니다. 레거시 이유로 Android Dependencies대체되고 Android Private Libraries여전히있을 수 있습니다. 언제든지 제거 할 수 있다고 생각합니다.
SimonSays

0

나도 같은 문제가 있었다

i) referecend librairies로 gson lib를 추가
ii) Java 빌드 경로에서 확인 http://i.stack.imgur.com/Gldhs.png

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