Як зробити .jar з проекту Android Studio


96

Я використовую AndroidStudio, і у мене є такий проект, як показано:

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

Усередині синього кола є myLib. myLib також повинен використовувати зовнішню бібліотеку, яка знаходиться всередині червоного кола, та пакет apache (зелене коло).

Тож я хочу, щоб вся ця справа стала єдиним .jar, щоб я могла використовувати її в інших проектах.

Покрокове керівництво було б дуже вдячне, я новачок у світі розробників.

Дякую!


1
Я думаю, що вам потрібен файл aar (архів Android), який можна пов’язати тихо, просто як залежність. В основному вам потрібно створити проект бібліотеки Android. Але я не можу написати точні кроки з розуму.
rekire

2
Мені потрібен файл .jar, щоб я міг використовуватись у будь-якому проекті Java. Не тільки андроїд.
dum4ll3

1
Має бути майже однаковим - складіть проект бібліотеки та експортуйте його.
Треш Бін

Ця помилка описує недолік плагіна Android gradle, який запобігає легкому злому 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 праворуч і відкрийте всі завдання у своїйбібліотеці-> інші. Ви побачите два нові завдання - createJar та deleteJar введіть тут опис зображення

  • Двічі клацніть на createJar введіть тут опис зображення

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

  • скопіюйте щойно створену банку в потрібну папку lib вашого проекту -> клацніть правою кнопкою миші>> виберіть "Додати як бібліотеку"


4
Іноді люди розуміють, переглядаючи, а не читаючи. Це хороший UX, який ви бачите ☺
Абхінав Тягі

5
Ну, тоді я повинен сказати вам, що я не впевнений у цьому release. У мене є debugі default, але releaseпапки немає . Яку версію плагіна ви використовуєте? Чи знаєте ви, чи це десь задокументовано?
Камерон Лоуелл Палмер,

3
У мене немає releaseпапки.
Камран Бігделі

4
Що ви намагаєтесь скопіювати ?? Чи ми повинні націлюватись на папки, що містять файл APK? Я маю на увазі у рядку з ('build / intermediates / bundles / default'), що містить цей каталог для вас. У моїй андроїд-студії немає папки з наборами імен, і я продовжую отримувати БЕЗ ДЖЕРЕЛА в завданні createJar
Bawender Yandra

12
змінити з ('build / intermediates / bundles / release /') на ('build / intermediates / Packaged-classes / release /') для Android Studio 3.1.3 і Gradle версії 4.4
Вайшах

59

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

Візьміть код, який також потрібно скомпілювати, у jar, і перемістіть його в окремий звичайний модуль 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
Пройдіть ту саму структуру проекту> потік залежностей, але виберіть модуль бібліотеки замість свого проекту та додайте залежність таким же чином. У своїй відповіді я кажу, що він розміщує файл jar у директорії build / libs у його каталозі модулів.
Скотт Барта

1
Я отримав: java.lang.NoClassDefFoundError: com.loopj.android.http.RequestParams. Це моя зовнішня бібліотека, яку я складаю зі своєю.
dum4ll3

2
Він працює лише з java-бібліотекою, а завдання jar в бібліотеці Android не існує
cuasodayleo

26

У програмі Android Studio IDE відкрийте панель " Запустити все ":

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?
Дібзманія

1
Я будую і коли знаходжу * .jar, це ім'я: full.jar. 30 хв., Щоб знайти його, ха-ха
nobjta_9x_tq

1
У моєму випадку я знайшов це вbuild\intermediates\intermediate-jars\release
Юсріл Маулідан Раджі

У мене є питання. У моєму випадку він генерує 3 файли jar. classes.jar,, full.jarі res.jar. Чи слід імпортувати всі файли jar, коли я хочу їх використовувати?
Юріл Маулідан Раджі

Просто використовуйте full.jar
Haroun Hajem

11

Просто додайте це до build.gradle модуля java. Він буде включати залежні бібліотеки в архів.

mainClassName = "com.company.application.Main"

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

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

Це призведе до отримання файлу [module_name] / build / libs / [module_name] .jar.


Але чи мала би бібліотека .jar мати головний клас? ОП зазначає, що вони створюють файл .jar ", щоб я міг використовувати його в інших проектах" (sic). Це звучить як бібліотека.
Стів Вайт

Тільки цей хлопець насправді це розумів, просто створення банок не вирішує проблему. а якщо нам потрібно виконати це. Вищевказаний код дозволяє уникнути помилки "Не вдається виконати jar-файл:" немає основного атрибута маніфесту "".
MobileEvangelist

1

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

Ви можете знайти файл class.jar з root_folder / app / build / intermediates / bundles / debug

розташування файлу jar


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

  2. Потім перейдіть до Завдання

  3. Тоді перейдіть до Іншого

  4. Двічі клацніть на bundleReleaseaar

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

Ось зображення


Я ніде не бачу жодної «вкладки Gradle». Нарешті я набрав "Gradle" у пошуку довідки і отримав щось на зразок вашого подання Gradle. Але список всередині дуже інший, значно коротший за ваш. У розділі Завдання-> Інше немає розширення. Існує "createJar", але коли я натискаю на нього, я отримую "Task 'createJar' не знайдений в кореневому проекті ..." Я застряг. І ... чому ми хочемо .aar-файли? OP попросив файл .jar. Це те саме>
Стів Уайт

Але питання в тому, як зробити .jarні.aar
Олексій Тимощенко

0

шлях, який я знайшов, був пошук результатів компілятора проекту (структура проекту> проект). потім знайдіть виконану папку модуля, яку ви хочете перетворити на банку, стисніть її на блискавці та змініть розширення виводу з 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) складається з файлу .jar(бібліотека Java) та додаткових ресурсів Android. .aarФайл представляє собою поштовий файл з розширенням AAR, тому ви можете замінити .aarз .zipзапускаються

unzip "<path_to/module_name>.aar"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.