2013-08-13 2 views
0

Я пытаюсь запустить проект Android в Eclipse, который зависит от другого обычного Java-проекта, который, в свою очередь, включает JAR в свой путь сборки. Если я запустил проект Android, я получаю NoClassDefFoundError, когда исходный код из обычного Java-проекта использует код из JAR. Я пробовал решение поместить JAR в папку libs и добавить его в мой путь сборки (и даже переместить его вверх), однако это, в свою очередь, вызывает ошибку Error generating final archive: Found duplicate file for APK: libs/gdx.jar. Визуально:Android NoClassDefFoundError vs. Ошибка создания окончательного архива: найденный дубликат файла для APK:

[JAR not in Android path]: Android Project -> Java Project -> Jar -> NoClassDefFoundError 
[JAR in Android path]:  Android Project -> Java Project -> JAR -> Duplicate file for APK Error 

В частности, это проект LibGDX. Я сделал JAR, который инкапсулирует некоторые общие функции LibGDX, которые я буду использовать повторно. Когда я запускаю проект своего рабочего стола (без изменений в его пути сборки), он работает отлично, но проект Android выходит из строя. Как правильно включить этот JAR в свой Android-проект?

+0

Вы используете Eclipse? –

ответ

2

я обнаружил источник проблемы:

  1. Консоль зачитывал bad class file magic (CAFEBABE), когда она попала в включенную JAR/проект при компиляции с Android. Это вызвало не должны быть включены в сборку
  2. Когда приложение пошел использовать ссылочный файл JAR, он не мог найти его, однако программа Desktop не производит тот же вывод ошибок и может использовать JAR ,
  3. Проблема заключалась в том, что я переместил код в другой Java-проект, который по умолчанию использовался для использования Java 7, а Android поддерживает только Java 6, а исходный проект, из которого он был перенесен, был настроен на использование Java 6 (в соответствии с настройкой мастера установки LibGDX). Это объясняет, почему проект работал на моем рабочем столе (который может выполнять Java 7), но не на Android.
  4. Когда я перекомпилировал JAR с Java 6, Android смог разрешить JAR и включить его в проект.
1

Убедитесь, что JAR отмечен как «экспортированный»: щелкните правой кнопкой мыши по проекту -> Свойства -> путь сборки Java -> вкладка «Заказ и экспорт» -> Убедитесь, что запись JAR (или «частные библиотеки Android») проверено.

У меня есть аналогичная настройка (с проектом, содержащим зависимый от Libgdx «общий» код, который я разделяю среди моих проектов Libgdx). Однако вместо создания JAR я просто включаю проект напрямую. (Java Build Path -> Project tab -> Add ...). Я должен был включить мой CommonProject явно во все проекты Libgdx (общий, рабочий стол, android и т. Д.), Он не «наследовал» из общего проекта Libgdx в андроид. Возможно, вам придется сделать что-то подобное с вашим JAR-файлом.

+0

Да, он отмечен как экспортированный. Проблема сохраняется. Я попробую вручную связать все проекты, подобные этому. – GraphicsMuncher

+0

Я включил проект в путь сборки, проверил его, переместил его на верх, и проблема все еще там. – GraphicsMuncher

+0

@ GraphicsMuncher не пытается экспортировать зависимости от android и частные личные библиотеки Android –

Смежные вопросы