Добавление библиотеки / JAR в проект Eclipse Android

130

Это вопрос из двух частей о добавлении сторонней библиотеки (JAR) в проект Android в Eclipse.

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

Ошибка синтаксического анализа XML: несвязанный префикс

потому что я пытаюсь использовать класс из этого JAR (и мне нужно каким-то образом определить префикс). В чем дело?

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

Вызвано: java.lang.ClassNotFoundException: com.github.droidfu.widgets.WebImageView ...

Почему, когда я не получаю ошибок компиляции или компоновщика в Eclipse, возникает ли эта проблема на эмуляторе?

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

Расс Бейтман
источник

Ответы:

316

Теперь о проблеме с отсутствующим классом.

Я разработчик Eclipse Java EE и на протяжении многих лет имею привычку добавлять сторонние библиотеки с помощью механизма «Пользовательская библиотека» в Build Path. Конечно, есть как минимум 3 способа добавить стороннюю библиотеку, и, по моему скромному мнению, я использую самый элегантный.

Однако это не сработает для Android, чья «JVM» Dalvik не может обрабатывать обычный Java-скомпилированный класс, но должна преобразовать его в специальный формат. Этого не происходит, когда вы добавляете библиотеку так, как я это делаю.

Вместо этого следуйте (широко доступным) инструкциям по импорту сторонней библиотеки, а затем добавляйте ее с помощью пути сборки (что делает его известным Eclipse для целей компиляции). Вот пошаговая инструкция:

  1. Загрузите библиотеку в свою систему разработки.
  2. Создайте новую папку libs в своем проекте Eclipse / Android.
  3. Щелкните правой кнопкой мыши библиотеки и выберите «Импорт» -> «Общие» -> «Файловая система», затем «Далее» и «Обзор файловой системы», чтобы найти родительский каталог библиотеки (то есть, куда вы ее загрузили).
  4. Щелкните OK, затем щелкните имя каталога (не флажок) на левой панели, а затем проверьте соответствующий JAR на правой панели. Это помещает библиотеку в ваш проект (физически).
  5. Щелкните правой кнопкой мыши на вашем проекте, выберите Путь сборки -> Настроить Построить путь, а затем перейдите на вкладку Библиотеки, затем добавить JARs ..., перейдите в ваш новый JAR в ЛИЭС каталоге и добавить его. (Это, кстати, момент, когда ваш новый JAR конвертируется для использования на Android.)

НОТА

Шаг 5 может не понадобиться, если библиотека уже включена в ваш путь сборки. Просто убедитесь, что он существует, прежде чем добавлять его.

То, что вы здесь сделали, позволяет достичь двух целей:

  1. Включает JAR-файл, преобразованный в Dalvik, в ваш проект Android.
  2. Делает определения Java доступными для Eclipse, чтобы найти сторонние классы при разработке (то есть компиляции) исходного кода вашего проекта.
Расс Бейтман
источник
Расс, тебе, наверное, стоит начать другой отдельный вопрос. Этот «ответ» здесь выглядит странно.
Поль Грегуар
3
Итак, я немного переписал часть вопроса. Я устоял перед соблазном сделать простое (то, что вы предлагаете здесь), потому что я действительно думаю, что обе проблемы возникают из-за попытки добавить стороннюю библиотеку, и я держу пари, что любой, у кого есть вторая проблема, вероятно, имел первый тоже. Спасибо.
Расс Бейтман
Хотелось бы, чтобы в официальных документах для Android было что-то более явное (еще не наткнулся на это) и другие ответы на других форумах, но никогда не упускали из виду проблему. Обратите внимание, что на BlackBerry эта же проблема является огромным кошмаром, и никто не дает достоверной информации о том, как ее решить - не уверен, что я буду там делать.
Расс Бейтман
2
Привет, @RussBateman, я попробовал шаги, которые вы упомянули выше, и смог успешно включить библиотеку jar в свой проект Android, поэтому классы библиотеки были доступны для моего проекта во время компиляции. Но когда я запускаю проект, я получаю сообщение об ошибке в моей консоли: «Преобразование в формат Dalvik завершилось ошибкой 1» .. и мой проект не запускается!
Zeba
При определенных обстоятельствах это не работает ... Я точно не помню, что я сделал, удалил папку libs, прочитал ее ... теперь сделал все, что вы сказали, добавил библиотеки, импортировал jar, добавил в путь сборки ... . ошибки компилятора исчезли, но все равно возникает исключение времени выполнения, что класс не найден :(
Ixx
20

Убедитесь, что ваши сторонние jar-файлы находятся в папке «libs» вашего проекта, и они будут помещены в .apk при упаковке приложения. Вы можете увидеть ошибки времени выполнения на устройстве, если что-то в банке не поддерживается, но в остальном я добился большого успеха в этом.

Пол Грегуар
источник
1
Все дело в опыте, у меня была такая же проблема раньше :)
Пол Грегуар
Спасибо, сэр, но отстойно видеть, что папке libs нужна копия внешних файлов Jar, которые у нас уже есть в репозитории Maven или где-то еще.
asgs
1
К сожалению, это больше не работает автоматически, вы также должны указать eclipse, чтобы он включал библиотеки в файлы пакетов.
Нил Таунсенд
Когда это изменилось? Это огромное изменение того, к чему мы все привыкли.
Поль Грегуар
5

Настройка библиотечного проекта

Проект библиотеки - это стандартный проект Android, поэтому вы можете создать новый так же, как и новый проект приложения.

Когда вы создаете проект библиотеки, вы можете выбрать любое имя приложения, пакет и установить другие поля по мере необходимости, как показано на рисунке 1.

Затем установите свойства проекта, чтобы указать, что это проект библиотеки:

В проводнике пакетов щелкните правой кнопкой мыши проект библиотеки и выберите «Свойства». В окне «Свойства» выберите группу свойств «Android» слева и найдите свойства библиотеки справа. Установите флажок «Библиотека» и нажмите «Применить». Щелкните OK, чтобы закрыть окно свойств. Новый проект теперь отмечен как проект библиотеки. Вы можете начать перемещать в него исходный код и ресурсы, как описано в разделах ниже.

Коке
источник
4

Если вы используете ADT версии 22, вам необходимо проверить зависимости Android и частные библиотеки Android на вкладке заказа и экспорта в пути сборки проекта.

ajaykoppisetty
источник
2

Во-первых, проблема отсутствующей приставки.

Если вы используете что-то в своем файле макета, которое исходит от третьей стороны, вам может потребоваться также использовать его префикс, что-то вроде «droidfu:», которое встречается в нескольких местах в конструкции XML ниже:

<com.github.droidfu.widgets.WebImageView android:id="@+id/webimage"
          android:layout_width="75dip"
          android:layout_height="75dip"
          android:background="#CCC"
          droidfu:autoLoad="true"
          droidfu:imageUrl="http://www.android.com/images/opensourceprojec.gif"
          droidfu:progressDrawable="..."
          />

Это происходит из JAR, но вам также необходимо добавить новый "xmlns: droidfu"

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:droidfu="http://github.com/droidfu/schema"
      ...>

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

Расс Бейтман
источник
1

Ошибка синтаксического анализа XML: несвязанный префикс

Ресурс '/ playteddy / res' не существует.

Я получил две указанные выше ошибки и, наконец, решил ее.

Щелкните правой кнопкой мыши свой проект -> свойства -> путь сборки java -> googleadmobadsdk (выберите и поместите его в начало), затем запустите и проблема решена. Это решено моей ошибкой во время выполнения.

Суджан
источник
0

Поместите исходный код в папку за пределами вашего рабочего пространства. Щелкните правой кнопкой мыши в проводнике проекта и выберите «Импорт ...»

Импортируйте проект в свою рабочую область как проект Android. Попробуйте собрать его и убедитесь, что он помечен как проект библиотеки. Также убедитесь, что он построен с поддержкой Google API, в противном случае вы получите ошибки компиляции.

Затем щелкните правой кнопкой мыши свой основной проект в проводнике проектов. Выберите свойства, затем слева выберите Android. В разделе библиотеки ниже нажмите «Добавить».

Библиотека mapview-balons теперь должна быть доступна для добавления в ваш проект.

Leander
источник
0

Перейдите к пути сборки в eclipse, затем щелкните порядок и экспорт, затем проверьте библиотеку / jar, а затем нажмите кнопку вверх, чтобы переместить его в верхнюю часть списка и сначала скомпилировать.

Сэм Адамш
источник