6

Я начал работать над проектом, где мне нужно будет поделиться кучей классов Java через кучу приложений. В Eclipse удалось создать один проект со всеми такими классами и использовать его как библиотеку в рабочей области со всеми вашими зависимыми проектами, но в Android Studio это не представляется возможным (по крайней мере, не так просто).Обмен кодами в Android Studio

Я читал кучу сообщений, и многие из них предлагают создать проект библиотеки, генерируя файл aar, а затем используя это в моих проектах. Но, как я понимаю, это сделает мою библиотеку открытой исходной (я прав?), Чего я не хочу. Я делаю это для клиента, и я хочу, чтобы база кода была закрытой.

Кроме того, я знаю, что модуль может быть импортирован в новый проект. Но это создает КОПИЮ исходного модуля. Это совсем не то, чего я хочу. Я не хочу поддерживать несколько копий тех же классов, что полностью нарушает цель «обмена кодами».

Есть ли хороший способ добиться того, что я ищу? Любая помощь приветствуется.

+0

Я редактировал вопрос с более точным объяснением того, что было возможно с Eclipse. –

+0

@greenapps, ваш комментарий не является конструктивным. Сначала задайте свой вопрос, и если по какой-то странной причине вы ничего не найдете в библиотечных проектах, вернитесь сюда и задайте вопрос. – 323go

+2

Генерация AAR НЕ выставляет код. Проверьте [мой собственный вопрос об этом] (http://stackoverflow.com/questions/26531709/create-android-library-aar-including-javadoc-and-sources) – jmm

ответ

7

У вас есть пара различных вариантов.

Одним из вариантов является сохранение ваших библиотек в виде отдельных проектов и их компиляция в формат архива, такой как JAR или AAR; Файлы JAR предназначены для чистых библиотек Java, а AAR - для Android-библиотек (которые содержат код, который обращается к API Android и/или имеет ресурсы Android). Как отмечалось в комментариях, AAR не заставляет вас публиковать свой код в мире больше, чем файлы JAR; это просто формат архивного файла, файлы которого могут быть локальными для вашего компьютера или вашей организации.

С помощью этого архивного файла вы можете включить его в другие проекты.Если вы являетесь частью организации с несколькими разработчиками, вам может быть удобно использовать диспетчер репозитория для публикации и поддержки этих библиотек в вашей организации, и вы можете использовать спецификации координат Maven для включения библиотек в ваши проекты, которые вам не нужно вручную копировать на вашу машину разработки.

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

Другой подход - сохранить библиотеку в качестве исходного модуля, как в Eclipse. Вы заметили, что Android Studio сделает копию модуля, если вы импортируете его через пользовательский интерфейс, но если вы обойдете пользовательский интерфейс и внесите изменения в скрипты сборки напрямую, вы можете делать то, что хотите, а именно использовать модуль на месте и делиться одна копия нескольких проектов. Чтобы сделать это, работа в вашем settings.gradle файл и добавьте это:

include ':module_name' 
project(':module_name').projectDir = new File(settingsDir, '../relative/path/to/module') 

Я бы настоятельно рекомендуем вам не использовать чистый относительный путь здесь; в этом примере путь привязан к переменной settingsDir, предоставленной Gradle, которая определена как каталог, в котором установлено settings.gradle. Если вы используете чистый относительный путь (т. Е. Не привязаны ни к чему), вы зависите от того, что рабочий каталог является одинаковым во всех средах, где выполняется файл сборки (командная строка против Android Studio против сервера CI) что нехорошо предположить.

+0

Спасибо большое Скотту! Я исследовал ваше первое предложение и в итоге нашел этот полезный пост о том, как достичь решения. http://b2cloud.com.au/tutorial/using-local-android-library-packages-aar/. –

+0

@Scott Barta, не могли бы вы объяснить немного больше, почему использование настроекDir в качестве якоря лучше, чем использование чистого относительного пути? Способ, которым я это вижу, - библиотечный модуль ДОЛЖЕН всегда находиться в фиксированном пути относительно настроек проекта проекта. - независимо от того, находитесь ли вы в CLI/AS/CI. Поэтому, независимо от того, используете ли вы привязанный относительный путь или чистое значение, это не имеет значения. Что мне здесь не хватает? – curioustechizen

+2

@curioustechizen Путь не относится к каталогу, содержащему settings.gradle, по отношению к рабочему каталогу при выполнении скрипта сборки. Последнее зависит от того, где вы выполняете команду, если вы строите из командной строки, или капризы среды IDE, если вы выполните из Android Studio. Лучше сделать это явным. –

2

Вам необходимо подумать в проектах затмения как модули Android Studio/IntelliJ Idea. Затем вы можете создавать библиотеки Android (или java), а затем включать их в свой проект.

Чтобы отметить модуль Android Studio в качестве библиотеки вы можете пойти в Файл ->Структура проекта ->Грани и там нажмите на модуле Library

enter image description here

+0

Действительно. Они понимают, что проект Android Studio аналогичен рабочему пространству Eclipse. –

0

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

Во-первых, вам не нужно делать это aar, если оно не содержит ресурсов. Если это простые классы, вы можете просто сделать это .jar-файлом.

В любом случае, самый простой способ поделиться этими библиотеками (ааром или банком) - это создать свой собственный репозиторий. Nexus и Artifactory являются двумя наиболее распространенными менеджерами хранилищ.

Вы храните библиотеку в своем собственном проекте, а затем публикуете ее в своем собственном репозитории.

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

0

Я был в такой же ситуации, как и вы, и я основал подход, используя git. Метки: есть, есть библиотека:

  1. Создать проект в Android Studio.
  2. Создайте модуль библиотеки Android в этом проекте.
  3. В этом библиотечном модуле создается репозиторий git.
  4. Добавить modulename.iml в .gitignore
  5. Использование GitHub или Bitbucket для частного облачного хранилища. и нажмите на свою библиотеку.
  6. Создайте новую версию библиотеки Android в любом проекте, который вы хотите.
  7. Закрыть Android Studio (не уверен, что это обязательно).
  8. Использование проводника перейдите в папку созданного модуля.
  9. Удалить все данные, кроме modulename.iml.
  10. Клонировать вашу библиотеку из «GitHub» в нее.

Это все.

Теперь вы можете использовать библиотеку в нескольких проектах независимо от того, находитесь ли вы дома или на работе. Как только вы закончите, вы не забываете пропустить изменения в библиотеке. И после открытия новых вытащите их. Я думаю, что вы можете каким-то образом автоматизировать эту вещь.

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

Смежные вопросы