У меня довольно странная проблема с некоторыми проектами 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?