Android Eclipse NoClassDefFoundError для внешних файлов.jar

Я натолкнулся на странную ошибку. У меня есть проект Android, который использует внешние библиотеки, в частности:

  • android-support-v4.jar (для поддержки фрагментов в Android 1.6)
  • GoogleAdMobAdsSdk-4.3.1.jar (для рекламы)

Проект работал нормально до тех пор, пока я не обновил некоторые аспекты плагина (не могу вспомнить специфику, так как я не уделял этому слишком много внимания) и после этого всякий раз, когда я пытался использовать какой-либо класс из вышеуказанных файлов.jar (или любой из его подклассов, даже определенных мной), я бы получил java.lang.NoClassDefFoundError. Я не мог найти ответ после долгих поисков, поэтому я действительно в замешательстве.

Я полагаю, что эта проблема связана с тем, как настроена моя IDE, и имеет мало общего с реальным кодом, поэтому я не буду публиковать ее, если только это не будет абсолютно необходимо.

7 ответов

Решение

Вы должны прочитать это - Работа с зависимостями в проектах Android.

Эта ссылка также полезна - ClassDefNotFoundError с ADT 17

В основном, создайте папку с именем libs и поместите все свои jar файлы внутри. Последнее обновление автоматически позаботится обо всем остальном за вас. Вам больше не нужно редактировать свой путь.

Android до сих пор не поддерживает Java1.7. Банки, созданные с уровнем соответствия 1.7, нельзя использовать в приложениях Android. Перестройте свой Java-проект с уровнем соответствия 5.0 или 6.0 перед экспортом файла jar.

Я нашел это сообщение через Google, и ответы выше не решили мою проблему. Надеюсь, что я скажу, будет полезно для других.

Если ты видишь NoClassDefFoundError после обновления до ADT 22 попробуйте это в Eclipse:

  • Перейдите в Свойства проектаПуть сборки JavaПорядок и вкладка Экспорт.
  • Установите флажок Частные библиотеки Android.

Опция 'Частные библиотеки Android'

Также предупреждение для тех, кто обновился до r17 со многими зависимостями. У меня был другой ссылочный проект на моем пути сборки, и он все еще не работал после следования ВСЕМ инструкциям по этой проблеме r17 в Интернете.

Через час выяснилось, что в моем проекте, на который есть ссылки, используется более старая версия внешнего Jar, чем в моем основном проекте. При попытке компилировать основной проект Eclipse отказывался из-за разницы версий jar, и я никогда не замечал предупреждающее сообщение в консоли.

Решением было скопировать внешний файл jar новой версии в каталог libs указанного проекта.

Ух ты - такая убийца производительности.....

Если вы используете Eclipse с Maven IDE (m2e), перейдите в "Путь сборки Java", затем "Заказ и экспорт" и, наконец, отметьте пункт "Зависимости Maven" и опустите его до ДНА списка. Вы должны сделать то же самое со ссылками на проект в той же рабочей области. Каждый раз, когда я настраиваю проект на новом компьютере, это происходит.

Я решил это следующим образом: щелкнув правой кнопкой мыши по проекту и выбрав путь сборки. Выберите "Настроить путь сборки" в появившихся вариантах. После этого посмотрите, есть ли ваши библиотеки в папке с библиотеками, затем выберите вкладку "Порядок и экспорт" и там выберите все ваши файлы JAR. Затем выберите ОК и запустите свой проект.

Я тоже столкнулся с этой ошибкой сегодня из-за обновления до Android SDK, r17. Ссылки, на которые указал @aneal, не обсуждаются, как обращаться с внешними библиотеками времени выполнения (например, импортированными под собственным заголовком, а не импортированной пользовательской библиотекой).

Самый простой способ решить эту проблему - изменить порядок сборки в пути сборки. Просто щелкните правой кнопкой мыши на вашем проекте и выберите Свойства. Отсюда выберите Java Build Path. В верхней части экрана выберите порядок вкладок , экспортируйте и переместите GoogleAdMobAdsSdk-4.3.1.jar над Android X (заменив x на версию, которую вы используете). Затем очистите ваш проект и запустите его. Вам должно быть хорошо идти!

Другие вопросы по тегам