Совместное использование библиотеки Android между несколькими приложениями Android с использованием Gradle

У меня Android-приложения A и B. Я хочу извлечь дубликат кода из каждой в общую библиотеку L. Как я могу сделать это с помощью Gradle? Я видел несколько перестановок этого вопроса, заданных раньше, но ответов было очень мало.

Самый близкий / лучший уже заданный вопрос:

Несколько приложений для Android в зависимости от библиотеки Android с градиентом

Первый ответ предполагает родительский проект, который охватывает как приложения, так и библиотечный модуль. Эта связь нежелательна, отчасти потому, что A, B и L находятся в собственном репозитории Git, но также потому, что она будет включать в себя родительский проект и файлы сборки, которые трудно будет установить в исходное управление (или будет включать ручное копирование Другие проекты). Так как Android Studio по умолчанию предпочитает родительскую сборку для одномодульных проектов … Ну, это просто много родителей для того, что должно быть простой семьей. Это действительно кажется ненужной связью между проектами, которые в противном случае полностью не связаны.

Второй ответ предполагает освобождение AAR до репо и обращение к удаленной библиотеке в каждом проекте. Мне было бы хорошо с этим подходом, так как у нас есть локальный репозиторий Nexus, но, похоже, нет простого способа сделать это без ручного управления версиями / именования и загрузки файлов (это неустойчиво). Я пытаюсь использовать плагин Sonatype gradle-release, но, похоже, для JAR (не AAR).

Это просто похоже на много движущихся частей, что составляет самую основную форму совместного использования кода между приложениями Android. У кого-нибудь есть лучшее решение?

Solutions Collecting From Web of "Совместное использование библиотеки Android между несколькими приложениями Android с использованием Gradle"

Лучше всего пойти по маршруту аранжировки и опубликовать его на веб-сайте http://www.vandalsoftware.com/post/52468430435/publishing-an-android-library-aar-to-a-maven

Я смог удалить много материалов для SonaType, так как у нас есть собственный репозиторий Nexus, который его не использует. Мой файл gradle.build (файл модуля, а не корень) выглядел следующим образом:

buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.7.1' } } apply plugin: 'android-library' apply plugin: 'maven' version = 0.3 group = "com.whatevs.android.commons" uploadArchives { repositories.mavenDeployer { repository(url: 'http://nexus.whatevs.net:8081/nexus/content/repositories/internal-release') { } pom.project { packaging 'aar' scm { url 'scm:git:ssh://git@whatevs.net:7999/Mobile/android-commons.git' connection 'scm:git:ssh://git@whatevs.net:7999/Mobile/android-commons.git' developerConnection 'scm:git:ssh://git@whatevs.net:7999/Mobile/android-commons.git' } } } } repositories { mavenCentral() } android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersion 14 targetSdkVersion 19 } release { runProguard false proguardFile 'proguard-rules.txt' proguardFile getDefaultProguardFile('proguard-android.txt') } } dependencies { } 

Согласно официальному документу Android ( https://developer.android.com/studio/projects/android-library.html ): при импорте модуля библиотечный модуль копируется в ваш проект, поэтому вы можете редактировать код библиотеки. Если вы хотите сохранить одну версию кода библиотеки, то это, вероятно, не то, что вы хотите, и вместо этого вы должны импортировать скомпилированный файл AAR, как описано выше.

Существует еще один вариант, git-подмодуль. Вы можете сделать свое приложение ссылкой на SHA вашей библиотеки. Таким образом, для библиотеки есть только один экземпляр. Каждое приложение использует только SHA. Вы должны уделять немного больше внимания управлению филиалами библиотеки. Проверьте это для деталей: https://github.com/blog/2104-working-with-submodules