java.lang.NoClassDefFoundError в Eclipse, но не с Ant - PullRequest
3 голосов
/ 12 декабря 2011

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

Ответы [ 3 ]

2 голосов
/ 28 марта 2012

Я только что столкнулся с этой же проблемой.В моем случае он был правильно настроен для пути сборки Java, но я забыл добавить библиотеку.Перейдите в Свойства -> Android, затем нажмите «Добавить ...» в разделе «Библиотека», затем добавьте проект библиотеки.После этого он работал как ожидалось.

0 голосов
/ 24 января 2012

Я решил включить jar в buildpath финального проекта. Путь к сборке библиотеки явно недостаточен.

Это отстой, но, по крайней мере, работает.

0 голосов
/ 12 декабря 2011

Иногда плагин Android не очень хорошо генерирует ресурсы, которые вызывают такие проблемы.Попробуйте выполнить следующую простую процедуру:

  1. Измените некоторый идентификатор в одном из XML-макета и сохраните XML-файл (подойдет любой макет в проекте).
  2. После того, как проект скомпилированплагин измените id обратно и сохраните.

Если это проблема, то она должна решить ее после компиляции проекта.

...