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

96

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

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

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

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

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

Спасибо!

dum4ll3
источник
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)
Md Имран Хоссейн Ку
источник
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"
yoAlex5
источник