NoClassDefFoundError - Eclipse и Android

189

У меня возникла проблема с запуском приложения для Android, которое до добавления второй внешней библиотеки к пути сборки работает нормально. Поскольку я добавил банку scoreninja, теперь я получаю NoClassDefFoundError, когда пытаюсь запустить приложение.

Здесь сообщение:

02-11 21:45:26.154: ERROR/AndroidRuntime(3654): java.lang.NoClassDefFoundError: com.scoreninja.adapter.ScoreNinjaAdapter

Поскольку все скрипты сборки генерируются инструментами Android (?), я не уверен, что еще я могу сделать, кроме очистки и восстановления или перезапуска eclipse (я уже пробовал все три). Кто-нибудь знает, как я могу это исправить?

  • 1
    Как вы добавили файл JAR? Вы добавили, используя путь сборки -> Библиотеки -> Внешние банки ??
  • 1
    Щелкните правой кнопкой мыши проект> Путь сборки> Добавить внешние архивы ... в соответствии с инструкциями здесь: Scoreninja.appspot.com
Показать ещё 3 комментария
Теги:
ant
build

27 ответов

223

У меня возникла эта проблема после обновления ADT.

Я сохранял все мои файлы JAR в папке с именем "lib" и добавлял банки в путь сборки обычным способом Eclipse. Это работало нормально до моего обновления.

После моего обновления я получал NoClassDefFoundError для класса, который я мог отчетливо видеть, был включен в банку (проверяя классы ReferencedLibraries).

Решение заключалось в том, чтобы удалить мои банки из пути сборки и переименовать мою папку "lib" в "libs". Это соглашение ant и похоже, что новый ADT находит и включает библиотеки в файл .apk. Как только я это сделал, все сработало нормально.

  • 1
    Большое спасибо! До вчерашнего обновления ADT у меня не было ни папки lib, ни libs, и все работало нормально. После обновления у всех внешних банок была эта проблема. Они были исправлены благодаря вашему ответу. Я должен объединить ваши с Брайаном, чтобы это сработало.
  • 0
    Спасибо Джон! Я добавлю, что после смены папки на libs мне пришлось перезапустить eclipse, чтобы она заработала.
Показать ещё 7 комментариев
105

Мне не нужно было размещать jar-библиотеку в активах или lib (s), но только галочку для этой банки в поле "Свойства" → "Путь сборки Java" → "Заказ и экспорт" (он был указан ранее, но не выбран)

  • 0
    Спасибо! Я боролся с этой ошибкой в течение долгого времени, и все, что мне нужно было сделать, это установить чертову рамку для банки на экране «Заказ и экспорт». Самое смешное, что мне нужно было сделать это только для того, чтобы он работал на эмуляторе Nook Tablet. Не было проблем на устройствах или других эмуляторах.
  • 5
    Кто-нибудь знает, почему вы должны сделать и то, и другое, добавить библиотеку, а также установить флажок в Порядок и Экспорт? Есть ли причина, по которой я хотел бы добавить внешний JAR, но не включать его в Order and Export?
Показать ещё 7 комментариев
68

Добавляя внешнюю банку в свой путь сборки, вы добавляете банку в свой пакет, но он не будет доступен во время выполнения.

Чтобы банку было доступно во время выполнения, вам необходимо:

  • Поместите банку в папку assets
  • Включите эту копию банки в свой путь сборки
  • Перейдите на вкладку экспорта в том же всплывающем окне
  • Установите флажок напротив недавно добавленной банки
  • 0
    ScoreNinjaAdapter - это чужой код, но я был бы очень удивлен, если бы он содержал такую ошибку, как это обычно используется. Ошибка происходит в какой-то момент в моем собственном коде.
  • 0
    Можете ли вы разместить свой собственный код, где происходит ошибка?
Показать ещё 6 комментариев
50

У меня это было для MapActivity. Сборка в Eclipse получает NoClassDefFound в отладчике.

Забыл добавить библиотеку в манифест, внутри элемента <Application>...</Application>

<uses-library android:name="com.google.android.maps" />
  • 6
    Спасибо тебе за это! У меня была ссылка на библиотеку за пределами <Application> . Это сводило меня с ума!
26

Я изменил порядок включенных проектов (Eclipse/Configure Build Path/Order and Export). Я переместил свои два зависимых проекта в начало списка "Заказ и экспорт". Он решил проблему "NoClassDefFoundError".

Это странно для меня. Я не слышал о важности порядка включенных библиотек и проектов. Android + Eclipse - это весело:)

15

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

Я не мог найти какие-либо решения в Интернете, но ответ на подобную тему заставил меня задуматься и понять, что мне, вероятно, просто нужно было перестроить (или очистить) проект.

В Eclipse перейдите в Project = > Clean. Выберите свой проект, и Eclipse, похоже, исправил его. Для меня это решило проблему.

Надеюсь, что это поможет.

  • 0
    Да, в Eclipse / ADT / dex /, похоже, есть ошибка, которая в принципе пропускает классы в сборке. Он также может пропустить класс Application что приводит к другой ошибке.
13

Я столкнулся с той же проблемой. Причина в том, что библиотека, которую я пыталась использовать, была скомпилирована со стандартным JDK 7.

Я перекомпилировал его с параметрами -source 1.6 -target 1.6, и он работал нормально.

  • 0
    СПАСИБО ВАМ, ФУТБОЛКАМ !!!!!!!!!!!!!!!!!!! Я был разочарован этой проблемой, и вы решили ее! Немного иронично, что даже самый последний Jelly Bean 4.3 SDK (API 18) все еще не может прочитать 1.7 JAR / классы. И что хуже всего, он вообще не жалуется :(
  • 0
    У меня была такая же проблема. Хуже всего то, что я подумал об этом варианте, а затем я изменил свой -source 1.7 на -source 1.5 (чтобы быть уверенным), и проблема не была решена. Но, после прочтения вашего комментария, я попробовал еще раз с 1.6, а затем он работал как шарм.
7

То же самое работало для меня: Свойства → Путь сборки Java → "Заказ и экспорт" Интересно, почему это не делается автоматически? Я думаю, что некоторые настройки отсутствуют. Также это произошло для меня после обновления SDK.

3
Джон О'Коннор прав с этим вопросом. Проблема остается при установке ADT 17 и выше. Нашел эту ссылку для исправления ошибки:

http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17

3

Щелкните правой кнопкой мыши папку вашего проекта, найдите "Свойства" в пути сборки Java и выберите файлы jar, которые вы видите. Это сработало для меня.

2

Все существующие ответы не работают для меня, потому что мой случай немного отличается. Мне потребовалось несколько часов, чтобы заставить его работать. Я использую Eclipse.

Мой проект андроида включает в себя еще один обычный проект java 1.6, для которого нужен сторонний файл jar. Трюк:

  • включить jar в обычный Java-проект для его компиляции (только), не проверять его на вкладке "Заказ и экспорт"
  • также скопируйте этот файл jar в папку "libs" проекта Android, чтобы он был доступен во время выполнения

Надеюсь, что это поможет тем, у кого похожие сценарии, подобные моим.

2

У меня была такая же ошибка с ADT22. Решено, что он проверяет "частные библиотеки Android" в свойствах → путь сборки Java → порядок и экспорт. Если вы используете какие-либо проекты библиотек, то для них тоже нужно сделать.

  • 0
    Это сработало с ADT22 после того, как я очистил проект
  • 0
    Это также сработало для меня. Я включил библиотеку, но забыл проверить ее в «Заказ и экспорт». Спасибо!
2

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

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

1

У меня возникла эта проблема, и это было вызвано не "экспортом" библиотеки. Иск был только потому, что файлы .class для некоторых классов недоступны при упаковке APK. Время компиляции будет отлично работать без экспонирования

В моем случае я использовал класс "CusrsorAdapter" и в разделе "JavaBuildPath- > Order and Export" я не проверял поддержку V4 jar.Once, выбранная проблема исчезла.

Чтобы убедиться, что вы получаете ошибку noClassDefFound из-за вышеуказанной причины, пожалуйста, проверьте свой logacat, вы увидите неизвестную ошибку суперкласса во время выполнения.

1

Иногда это случается из-за того, что вы не включаете jar, в котором у вас есть зависимость, с тегом "uses-libary" в вашем AndroidManifest.xml.

Кроме того, убедитесь, что он должен находиться внутри тега "application".

Привет,

Рави

1

иногда вам нужно взять весь внешний проект как библиотеку, а не только банку:

моя проблема решена путем добавления всего проекта (в моем случае google-play-services_lib) в качестве библиотеки, а не только банку. шаги к нему (из @style answer):

  • File- > New- > Другое
  • Выберите проект Android
  • Выберите "Создать проект из существующего источника"
  • Нажмите кнопку "Обзор..." и перейдите к желаемый проект
  • Готово (теперь проект панели действий в рабочей области)
  • Щелкните правой кнопкой мыши свой проект → Свойства
  • В разделе Android- > Library щелкните Добавить
  • выберите недавно добавленный проект → Ok
0

Кстати, вы достигли пресловутой проблемы с лимитом 64k, вам нужно включить multidex.

Вот как вы это делаете. https://developer.android.com/tools/building/multidex.html

0

Это происходит очень часто для меня.

В прошлый раз, когда это произошло, я вспомнил, что был вызван переключением Eclipse ADT (специальной версии Google) в Android Studio и переходом назад. Я в основном пробовал все методы, которые я могу найти в stackoverflow, который не работал у меня.

В конце концов, я снова получил приложение (не более NoCalssDeffoundError), переключив мою IDE на оригинальный Eclipse (Kepler) с помощью ADT.

0

Как я понял, ваш проект не показывает ошибок, потому что вы включили Jar. Но Jar не будет использоваться, когда ваш проект будет "экспортирован" на устройство. Попробуйте это

Проект → Свойства

Путь и порядок сборки Java

[] Ваша баня

0

Попробуйте следующее: -

Шаг 1

Добавьте все библиотеки для создания pat в Eclipse (это означает, что все библиотеки, на которые ссылаются библиотеки)

Шаг 2

Удалите файл R.java и снова создайте проект. Не беспокойтесь, R.java автоматически воссоздается.

Холод:)

0

Если вы измените свой заказ и экспортируете его в путь сборки проекта, эта ошибка не будет возникать. Другой способ его достижения - через .classpath в папке проекта.

  • 1
    Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его постом - вы всегда можете комментировать свои собственные посты, и, когда у вас будет достаточно репутации, вы сможете комментировать любые посты .
  • 0
    Хорошо, спасибо за предложение.
0

Решение здесь работало для меня. Это вопрос импорта библиотеки в папку libs, а затем изменения файла build.gradle, а затем очистки с помощью gradlew.

0

Если вы предпочитаете знать, какие файлы обходные пути связаны с тем, что я нашел. Просто измените файл .classpath на

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="src" path="gen"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
    <classpathentry kind="output" path="bin/classes"/>
</classpath>

Замените файл .classpath во всех проектах библиотеки и в главном проекте Android. Файл .classpath находится в корневой папке проекта eclipse. Не забудьте добавить свои собственные записи в classpath, если у вас есть (сравните с текущей версией .classpath).

Я считаю, что это тот же результат, что и в меню eclipse, описанном выше как компонентный пользователь (Eclipse/Configure Build Path/Order and Export).

0

Я провел два дня, пытаясь решить эту проблему после обновления ADT. наконец, мне посчастливилось получить этот пост здесь:

https://code.google.com/p/android/issues/detail?id=55304

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

0

У меня возникла одна и та же проблема... Чтобы исправить это, я просто удалил своих личных подписчиков Android в "путь сборки" и нажал ok... и когда я открыл op "путь сборки", снова Eclipse добавила их сам снова, а затем он работал у меня;)...

0

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

0

Я пробовал разные вещи, и причиной ошибки в моем случае был конфликт между maps.jar и Google Api в Java Build Path- > Libraries. Итак, когда я удалил maps.jar, он работал нормально.

Привет,

Вахиб

Ещё вопросы

Сообщество Overcoder
Наверх
Меню