Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

  • Перейдите в раздел "Свойства проекта" → "Путь сборки Java" → вкладка "Заказ и экспорт".
  • Выберите опцию "Частные библиотеки Android".

Android Private Libraries option

Ответ 4

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

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

Решение заключалось в том, чтобы скопировать внешний файл jar новой версии в каталог директорий проекта, на который ссылается.

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

Ответ 5

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

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

Ответ 6

То, как я решил это, было: Щелкните правой кнопкой мыши на проекте и выберите путь сборки. Выберите путь сборки сборки в появившихся выделениях. После этого посмотрите, находятся ли ваши библиотеки в папке библиотек, а затем выберите вкладку "Заказ" и "Экспорт" и там выберите все ваши файлы jar. Затем выберите ok и запустите проект.

Ответ 7

Если вы используете Eclipse с Maven IDE (m2e), перейдите в "Java Build Path", затем "Order and Export" и, наконец, проверьте элемент "Maven Dependencies" и переместите его в BOTTOM списка. Вы должны сделать то же самое с ссылками на проекты в той же рабочей области. Каждый раз, когда я настраиваю проект на новом компьютере, который происходит.