NoClassDefFoundError on external library project for Android
Ошибка NoClassDefFoundError во внешнем проекте библиотеки для Android
Я использую eclipse для разработки Google Android.
Я создал проект библиотеки ([x] Is Library в настройках Android), который включает внешний jar-файл (библиотеки со ссылками). На этот проект библиотеки есть ссылки в другом проекте (фактическом проекте, который будет использовать проект библиотеки). Это делается путем добавления проекта в настройках Android.
исходный код компилируется, но если я хочу выполнить его на устройстве, я получаю NoClassDefFoundError для класса, который находится внутри jar-файла, включенного в проект библиотеки.
Редактировать: jar-файл добавлен к экспортированным записям ([x] my.jar на Order and Export вкладке проекта библиотеки)
Вы можете разработать проект библиотеки, который сам включает библиотеку JAR, однако вам необходимо вручную отредактировать путь сборки зависимого проекта приложения и добавить путь к файлу JAR
Библиотека jar должна быть добавлена вручную в путь сборки зависимого проекта приложения, а не только в сам путь сборки проекта библиотеки.
Обновление от SDK r17:
Теперь ADT автоматически обрабатывает это, ознакомьтесь с новой функцией в выпуске ADT 17.0.0 здесь:
Добавлена функция автоматической настройки зависимостей JAR. Любые файлы .jar в папке / libs добавляются в конфигурацию сборки (аналогично тому, как работает система сборки Ant). Кроме того, файлы .jar, необходимые для библиотечных проектов, также автоматически добавляются в проекты, которые зависят от этих библиотечных проектов. (дополнительная информация)
Ответ 2
Для тех, кто следовал инструкциям (даже проверял проекты в разделе "Порядок и экспорт") и у кого все еще есть java.lang.Исключение ClassNotFoundException в API 17 последним шагом является проверка того, что ваш компилятор не работает с Java 1.7. Если значение 1.7, то вам следует изменить его на 1.6 для всех ваших проектов. После этого он попросит перестроить все проекты и успешно запустится на моем телефоне :)
Чтобы изменить версию компиляции java в eclipse, это находится в: Свойства проекта> Компилятор Java> Уровень соответствия компилятора: 1.6
Ответ 3
Перейти к project properties -> build path-> libraies
Если вы видите свои файлы jar таким образом
snmp4j.jar - e:\software\jars
Возможно, это ваша проблема
Добавьте папку libs в свой проект и скопируйте файл jar в эту папку. Щелкните правой кнопкой мыши файл jar и перейдите build path -> add to build path. Затем вы можете увидеть свой jar как
snmp4j.jar - project_name/libs
У меня это сработало.
Ответ 4
У меня было два проекта, использующих одну и ту же библиотеку: один рабочий, с другим произошел сбойjava.lang.NoClassDefFoundError. После того, как мне больше ничего не помогло, я заглянул в файл project.properties в корневом каталоге моего проекта. В рабочем проекте была строка android.library.reference (последняя строка ниже), в аварийном проекте ее не было:
Я вручную добавил строку, и она начала работать! (Да, я пробовал оба (проекта) свойства - путь сборки java - проекты и свойства (проекта) - путь сборки java - порядок и экспорт - ничего не помогло.)
PS Кстати, в "свойствах проекта" также есть вкладка "ссылки на проект". Понятия не имею, сработает ли это.