У меня довольно странная проблема с некоторыми проектами Android и Eclipse.У меня есть несколько проектов Android, в которых используется большая часть одного и того же кода, и поэтому я перенес большую часть кода в проект библиотеки Android.В течение долгого времени это работало достаточно хорошо для трех приложений.Сегодня я хотел использовать библиотеку и для четвертого приложения, и столкнулся с проблемой.В основном, ситуация выглядит следующим образом:
- Проект библиотеки: содержит набор действий, а также некоторые служебные классы
- Новый проект: создает одно из действий из проекта библиотеки вопределенная ситуация.
Все это должно быть тривиальным делом, я даже сделал то же самое в трех других приложениях с точно такой же активностью из того же библиотечного проекта.В новом проекте я ссылался на проект библиотеки в свойствах проекта и добавил действие из проекта библиотеки в AndroidManifest.xml.Eclipse теперь распознает это и позволяет мне ссылаться на активность.Все хорошо.
Приложение работает нормально, пока я не выполню действие, которое запускает действие из проекта библиотеки.Приложение закрывается, и 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)
Именно здесь начинается самое интересное.Я знаю , что проект библиотеки связан с .apk, так как у меня есть некоторый служебный код из этого проекта.Но при компиляции этого точного проекта из Ant с помощью команд ant debug
, а затем ant installd
приложения работают нормально, включая запуск действия.Итак, точно такая же настройка проекта работает отлично с Ant, но не с Eclipse.
Я попробовал хитрости, которые я нашел с помощью googling, такие как очистка всех проектов, удаление .project и .classpath для конкретных проектов.и восстанавливать их.Я также удостоверился, что мой файл манифеста является правильным, сравнивая его с файлом манифеста из рабочих проектов.Независимо от того, что я делаю, я снова сталкиваюсь с этой проблемой.Поскольку он компилируется и прекрасно работает с Ant, мне кажется, что в самих проектах нет ничего плохого, но мне действительно нужно иметь возможность компилировать его и через Eclipse.
EDIT: Я только что декомпилировал classes.dex в apk, созданном Eclipse с помощью инструмента dexdump, и смог подтвердить, что класс связан с apk.Я нашел класс с правильным дескриптором класса и полями экземпляра.С другой стороны, я также декомпилировал версию, сгенерированную Ant, и получил довольно много различий.Слишком много, чтобы повторить здесь.Предполагается, что сгенерированный файл будет одинаковым при использовании Ant и Eclipse?