일부 Android 프로젝트 및 Eclipse에는 이상한 문제가 있습니다. 나는 모두 동일한 코드를 많이 사용하는 수많은 Android 프로젝트를 보유하고 있으므로 많은 코드를 Android 라이브러리 프로젝트로 옮겼습니다. 이것은 오랜 시간 동안 세 가지 응용 프로그램에서 잘 작동했습니다. 오늘 저는 네 번째 앱을 위해 라이브러리를 사용하고 싶었고 문제가 발생했습니다.Eclipse에서는 java.lang.NoClassDefFoundError가 있지만, Ant에서는 그렇지 않습니다.
- 라이브러리 프로젝트 : 기본적으로, 상황은 다음과 특정 상황에서 라이브러리 프로젝트에서 활동 중 하나 인스턴스화하는 일련의 활동뿐만 아니라
- 새로운 프로젝트가 일부 유틸리티 클래스가 포함되어 있습니다.
이것은 모두 사소한 것이어야합니다. 정확히 같은 라이브러리 프로젝트에서 정확히 동일한 활동을하는 세 가지 다른 응용 프로그램에서도 똑같은 작업을 수행했습니다. 새 프로젝트에서 프로젝트 속성에서 라이브러리 프로젝트를 참조하고 라이브러리 프로젝트의 활동을 AndroidManifest.xml에 추가했습니다. 이클립스는 이것을 인식하고,이 활동을 참조하게한다. 모든 좋은.
라이브러리 프로젝트에서 활동을 시작하는 작업을 실행할 때까지 응용 프로그램이 제대로 실행됩니다. 응용 프로그램이 종료되고 logcat이 다음과 같이 알려줍니다.
FATAL EXCEPTION: main
java.lang.NoClassDefFoundError: no.company.application.base.SomeDetailActivity
at no.company.someotherapplication.SomeListActivity$4.onClick(SomeListActivity.java:466)
at android.view.View.performClick(View.java:2538)
at android.view.View$PerformClick.run(View.java:9152)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3691)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)
여기가 재미입니다. I 을 알고 있습니다.이 프로젝트의 유틸리티 코드가 있으므로 라이브러리 프로젝트에 .apk가 번들로 제공됩니다. 그러나 명령문 ant debug
을 사용하고 나서 ant installd
을 사용하여이 정확한 프로젝트를 Ant에서 컴파일 할 때, 액티비티 시작을 포함한 애플리케이션은 정상적으로 실행됩니다. 따라서 정확히 동일한 프로젝트 설정이 Ant에서는 제대로 실행되지만 Eclipse에서는 제대로 실행되지 않습니다.
나는 모든 프로젝트를 청소하고, 특정 프로젝트를 위해 .project와 .classpath를 삭제하고 재생성하는 것과 같은 내가 찾은 트릭을 시도했다. 또한 작업 목록의 매니페스트 파일과 비교하여 매니페스트 파일이 올바른지 확인했습니다. 내가 뭘하든, 나는이 문제로 다시 끝납니다. Ant로 컴파일되고 실행되면서, 프로젝트 자체에는 아무런 문제가 없지만 Eclipse를 통해 컴파일 할 수 있어야합니다.
EDIT : dexdump 도구를 사용하여 Eclipse에서 만든 apk에서 classes.dex를 디 컴파일하고 apk와 함께 번들로 제공되는지 확인할 수있었습니다. 올바른 클래스 설명자 및 인스턴스 필드가있는 클래스를 찾았습니다. 반면에, 나는 또한 앤트에 의해 생성 된 버전을 디 컴파일했고 꽤 다른 점이있다. 너무 많이 반복해야합니다. Ant와 Eclipse를 사용할 때 생성 된 파일이 동일해야합니까?
라이브러리 프로젝트에서 ID 하나를 변경했으며 라이브러리 프로젝트를 사용하는 프로젝트에서 ID 하나를 변경했지만 행운은 없습니다. 정확한 동일한 메시지와 함께 정확히 같은 줄에서 응용 프로그램이 충돌합니다. – Bendik