Как я могу использовать внешние JAR-файлы в проекте Android?

326

Я создал проект Android и добавил в свой проект внешний JAR (hessian-4.0.1.jar). Затем я добавил JAR в путь сборки и отметил его в Order and Export.

Похоже, Order and Export игнорируется, и все классы из внешнего JAR отсутствуют во время выполнения.

Есть ли хитрость, чтобы правильно включить необходимые классы из внешнего JAR при создании приложения для Android с помощью плагина Eclipse? Я не хочу использовать муравья или мавена.

AndroidSmoker74
источник
1
как вы уже узнали: это вызвано зависимостями в hessian-4.0.1.jar. Если вы хотите использовать Hessian с Android, используйте Hessdroid ( code.google.com/p/hessdroid ). Не очень активно, но прекрасно работает даже на Android 4.0.
Ice09
1
См. Также «NoClassDefFoundError для кода в библиотеке Java на Android», где приведена распространенная проблема при использовании внешних jar-файлов . Простое решение .
Поток

Ответы:

443

Для затмения

Хороший способ добавить внешние JAR-файлы в ваш проект Android или любой проект Java:

  1. Создайте папку с именемlibs в корневой папке вашего проекта
  2. Скопируйте ваши файлы JAR в libsпапку
  3. Теперь щелкните правой кнопкой мыши файл Jar и выберите «Путь сборки»> «Добавить в путь сборки », и в вашем проекте будет создана папка «Библиотеки со ссылками».

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

Для Android Studio

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

Недостающее изображение

  1. Щелкните правой кнопкой мыши нужный модуль, в который вы хотите добавить внешнюю библиотеку, затем выберите « Создать»> «Directroy» и назовите его « libs ».
  2. Теперь скопируйте blah_blah.jar в папку ' libs '
  3. Щелкните правой кнопкой мыши файл blah_blah.jar, затем выберите « Добавить как библиотеку .. ». Это автоматически добавит и запишет в build.gradle как файлы компиляции ('libs / blah_blah.jar') и синхронизирует gradle. И вы сделали

Обратите внимание: если вы используете сторонние библиотеки, то лучше использовать транзитивные зависимости, где скрипт Gradle автоматически загружает JAR и JAR зависимостей при запуске скрипта gradle.

Пример: составить com.google.android.gms: play-services-ads: 9.4.0 '

Узнайте больше о Gradle Dependency Mangement

Винаяк Бевинакатти
источник
49
Обратите внимание, что при использовании последних версий Eclipse / ADT внешние libslib
jar-файлы
4
@ THelper - Спасибо! Вы правы, папка должна называться "libs", а не "lib". Я бился головой об эту проблему.
Камиль Севиньи
7
В последних версиях SDK шаг 3 (добавление JAR вручную в путь сборки) не требуется. Но если у вас есть IDE, например Eclipse, открытая во время добавления файла, вам придется выполнить обновление проекта (F5 и / или контекстное меню Refresh в Package Explorer).
Джон Адамс
4
Как это делается из командной строки? Какой файл конфигурации я должен редактировать и как?
Кристиан Спангсеге
13
Этот подход устарел с начала 2012 года. Просто добавьте JAR в libs/. Не изменяйте путь сборки вручную.
CommonsWare
127

Да, вы можете использовать это. Вот как:

  1. Ваш проект -> щелкните правой кнопкой мыши -> Импорт -> Файловая система -> yourjar.jar
  2. Ваш проект -> щелкните правой кнопкой мыши -> Свойства -> Путь сборки Java -> Библиотеки -> Добавить Jar -> yourjar.jar

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

MannyNS
источник
5
Этот подход устарел с начала 2012 года. Просто добавьте JAR в libs /. Не изменяйте путь сборки вручную.
CommonsWare
Я пробовал различные способы добавления пути сборки. Только так я могу исправить исключение Class not found после переноса одного проекта на другой компьютер
Микки
Первое решение устарело и не будет работать как хорошо.
Юша Алеауб
5

В настоящее время я использую SDK 20.0.3, и ни одно из предыдущих решений не помогло мне.

Причина того, что hessdroid работает там, где произошел сбой hess, заключается в том, что два jar-файла содержат java, скомпилированный для разных виртуальных машин. Байт-код, созданный компилятором Java, не гарантированно выполняется на виртуальной машине Dalvik. Байт-код, созданный компилятором Android, не обязательно будет работать на виртуальной машине Java.

В моем случае у меня был доступ к исходному коду и я смог создать для него файл JAR Android, используя метод, который я описал здесь: https://stackoverflow.com/a/13144382/545064

Дэнни Ремингтон - OMS
источник
5

Я знаю, что ОП заканчивает свой вопрос ссылкой на плагин Eclipse, но я прибыл сюда с поиском, который не указал Eclipse. Итак, что касается Android Studio:

  1. Добавить jarфайл в каталог libs (например, копировать / вставить)
  2. Щелкните правой кнопкой мыши jarфайл и выберите «Добавить как библиотеку ...»
  3. нажмите «ОК» в следующем диалоговом окне или переименуйте, если вы решите.

Это оно!

shanabus
источник
4

Оказывается, я недостаточно хорошо выглядел на трассировке стека, проблема не в том, что внешний JAR не включен.

Проблема в том, что на платформе Android отсутствует javax.naming. * И многие другие пакеты, которые также имеют зависимости от внешнего JAR.

Добавление внешних файлов JAR и настройка порядка и экспорта в Eclipse работает, как и ожидалось, в проектах Android.


источник
3

Перейти к текущему проекту

RightClick-> Properties-> Java Build Path-> Add Jar Files в библиотеки -> Нажмите OK

Затем он добавляется в файл ссылочных библиотек в вашем текущем проекте.

калян г
источник
1

Java API Android не поддерживает javax.naming. * И многие другие javax. * Вещи. Вы должны включить зависимости как отдельные банки.

Родриго
источник
1

Если вы используете Android Studio, сделайте следующее (я скопировал и изменил ответ @Vinayak Bs):

  1. Выберите вид проекта в виде сбоку проекта (вместо пакетов или Android)
  2. Создайте папку с именем libs в корневой папке вашего проекта
  3. Скопируйте ваши JAR-файлы в папку libs
  4. Вид сбоку будет обновлен, и файлы JAR будут отображаться в вашем проекте
  5. Теперь щелкните правой кнопкой мыши по каждому файлу JAR, который вы хотите импортировать, и выберите «Добавить как библиотеку ...», который включит его в ваш проект.
  6. После этого все, что вам нужно сделать, это сослаться на новые классы в вашем коде, например. import javax.mail.*
kumaheiyama
источник
1

в андроид студии при использовании gradle

добавить это в build.gradle

compile fileTree(dir: 'libs', include: ['*.jar'])

и добавьте файл jar в папку libs

g_vk
источник
1

Если вы используете систему сборки Gradle , выполните следующие действия:

  1. положить jarфайлы в соответствующую libsпапку вашего приложения для Android. Вы, как правило , найти его в Project> app> libs. Если libsпапка отсутствует, создайте ее.

  2. добавьте это в свой build.gradleфайл свой app. (Не с вашими Projectbuild.gradle)

    dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
        // other dependencies
    }

    Это будет включать все ваши jarфайлы, доступные в libsпапке.

Если вы не хотите включать все jarфайлы, вы можете добавить их по отдельности.

compile fileTree(dir: 'libs', include: 'file.jar')

Рохит Арья
источник
0

создайте папку (например, lib) внутри вашего проекта, скопируйте свой jar в эту папку . Теперь перейдите к настройке пути сборки правой кнопкой мыши на проекте, там в пути сборки выберите

«Добавить банку» перейдите к созданной вами папке и выберите банку.

sharma_kunal
источник
0

Копирование файла .jar в папку проекта Android не всегда возможно.
Особенно, если это выход другого проекта в вашей рабочей области, и он постоянно обновляется.

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

В интерфейсе выберите:

Проект -> Импорт -> Файловая система -> yourjar.jar -> (область параметров) Дополнительно -> Создать ссылку в рабочей области.

Ссылка сохраняется в файле .project :

<linkedResources>
    <link>
        <name>yourjar.jar</name>
        <type>1</type>
        <locationURI>PARENT-5-PROJECT_LOC/bin/android_ndk10d_armeabi-v7a/yourjar.jar</locationURI>
    </link>
</linkedResources>

PARENT-5-PROJECT_LOC означает относительно файла проекта, 5 каталогов вверх (../../../../../).

Затем добавьте его в библиотеки:
Проект -> Свойства -> Путь сборки Java -> Библиотеки -> Добавить Jar -> yourjar.jar

В этом же окне выберите вкладку « Порядок и экспорт » и отметьте свою банку, чтобы она была добавлена ​​в apk.

Йохай Тиммер
источник