Как создать проект библиотеки в Android Studio и проект приложения, который использует проект библиотеки

Я новичок в системе сборки gradle и IntelliJ.

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

Я пошел в Project Project → Modules → My App project и добавил зависимость от проекта lib. IntelliJ теперь может распознавать классы из проекта lib при использовании в проекте приложения, но когда я запускаю проект приложения, появляются такие ошибки, как:

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

Ответ 1

Чтобы создать библиотеку:

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

выберите "Библиотека Android"

Lib

Чтобы использовать библиотеку, добавьте ее как зависимость:

Файл > Структура проектa > Модули > Зависимости

dep

Затем добавьте модуль (библиотеку android) в качестве зависимости от модуля.

add module

Запустите проект. Он будет работать.

Ответ 2

Интересно, почему нет примера самостоятельного проекта jar.

В eclipse мы просто устанавливаем флажок "Является ли библиотека" в диалоговом окне настройки проекта.
В студии Android я выполнил следующие шаги и получил файл jar.

  • Создайте проект.

  • открыть файл в левом меню проекта. (app/build.gradle): Gradle Скрипты > build.gradle(Module: XXX)

  • измените одну строку: apply plugin: 'com.android.application''apply plugin: com.android.library'

  • удалить applicationId в файле: applicationId "com.mycompany.testproject"

  • проект сборки: Build > Rebuild Project

  • тогда вы можете получить файл aar: app > build > output > aar folder

  • изменить aar имя расширения файла в zip

  • unzip, и вы можете увидеть classes.jar в папке. переименовать и использовать его!

Во всяком случае, я не знаю, почему google делает создание jar настолько неприятным в студии Android.

Ответ 3

Googles Gradle Рекомендуемый способ плагина для настройки ваших файлов Gradle для создания нескольких проектов имеет некоторые недостатки. Если у вас несколько проектов в зависимости от одного проекта библиотеки, этот пост кратко объясняет рекомендуемую конфигурацию Google, ее недостатки и рекомендуют другую способ настроить ваши файлы Gradle для поддержки многопроектных настроек в Android Studio:

Альтернативная мультипроектная установка для студии Android

Другой способ:

Оказывается, лучший способ управлять несколькими проектами в Android Studio. Хитрость заключается в том, чтобы создать отдельные проекты для Android Studio для ваших библиотек и сообщить Gradle, что модуль для библиотеки, зависящей от вашего приложения, находится в каталоге проектов библиотек. Если вы хотите использовать этот метод с описанной выше структурой проекта Ive, вы должны сделать следующее:

  • Создайте проект Android Studio для библиотеки StickyListHeaders.
  • Создайте проект Android Studio для App2
  • Создайте проект Android Studio для App1
  • Настроить App1 и App2 для сборки модулей в проекте StickyListHeaders.

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

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

Код должен содержать settings.gradle:

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

Если вы сделали это правильно, вы заметите, что модули, на которые ссылается ваш проект, будут отображаться в навигаторе проекта, даже если эти модули являются внешними для каталога проекта:

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

Это позволяет одновременно работать с кодом библиотеки и кодом приложения. Интеграция управления версиями также отлично работает, когда вы ссылаетесь на модули извне таким образом. Вы можете фиксировать и вносить изменения в код библиотеки так же, как вы можете совершать и вносить изменения в свой код приложения.

Этот способ настройки нескольких проектов позволяет избежать трудностей, которые угрожают рекомендуемой конфигурации Google. Поскольку мы ссылаемся на модуль, который находится за пределами каталога проекта, нам не нужно делать дополнительные копии библиотечного модуля для каждого приложения, которое зависит от него, и мы можем обновлять наши библиотеки без каких-либо несовместимых подмодулей git.

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

Ответ 4

Обратите внимание на ссылку о нескольких настройках проекта.

Некоторые вещи, чтобы указать, убедитесь, что у вас обновлены настройки .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, в то время как любой сборщик библиотек библиотеки должен использовать плагин com.android.library.

Идентификатор Android Studio должен обновиться, если вы можете создать из командной строки эту настройку.

Ответ 5

Для Intellij IDEA (и Android Studio) каждая библиотека является модулем. Подумайте о модуле в Android Studio как эквивалент проекта в Eclipse. Проект в Android Studio представляет собой набор модулей. Модули могут быть запущенными приложениями или библиотечными модулями.

Итак, чтобы добавить новый проект библиотеки для Android, вам нужно создать модуль типа "Android-библиотека". Затем добавьте этот библиотечный модуль в список зависимостей вашего основного модуля (Application module).

Ответ 6

Самый простой способ для создать и повторно использовать проект библиотеки:

  • В открывшемся проекте file > new > new module (и ответьте на вопросы пользовательского интерфейса)

enter image description here

  1. проверить/или добавить, если в файле settings.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 {...}

подробнее здесь

Ответ 7

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

Если вы хотите переместить модуль в любое место на своем компьютере, просто переместите папку модуля (модули полностью независимы), тогда вам придется ссылаться на модуль.

Чтобы ссылаться на этот модуль, вы должны:

  • В файле build.gradle вашего приложения добавьте:

    dependencies {
    ...
    compile project(':myandroidlib')
    }
    
  • В файле settings.gradle добавьте следующее:

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

Ответ 8

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

Ответ 9

Имел тот же вопрос и решил его следующим образом:

Начальная ситуация:

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

Цель: хотите добавить модуль с именем dataformats

  • Добавить новый модуль (например: Java Library)
  • Убедитесь, что ваш settings.gradle выглядит так (обычно автоматически):

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

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

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

Ответ 10

В качестве комментария по электронной почте выше, я пытаюсь найти 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 версии моего приложения: pro и trial с 2-мя различными именами пакетов, которые являются 2-мя приложениями в вышеприведенном коде, поэтому я могу загрузить их в Google Play. Я все еще просто код в разделе "main" и использую getpackageName для переключения между версиями. Просто перейдите по ссылке, которую я дал для деталей.

Ответ 12

Способ документирования

Это рекомендуемый способ в соответствии с рекомендациями, приведенными в документации для Android Studio.

Создать библиотечный модуль

Создайте новый проект, чтобы сделать вашу библиотеку. Нажмите Файл > Создать > Новый модуль > Библиотека Android > Далее > (выберите имя) > Готово. Затем добавьте все классы и ресурсы, которые вы хотите использовать в своей библиотеке.

Когда вы создадите модуль, будет создан файл AAR. Вы можете найти его в project-name/module-name/build/outputs/aar/.

Добавьте свою библиотеку в качестве зависимости

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

  • Импортируйте файл AAR вашей библиотеки с помощью Файл > Новый модуль > Импорт пакета .JAR/.AAR > Далее > (выберите расположение файла) > Готово. (Не импортируйте код, иначе он будет доступен для редактирования в слишком многих местах.)
  • В файле settings.gradle убедитесь, что у вас есть имя вашей библиотеки.

    include ':app', ':my-library-module'
    
  • В файле app build.gradle добавьте строку компиляции в раздел зависимостей:

    dependencies {
        compile project(":my-library-module")
    }
    
  • Вам будет предложено синхронизировать ваш проект с gradle. Сделайте это.

Что это. Теперь вы сможете использовать свою библиотеку.

Примечания

Если вы хотите сделать вашу библиотеку доступной для более широкой аудитории, рассмотреть возможность использования JitPac или JCenter.

Ответ 13

Есть два простых способа, если один из них не работает, попробуйте другой.

  • Добавить зависимость внутренней зависимости библиотеки внутри файла build.gradle библиотеки u r и вставить библиотеку ur во внешних библиотеках.

ИЛИ

  1. Просто перейдите в папку libs внутри папки приложения и вставьте все ваши .jar, например, файлы библиотеки там. Теперь трюк в том, что теперь выходите в settings.gradle, теперь добавьте эту строку "include": app: libs "after", include ': app' "Это определенно работает...........:)

Ответ 14

В моем случае, используя MAC OS X 10.11 и Android 2.0, и делая именно то, что объяснил Акиб Мамтаз.

Но каждый раз у меня было это сообщение: "Проблема возникла при настройке проекта": app '. > Невозможно оценить модуль xxx: Конфигурация с именем "default" не найдена. "

Я обнаружил, что причина этого сообщения в том, что Android 2.0 не позволяет напрямую создавать библиотеку. Итак, я решил сначала создать проект приложения, а затем изменить build.gradle, чтобы преобразовать его как библиотеку.

Это решение не работает, потому что проект библиотеки отличается от проекта приложения.

Итак, я решил мою проблему следующим образом:

  • Сначала создайте стандартное приложение (если необходимо);
  • Затем выберите "Файл/Создать модуль"
  • Перейдите к поиску и переместите папку модуля, только что созданного в каталоге фрейма

Затем продолжим решение, предложенное Акибом Мумтазом.

В результате ваш источник библиотеки будет передан без необходимости дублировать исходные файлы каждый раз (это была ересь для меня!)

Надеемся, что это поможет вам.