Як створити проект бібліотеки в Android Studio та прикладний проект, який використовує проект бібліотеки


164

Я новачок у системі збирання gradle та IntelliJ.

Тож як я можу створити проект бібліотеки Android (наприклад, com.myapp.lib1) та прикладний проект (наприклад, com.myapp.app) і зробити так, щоб система збірки включала com.myapp.lib1 у проект програми?

Я перейшов до Структури проекту -> Модулі -> Мій проект програми та додав залежність до проекту lib. Тепер IntelliJ може розпізнавати класи з проекту lib при використанні в проекті додатків, але коли я запускаю проект програми, виникають помилки, такі як:

Gradle: error: package com.myapp.lib1 does not exist

1
Я використовував бібліотеки Android для створення безкоштовних / платних версій свого додатка. Нова система побудови Gradle робить цей підхід застарілим з концепцією Build Variants. Тепер ви можете автоматично створювати різні підписані APK з одного і того ж коду. Я б хотів, щоб я знав це раніше.
theczessenation

1
@ theczessensation - чи можете ви детально розробити? Завантаживши APK для повної версії, я спробував завантажити APK для безкоштовної версії, але використовуючи ту саму назву пакета. Google Play Store (GPS) дав мені повідомлення про те, що я вже використовував цю назву пакета. Чи означає те, що ви говорите про gradle, що мені не потрібно два окремих додатки у двох окремих пакетах?
DSlomer64

Ось ідеальна відповідь stackoverflow.com/a/31366602/1118772 . Акіб Мумтаз згадував у відповідях, але це нарешті. Замість того, щоб витрачати час на інші шляхи, ви можете піти з цим. philosophicalhacker.com/2014/10/02/…
Noundla Sandeep

Цікава нитка, що додає Бібліотеки .з мальовничим поясненням.
Харіш

Відповіді:


111

Щоб створити бібліотеку:

Файл> Новий модуль

виберіть бібліотеку Android

Ліб

Щоб використовувати бібліотеку, додайте її як залежність:

Файл> Структура проекту> Модулі> Залежності

деп

Потім додайте модуль (бібліотека Android) як залежність модуля.

додати модуль

Запустіть проект. Він буде працювати.


194
Це створює файли модуля в рамках проекту. Що робити, якщо ви хочете, щоб модуль був зовнішнім для проекту, щоб його можна було використовувати з іншим додатком?
rrbrambley

2
@rrbrambley: Я знайшов спосіб повторно використовувати модуль у кількох проектах. Я створив (NTFS Junction) посилання на папки за допомогою програми під назвою winbolic link для Windows. Коли у мене є модуль, який я хотів би повторно використовувати в декількох проектах, я створюю посилання на папку до проекту, який підлягає повторному використанню, всередині каталогу кожного проекту, в якому його використовувати. Після цього я додаю модульну залежність (в Andr. Studio). Тепер я можу використовувати / редагувати модуль у кожному проекті, зберігаючи синхронізацію. Не впевнений, чи це правильний шлях, але наразі це, здається, працює досить добре! Це працює краще, ніж місцевий ревізор Maven.
Пітер

1
На жаль, станом на липень 2014 року більше не існує налаштувань проекту, подібних до показаних у екрані. Мені довелося редагувати .grade файли, як зазначено у відповіді GrkEngineer нижче.
Тім Брей

24
Це слід проголосувати, оскільки це створює модуль з існуючого проекту
Джонатана

2
Якщо ви хочете використовувати ту саму лібу в інших проектах, вам потрібно скопіювати модуль бібліотеки в цей проект і налаштувати settings.gradle та build.gradle головного модуля вручну.
hanoo

114

Цікаво, чому немає прикладу самостійного баночного проекту.

Під час затемнення ми просто встановимо прапорець "Чи бібліотека" у діалоговому вікні налаштування проекту
В студії Android я дотримувався цих кроків і отримав файл з баночкою.

  1. Створіть проект.

  2. відкрити файл у лівому меню проекту (додаток / build.gradle): сценарії Gradle> build.gradle (модуль: XXX)

  3. змінити один рядок: apply plugin: 'com.android.application'->'apply plugin: com.android.library'

  4. видалити applicationId у файлі: applicationId "com.mycompany.testproject"

  5. побудувати проект: Build> Перебудувати проект

  6. тоді ви можете отримати файл aar: app> build> outputs> aar folder

  7. змінити aarім'я розширення файлу наzip

  8. розпакуйте, і ви можете побачити classes.jarв папці. перейменуйте та використовуйте його!

У всякому разі, я не знаю, чому Google робить створення банок таким клопітким в андроїд-студії.


1
Підходить для мене на Android Studio 2.2.2 dec. 2016.
Герман

95

Рекомендований плагін Google Gradle Plugin для налаштування файлів gradle для створення декількох проектів має деякі недоліки Якщо у вас є кілька проектів залежно від одного проекту бібліотеки, у цій публікації коротко пояснюється рекомендована конфігурація Google, її недоліки та рекомендується інший спосіб налаштування файлів gradle на підтримка налаштування багатопроектних програм в Android Studio:

Альтернативна налаштування багатопроектних програм для андроїд-студії

Інший спосіб:

Виявляється, є кращий спосіб керувати кількома проектами в Android Studio. Трюк полягає в тому, щоб створити окремі проекти Android Studio для своїх бібліотек і сказати gradle, що модуль для бібліотеки, від якої залежить ваше додаток, знаходиться в каталозі проектів бібліотеки. Якщо ви хочете використовувати цей метод із описаною вище структурою проекту, ви зробите наступне:

  1. Створіть проект Android Studio для бібліотеки StickyListHeaders
  2. Створіть проект Android Studio для App2
  3. Створіть проект Android Studio для App1
  4. Налаштуйте App1 та App2 для складання модулів у проекті StickyListHeaders.

4-й крок - це важка частина, тому це єдиний крок, який я детально опишу. Ви можете посилатись на модулі, які є зовнішніми у каталозі вашого проекту, додавши у ваш файл settings.gradle оператор проекту та встановивши властивість projectDir на об’єкт ProjectDescriptor, який повертається цим висловлюванням проекту:

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

Код, який потрібно ввести settings.gradle:

include ':library1'
project(':library1').projectDir = new File('../StickyListHeader/library1')

Якщо ви зробили це правильно, ви помітите, що модулі, на які посилається ваш проект, відображатимуться в навігаторі проектів, навіть якщо ці модулі є зовнішніми до каталогу проектів:

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

Це дозволяє одночасно працювати над кодом бібліотеки та кодом програми. Інтеграція управління версіями також працює чудово, коли таким чином ви посилаєтесь на модулі зовні. Ви можете здійснити та надіслати свої зміни до коду бібліотеки так само, як ви можете вчинити та натиснути модифікації коду програми.

Такий спосіб налаштування декількох проектів дозволяє уникнути труднощів, що викликають загрозу налаштованої конфігурації Google Оскільки ми посилаємось на модуль, який знаходиться за межами каталогу проектів, нам не потрібно робити зайві копії модуля бібліотеки для кожного додатка, що від нього залежить, і ми можемо оновлювати свої бібліотеки без будь-якої дурниці git submodule.

На жаль, цей інший спосіб створення декількох проектів знайти дуже важко. Очевидно, що це не те, що ви зрозумієте, переглянувши посібник Google, і в цей момент немає можливості налаштувати свої проекти таким чином, використовуючи інтерфейс Android Studio.


4
Це ідеальна відповідь. Дякую.
Noundla Sandeep

1
Хороша відповідь, але вам слід скопіювати відповідні біти з поста у свою відповідь, якщо посилання перерветься.
Грейсон Парреллі

2
ПРИМІТКА: для оцінки рядків у gradle ви повинні використовувати подвійну цитату ("). Це" збережіть день "для мене. Пов'язане з цим
Solata

1
Як ми посилаємось на код бібліотеки з коду програми? Після виконання інструкцій із налаштування код програми все ще не може посилатися на пакунок у коді бібліотеки. Чи є додатковий крок, який потрібно зробити?
CEGRD

2
@CEGRD Вам потрібно перейти до Файл> Структура проекту та натиснути назву модуля, над яким ви працюєте. Потім перейдіть на вкладку залежності> натисніть на "+", а потім "Модульна залежність" у спадному меню. Потім ви зможете додати модуль library1 до свого поточного проекту.
OliasailO

45

Перегляньте це посилання про налаштування кількох проектів .

Деякі речі, на які слід звернути увагу, переконайтеся, що ви оновили налаштування.gradle, щоб посилатись на додатки та модулі бібліотеки.

settings.gradle: include ':app', ':libraries:lib1', ':libraries:lib2'

Також переконайтесь, що build.gradle програми має наступне:

dependencies {
     compile project(':libraries:lib1')
}

Ви повинні мати таку структуру:

 MyProject/
  | settings.gradle
  + app/
    | build.gradle
  + libraries/
    + lib1/
       | build.gradle
    + lib2/
       | build.gradle

Додаток build.gradle повинен використовувати com.android.applicationплагін, тоді як будь-які бібліотеки build.gradle повинні використовувати com.android.libraryплагін.

Android Studio IDE має оновитись, якщо ви можете створити з командного рядка за допомогою цієї установки.


Чи є плагін, визначений у build.gradle, лише різницею? тобто Чи можете ви змінити існуючий модуль у бібліотеці Android, змінивши цей один рядок?
Енріко

22
Одного разу ми натиснемо кнопку імпорту, і бібліотека просто запрацює, тоді ми почнемо вводити код у редакторі.
Стів М

6
Цей підхід, здається, включає бібліотеки в реальний проект. Те, що хотіла ОП, - це знати, як створити окремий проект бібліотеки Android, який живе у своєму власному проекті / просторі і включений у головний проект програми як ліб
Джонатан

@SteveM Це була моя проблема протягом усієї моєї кар'єри. Я просто починаю кодувати без будь-якого дизайну. А потім витратити години налагодження та рефакторинг.
Раджкіран

13

Для Intellij IDEA (і Android Studio) кожна бібліотека є модулем. Подумайте про модуль в Android Studio як еквівалент проекту в Eclipse. Проект в Android Studio - це набір модулів. Модулі можуть бути програмованими програмами або бібліотечними модулями.

Отже, для додання нового проекту бібліотеки для Android вам потрібно створити модуль типу «бібліотека Android». Потім додайте цей модуль бібліотеки до списку залежностей вашого основного модуля (модуля програми).


12

Найпростіший для мене спосіб створення та повторного використання бібліотечного проекту:

  1. Про відкритий проект file > new > new module(і відповіді на запитання інтерфейсу користувача)

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

  1. перевірити / або додати, якщо в налаштуваннях файлу.gradle :include ':myLibrary'
  2. перевірити / або додати, якщо у файлі build.gradle :

    dependencies { ... compile project(':myLibrary') }

  3. Щоб повторно використовувати цей модуль бібліотеки в іншому проекті, скопіюйте його папку в проект замість кроку 1 та виконайте кроки 2 та 3.

Ви також можете створити новий проектний додаток для студії. Ви можете легко змінити існуючий модуль програми на модуль бібліотеки, змінивши призначення плагіна у файлі build.gradle на com.android.library.

apply plugin: 'com.android.application'

android {...}

до

apply plugin: 'com.android.library'

android {...}

більше тут


Якщо ви зміните існуючий модуль програми на модуль бібліотеки, змінивши призначення плагіна, вам також доведеться видалити рядок `applicationId" com .... "з файлу gradle.
TDG

"ПОПЕРЕДЖЕННЯ: Конфігурація" компілювати "застаріла і була замінена на" реалізація "та" api "."
slhck

9

Ви можете додати новий модуль до будь-якої програми, як каже Блонделл у своїй відповіді, а потім посилатися на нього з будь-якої іншої програми.

Якщо ви хочете перемістити модуль у будь-яке місце на вашому комп'ютері, просто перемістіть папку модулів (модулі повністю незалежні), тоді вам доведеться посилатися на модуль.

Для посилання на цей модуль слід:

  • У файл build.gradle додатка додайте:

    dependencies {
    ...
    compile project(':myandroidlib')
    }
    
  • У файл settings.gradle додайте наступне:

     include ':app', ':myandroidlib'
     project(':myandroidlib').projectDir = new File(PATH_TO_YOUR_MODULE)
    

наприклад, project(':library').projectDir = new File('../library')де libraryназва папки паралельно папці проекту Android.
Хтось десь

5

Не забудьте використати apply plugin: 'com.android.library'у своєму, build.gradleа не застосувати плагін:'com.android.application'


4

Документальний шлях

Це рекомендований спосіб згідно з порадами, наведеними в документації на Android Studio.

Створіть модуль бібліотеки

Створіть новий проект для створення бібліотеки. Клацніть Файл> Новий> Новий модуль> Бібліотека Android> Далі> (виберіть ім'я)> Готово . Потім додайте в бібліотеку будь-які класи та ресурси, які ви хочете.

Під час створення модуля буде створений файл AAR. Ви можете знайти його project-name/module-name/build/outputs/aar/.

Додайте бібліотеку як залежність

Ви можете додати свою бібліотеку як залежність до іншого проекту на зразок цього:

  1. Імпортуйте файл AAR бібліотеки за допомогою Файл> Новий модуль> Імпорт пакета .JAR / .AAR> Далі> (виберіть розташування файлу)> Готово . (Не імпортуйте код, інакше він буде редагуватись у занадто багатьох місцях.)
  2. У файлі settings.gradle переконайтесь, що ім’я вашої бібліотеки є.

    include ':app', ':my-library-module'
    
  3. У файлі build.gradle програми додайте рядок компіляції до розділу залежностей:

    dependencies {
        compile project(":my-library-module")
    }
    
  4. Вам буде запропоновано синхронізувати ваш проект з gradle. Зроби це.

Це воно. Ви маєте можливість використовувати свою бібліотеку зараз.

Примітки

Якщо ви хочете зробити свою бібліотеку легко доступною для більшої аудиторії, подумайте про використання JitPac або JCenter .


3

З цим питанням було вирішено наступним чином:

Початок ситуації :

FrigoShare (root)
|-Modules:    frigoshare,   frigoShare-backend

Мета : хочу додати модуль з ім’ямdataformats

  1. Додати новий модуль (наприклад: Java Library)
  2. Переконайтесь, що ваш settings.gradleзовнішній вигляд (як правило, автоматично):

    include ':frigoshare', ':frigoShare-backend', ':dataformats'

  3. Переконайтесь ( вручну ), що build.gradleфайли модулів, які потребують використання вашої бібліотеки, мають таку залежність:

    dependencies { ... compile project(':dataformats') }



2

Як коментар theczessensation вище, я намагаюся пошукати варіанти Gradle Build Varians, і я знайшов це посилання: http://code.tutsplus.com/tutorials/using-gradle-build-variants--cms-25005 Це дуже просте рішення. Ось що я зробив: - У build.gradle:

flavorDimensions "version"

productFlavors {
    trial{
        applicationId "org.de_studio.recentappswitcher.trial"
        flavorDimension "version"
    }
    pro{
        applicationId "org.de_studio.recentappswitcher.pro"
        flavorDimension "version"
    }

}

Тоді у мене є ще 2 версії мого додатка: про та пробна версія з двома різними пакетними іменами, який є 2 додатком, вказаним вище кодом, щоб я можу завантажувати обидві в Google Play. Я все ще просто кодую в "головному" розділі і використовую getpackageName для переходу між версією. Просто перейдіть за посиланням, яке я дав для деталей.


1

Є два найпростіших способи, якщо один не працює, спробуйте інший.

  1. Додайте залежність бібліотеки всередині залежності в файл build.gradle бібліотеки ур, використовуючи, і вставте бібліотеку ур у зовнішні бібліотеки.

АБО

  1. Просто перейдіть у свою папку libs всередині папки програми та вставте всі .jar, наприклад, бібліотечні файли. Тепер хитрість полягає в тому, що тепер перейдіть всередину файлу settings.gradle, додайте цей рядок "include": app: libs "після" include ": додаток "" Це обов'язково спрацює ........... :)

1

У моєму випадку, використовуючи MAC OS X 10.11 та Android 2.0, і виконуючи саме те, що пояснив Aqib Mumtaz.

Але кожен раз у мене з'являлося таке повідомлення: " Виникла проблема з налаштуванням проекту": app ".> Неможливо оцінити модуль xxx: Конфігурація з ім'ям" за замовчуванням "не знайдена ."

Я виявив, що причина цього повідомлення полягає в тому, що Android 2.0 не дозволяє створювати бібліотеку безпосередньо. Отже, я вирішив спершу створити проект програми, а потім змінити build.gradle, щоб трансформувати його як бібліотеку.

Це рішення не працює, оскільки проект «Бібліотека» сильно відрізняється від проекту програми.

Отже, я вирішив свою проблему так:

  • Спочатку створіть стандартний додаток (за потреби);
  • Потім виберіть "Файл / Створити модуль"
  • Перейдіть до пошуку і перемістіть папку модуля, щойно створеного у вашій базовій директорії

Потім продовжуйте рішення, запропоноване Акібом Мумтазом.

В результаті джерело вашої бібліотеки буде спільним, без необхідності копіювати вихідні файли кожен раз (для мене це була єресь!)

Сподіваючись, що це вам допоможе.

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