Добавление библиотеки /JAR в проект Eclipse Android
Это вопрос из двух частей о добавлении сторонней библиотеки (JAR) в проект Android в Eclipse.
Первая часть вопроса: когда я пытаюсь добавить сторонний JAR-файл (библиотеку) в свой проект Android, у меня сначала возникает проблема
Ошибка синтаксического анализа XML: несвязанный префикс
потому что я пытаюсь использовать класс из этого JAR (и нужен префикс, как-то определенный). В чем дело?
Во-вторых, (после исправления этого - ответ приведен ниже), мое приложение не работает на Android, и через отладчик (LogCat) я обнаруживаю, что класс, который я пытаюсь использовать, не существует.
Вызывается: java.lang.ClassNotFoundException: com.github.droidfu.widgets.WebImageView...
Почему, когда я не получаю ошибку компиляции или компоновщика в Eclipse, возникает ли эта проблема на эмуляторе?
Эти два вопроса являются риторическими, потому что я собираюсь ответить на них самостоятельно ниже. Другие посты на этом форуме подкрадываются к проблеме, и в других местах обсуждается, но я чувствую, что могу быть более полезным для следующего парня, который придет.
8 ответов
Теперь о проблеме недостающего класса.
Я являюсь разработчиком Eclipse Java EE и уже много лет имею привычку добавлять сторонние библиотеки через механизм "User Library" в Build Path. Конечно, есть как минимум 3 способа добавить стороннюю библиотеку, и я использую самый элегантный, по моему скромному мнению.
Это не будет работать, однако, для Android, чей Dalvik "JVM" не может обрабатывать обычный Java-скомпилированный класс, но должен конвертировать его в специальный формат. Этого не происходит, когда вы добавляете библиотеку так, как я обычно это делаю.
Вместо этого следуйте (широко доступным) инструкциям по импорту сторонней библиотеки, а затем добавьте ее с помощью Build Path (что делает ее известной Eclipse для целей компиляции). Вот пошаговая инструкция:
- Загрузите библиотеку в свою систему разработки хоста.
- Создайте новую папку libs в своем проекте Eclipse/Android.
- Щелкните правой кнопкой мыши libs и выберите Import -> General -> File System, затем Next, Browse в файловой системе, чтобы найти родительский каталог библиотеки (то есть, куда вы ее загрузили).
- Нажмите OK, затем щелкните имя каталога (не флажок) на левой панели, затем проверьте соответствующий JAR на правой панели. Это помещает библиотеку в ваш проект (физически).
- Щелкните правой кнопкой мыши свой проект, выберите Build Path -> Configure Build Path, затем перейдите на вкладку Libraries, затем Add JARs..., перейдите к новому JAR в каталоге libs и добавьте его. (Это, кстати, тот момент, когда ваш новый JAR конвертируется для использования на Android.)
НОТА
Шаг 5 может не понадобиться, если библиотека уже включена в ваш путь сборки. Просто убедитесь, что его существование в первую очередь, прежде чем добавить его.
То, что вы сделали здесь, выполняет две вещи:
- Включает преобразованный Dalvik JAR в ваш проект Android.
- Делает определения Java доступными для Eclipse, чтобы находить сторонние классы при разработке (то есть компиляции) исходного кода вашего проекта.
Убедитесь, что ваши сторонние файлы jar находятся в папке "libs" ваших проектов, и они будут помещены в.apk при упаковке вашего приложения. Вы можете увидеть ошибки времени выполнения на устройстве, если что-то в банке не поддерживается, но кроме этого я добился большого успеха в этом.
Настройка библиотечного проекта
Проект библиотеки - это стандартный проект Android, поэтому вы можете создать новый проект так же, как и новый проект приложения.
Когда вы создаете проект библиотеки, вы можете выбрать любое имя приложения, пакет и при необходимости установить другие поля, как показано на рисунке 1.
Затем установите свойства проекта, чтобы указать, что это проект библиотеки:
В проводнике пакетов щелкните правой кнопкой мыши проект библиотеки и выберите "Свойства". В окне "Свойства" выберите группу свойств "Android" слева и найдите свойства библиотеки справа. Установите флажок "is Library" и нажмите "Применить". Нажмите кнопку ОК, чтобы закрыть окно свойств. Новый проект теперь помечен как проект библиотеки. Вы можете начать перемещение исходного кода и ресурсов в него, как описано в разделах ниже.
Если вы используете ADT версии 22, вам нужно проверить зависимости android и частные библиотеки android на вкладке order&Export в пути сборки проекта
Во-первых, проблема с отсутствующим префиксом.
Если вы используете в своем файле макета что-то от стороннего производителя, возможно, вам также понадобится использовать его префикс, например, "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"
...>
или вы получите ошибку несвязанного префикса. Для меня это был сбой при копировании и вставке всех предоставленных примеров со страниц сторонней библиотеки.
Ошибка синтаксического анализа XML: несвязанный префикс
Ресурс '/playteddy/res' не существует.
Я получил две вышеупомянутые ошибки и наконец решил.
Щелкните правой кнопкой мыши свой проект -> Свойства -> Путь сборки Java -> googleadmobadsdk (выберите и поместите его сверху), затем запустите и проблема будет решена. Это решено моей ошибкой во время выполнения.
Идите, чтобы построить путь в eclipse, затем нажмите порядок и экспорт, затем проверьте библиотеку /jar, а затем нажмите кнопку вверх, чтобы переместить его в верхнюю часть списка и сначала скомпилировать его.
Поместите источник в папку за пределами вашего рабочего пространства. Щелкните правой кнопкой мыши в проводнике проекта и выберите "Импорт..."
Импортируйте проект в свою рабочую область как проект Android. Попробуйте построить его и убедитесь, что он помечен как проект библиотеки. Также убедитесь, что он собран с поддержкой API Google, если нет, вы получите ошибки компиляции.
Затем щелкните правой кнопкой мыши по основному проекту в проводнике проекта. Выберите свойства, затем выберите Android слева. В разделе библиотеки ниже нажмите "Добавить".
Библиотека mapview-balloonons теперь должна быть доступна для добавления в ваш проект.