Как сделать .jar из проекта Android Studio


96

Я использую AndroidStudio, и у меня есть этот проект, как показано на рисунке:

введите описание изображения здесь

Внутри синего круга находится myLib. myLib также необходимо использовать внешнюю библиотеку, которая находится внутри красного круга, и пакет apache (зеленый кружок).

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

Было бы очень полезно пошаговое руководство, я новичок в мире разработчиков.

Спасибо!


1
Я думаю, что вам нужен файл aar (архив Android), который можно легко связать, как зависимость. В основном вам нужно создать проект библиотеки Android. Но я не могу в уме писать точные шаги.
— rekire

2
Мне нужен файл .jar, чтобы я мог использовать его в любом проекте Java. Не только андроиды.
— dum4ll3

1
Должно быть почти то же самое - сделать проект библиотеки и экспортировать его.
— Трэш Бин,

Эта ошибка описывает недостаток в плагине Android gradle, который не позволяет легко взломать файл сборки gradle для добавления цели jar ...
— mmigdol

Ответы:


135
  • Откройте build.gradle для проекта библиотеки введите описание изображения здесь

  • Напишите две задачи в build.gradle - deleteJar и createJar и добавьте правило createJar.dependsOn (deleteJar, build) введите описание изображения здесь

Код сверху:

task deleteJar(type: Delete) {
    delete 'libs/jars/logmanagementlib.jar'
}           

task createJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('libs/jars/')
    include('classes.jar')
    rename('classes.jar', 'logmanagementlib.jar')
}

createJar.dependsOn(deleteJar, build)
  • Разверните панель Gradle справа и откройте все задачи в папке yourlibrary-> others. Вы увидите две новые задачи - createJar и deleteJar. введите описание изображения здесь

  • Дважды щелкните createJar введите описание изображения здесь

  • После успешного выполнения задачи получите сгенерированную банку из пути, указанного в задаче createJar, то есть libs / xxxx.jar введите описание изображения здесь

  • скопируйте вновь созданную банку в папку библиотеки вашего проекта -> щелкните правой кнопкой мыши -> выберите «добавить как библиотеку»


4
Иногда люди понимают, глядя, а не читая. Вы видите хороший UX ☺
— Абхинав

5
Что ж, тогда я должен вам сказать, что я не уверен release. У меня есть debugи default, но нет releaseпапки. Какую версию плагина вы используете? Вы знаете, зафиксировано ли это где-нибудь?
— Кэмерон Лоуэлл Палмер

3
У меня нет releaseпапки.
— Камран Бигдели

4
Что вы пытаетесь скопировать ?? Мы должны нацеливаться на папки, содержащие файл APK ?? Я имею в виду в строке ('build / intermediate / bundles / default'), что этот каталог содержит для вас. В моей студии Android нет папки с пакетами имен, и я продолжаю получать НЕТ ИСТОЧНИКА в задаче
— createJar

12
изменить с ('build / intermediate / bundles / release /') на from ('build / intermediate / packaged-classes / release /') для Android Studio 3.1.3 и Gradle версии 4.4
— Вайшах

59

Если вы настроили код как простой Java-модуль в Gradle, то Gradle очень легко получить файл jar с содержимым. В этом файле jar будет только ваш код, а не другие библиотеки Apache, от которых он зависит. Я бы рекомендовал распространять его таким образом; немного странно связывать зависимости внутри вашей библиотеки, и для пользователей этих библиотек более нормально включать эти зависимости самостоятельно (потому что в противном случае возникают коллизии этих проектов, которые уже связывают копии библиотеки, возможно, разных версий ). Более того, вы избегаете потенциальных проблем с лицензированием, связанных с распространением чужого кода, если вы публикуете свою библиотеку.

Возьмите код, который также необходимо скомпилировать в банку, и переместите его в отдельный простой модуль Java в Android Studio:

  1. Меню Файл > Новый модуль ... > Библиотека Java
  2. Настройте библиотеку, имя пакета Java и имена классов в мастере. (Если вы не хотите, чтобы он создавал для вас класс, вы можете просто удалить его после создания модуля)
  3. В вашем коде Android настройте зависимость от нового модуля, чтобы он мог использовать код из вашей новой библиотеки:
  4. Файл > Структура проекта > Модули > (ваш модуль Android) > Зависимости > + > Зависимость модуля . Смотрите скриншот ниже: введите описание изображения здесь
  5. Выберите свой модуль из списка в появившемся диалоговом окне: введите описание изображения здесь

Надеюсь, ваш проект теперь должен строиться нормально. После того, как вы выполните сборку, файл jar для вашей библиотеки Java будет помещен в каталог build / libs в каталоге вашего модуля. Если вы хотите создать файл jar вручную, вы можете запустить его задачу файла сборки jar из окна Gradle: введите описание изображения здесь


Большое спасибо! Ваш ответ был действительно полезным, больше всего на последнем снимке экрана, где показаны задачи Gradle. Я этого не знал. Я мог бы выполнить ваши шаги, но мне все еще не хватает org.apache.http.Header. Как я могу импортировать его в свою библиотеку?
— dum4ll3

Что вы имеете в виду, когда говорите, что вам это не хватает?
— Скотт Барта,

1
Пройдите по той же схеме Project Structure> dependencies, но выберите модуль библиотеки вместо проекта и добавьте зависимость таким же образом. В своем ответе я говорю, что он помещает файл jar в каталог build / libs в каталоге своего модуля.
— Скотт Барта,

1
Получил: java.lang.NoClassDefFoundError: com.loopj.android.http.RequestParams. Это моя внешняя библиотека, которую я компилирую вместе со своей.
— dum4ll3

2
Он работает только с библиотекой java, а задача jar в библиотеке Android не существует
— cuasodayleo

26

В среде разработки Android Studio перейдите на панель « Выполнить что-нибудь »:

CTRL+ CTRL+ gradle CreateFullJarRelease+ENTER

После этого вы найдете свой артефакт в этой папке своего проекта.
Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


ИЛИ


В Gradle уже есть Taskдля этого в боковом меню Gradle , в otherпапке.

панель инструментов Gradle

Затем прокрутите вниз createFullJarReleaseи щелкните по нему.

Задачи Gradle

После этого вы найдете свой артефакт в этой папке своего проекта.

Build > Intermediates > Full_jar > Release > CreateFullJarRelease > full.jar


2
Не вижу эту опцию. Это было добавлено в последней версии Studio?
— Dibzmania

1
Я строю и когда нахожу * .jar, его зовут: full.jar. 30 минут, чтобы найти это lol
— nobjta_9x_tq 07

1
В моем случае я нашел это вbuild\intermediates\intermediate-jars\release
— Юсрил Маулидан Раджи

У меня есть вопрос. В моем случае он генерирует 3 файла jar. classes.jar,, full.jarи res.jar. Должен ли я импортировать все файлы jar, когда я хочу его использовать?
— Юсрил Маулидан Раджи

Просто используйте full.jar
— Харун Хаджем

11

Просто добавьте это в build.gradle вашего java-модуля. Он будет включать зависимые библиотеки в архив.

mainClassName = "com.company.application.Main"

jar {
  manifest { 
    attributes "Main-Class": "$mainClassName"
  }  

  from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
  }
}

Это приведет к созданию файла [имя_модуля] / build / libs / [имя_модуля] .jar.


Но будет ли у библиотеки .jar класс Main? OP говорит, что они создают файл .jar, «чтобы я мог использовать его в других проектах» (sic). Звучит как библиотека.
— Стив Уайт,

Только этот парень действительно это понимал, просто создание баночки не решает проблему. что, если нам нужно его выполнить. Приведенный выше код позволяет избежать ошибки «Невозможно выполнить jar-файл:« нет основного атрибута манифеста »».
— MobileEvangelist

1

Файл .jar будет автоматически сгенерирован при компиляции / запуске приложения.

Вы можете найти свой файл class.jar в root_folder / app / build / intermediate / bundles / debug

расположение файла jar


1
  1. Перейдите на вкладку Gradle в Android Studio, затем выберите проект библиотеки.

  2. Затем перейдите в Задачи

  3. Затем перейдите в Другое

  4. Дважды щелкните bundleReleaseaar

Вы можете найти свои .aarфайлы вyour_module/build/outputs/aar/your-release.aar

Вот изображение


Я нигде не вижу "Gradle Tab". Наконец, я набрал "Gradle" в поиске по справке и получил что-то вроде вашего представления Gradle. Но список внутри совсем другой, намного короче вашего. В разделе Задачи-> Другое нет пакета Releaseaar. Есть «createJar», но когда я нажимаю на него, я получаю «Task 'createJar' не найден в корневом проекте ...» Я застрял. И ... зачем нам файлы .aar? OP запросил файл .jar. Это то же самое>
— Стив Уайт

Но вопрос в том, как сделать так, чтобы .jarне было.aar
— Алексей Тимощенко

0

способ, которым я нашел, заключался в том, чтобы найти вывод компилятора проекта (структура проекта> проект). затем найдите соответствующую папку модуля, который вы хотите превратить в jar, сожмите ее с помощью zip и измените расширение вывода с zip на jar.


0
task deleteJar(type: Delete) {
    delete 'libs/mylibrary.jar'
}           

task exportjar(type: Copy) {
    from('build/intermediates/compile_library_classes/release/')
    into('libs/')
    include('classes.jar')
    rename('classes.jar', 'mylibrary.jar')
}

exportjar.dependsOn(deleteJar, build)

0

Если вы запустите задачу Gradle из AndroidStudio [Подробнее]

assembleRelease 
//or
bundleReleaseAar

или через терминал

./gradlew <moduleName>:assembleRelease
//or
./gradlew <moduleName>:bundleReleaseAar

тогда вы сможете найти .aarв

<project_path>/build/outputs/aar/<module_name>.aar
//if you do not see it try to remove this folder and repeat the command

.aarФайл (Android Library) состоит из файла .jar(Java Library) и дополнительных ресурсов Android. .aarФайл представляет собой почтовый файл с расширением AAR, поэтому вы можете заменить .aarс .zipзапускаемым

unzip "<path_to/module_name>.aar"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.