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

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

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

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

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

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

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

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

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


person Russ Bateman    schedule 04.09.2010    source источник


Ответы (8)


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

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

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

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

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

ПРИМЕЧАНИЕ

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

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

  1. Включает преобразованный Dalvik JAR в ваш проект Android.
  2. Делает определения Java доступными для Eclipse для поиска сторонних классов при разработке (то есть компиляции) исходного кода вашего проекта.
person Russ Bateman    schedule 04.09.2010
comment
Расс, тебе, наверное, стоит задать другой отдельный вопрос. Этот ответ выглядит странным, сидя здесь. - person Paul Gregoire; 04.09.2010
comment
Итак, я немного переписал часть вопроса. Я устоял перед соблазном сделать простое (то, что вы предлагаете здесь), потому что я действительно думаю, что обе проблемы возникают из-за попытки добавить стороннюю библиотеку, и я держу пари, что любой, у кого есть вторая проблема, вероятно, имел первый тоже. Спасибо. - person Russ Bateman; 04.09.2010
comment
Хотелось бы, чтобы в официальных документах для Android было что-то более явное (еще не наткнулся на это), и другие ответы на других форумах подходят, но никогда не упускают из виду проблему. Обратите внимание, что на BlackBerry эта же проблема является огромным кошмаром, и никто не дает достоверной информации о том, как ее решить - не уверен, что я буду там делать. - person Russ Bateman; 04.09.2010
comment
Привет, @RussBateman, я опробовал шаги, которые вы упомянули выше, и смог успешно включить библиотеку jar в свой проект Android, поэтому классы библиотеки были доступны для моего проекта во время компиляции, но когда я запускаю проект, я получаю сообщение об ошибке в моей консоли: преобразование в формат Dalvik завершилось ошибкой 1 .. и мой проект не запускался! - person Zeba; 12.04.2012
comment
При определенных обстоятельствах это не работает ... Я точно не помню, что я сделал, удалил папку libs, прочитал ее ... теперь сделал все, что вы сказали, добавил библиотеки, импортировал банку, добавил в путь сборки ... Ошибки компилятора исчезли, но по-прежнему возникает исключение времени выполнения, что класс не найден :( - person User; 03.06.2012
comment
У меня была эта проблема, хотя и не при разработке Android. Если вы занимаетесь разработкой OSGi / плагинов, вам понадобится дополнительный шаг после всего вышеперечисленного. Перейдите в свой Manifest.MF ›Runtime› Classpath. Добавьте каждую из этих банок, которую вы добавили, в свой путь сборки. Не забудьте добавить свою папку src / и все остальное, что требуется для вашего плагина. - person mmoore; 25.10.2012
comment
К сожалению, при добавлении jar-файлов в libs / сборки ant перестают работать: com.android.dx.util.DexException: Multiple dex files define Lmain/java/org/random/class/Dates;. Муравей project.properties ссылается на путь к библиотеке. Для конкретной библиотеки Eclipse не может импортировать ее, потому что по какой-то причине исходный пакет не соответствует исходному пути, поэтому Eclipse отказывается компилироваться. - person Chloe; 07.04.2013

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

person Paul Gregoire    schedule 04.09.2010
comment
Все дело в опыте, у меня была такая же проблема раньше :) - person Paul Gregoire; 04.09.2010
comment
Спасибо, сэр, но отстойно видеть, что папке libs нужна копия внешних файлов Jar, которые у нас уже есть в репозитории Maven или где-то еще. - person asgs; 27.03.2013
comment
К сожалению, это больше не работает автоматически, вы также должны указать eclipse, чтобы он включал библиотеки в файлы пакетов. - person Neil Townsend; 27.08.2013
comment
Когда это изменилось? Это огромное изменение того, к чему мы все привыкли. - person Paul Gregoire; 27.08.2013

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

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

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

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

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

person koke    schedule 20.06.2011

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

person ajaykoppisetty    schedule 24.07.2013

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

Если вы используете что-то в своем файле макета, которое исходит от третьей стороны, вам может потребоваться также использовать его префикс, что-то вроде «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"
      ...>

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

person Russ Bateman    schedule 04.09.2010

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

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

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

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

person sujan    schedule 02.04.2012

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

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

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

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

person Leander    schedule 05.12.2012

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

person Sam Adamsh    schedule 25.06.2013