Можно ли объявить репозиторий git зависимостью в Android Gradle?

Я хочу использовать основную версию моей библиотеки от mavencentral.

Можно ли объявить репозиторий git зависимостью в Android Gradle?


person Alexey Zakharov    schedule 11.09.2013    source источник
comment
ты нашел какое-нибудь решение?   -  person Sahir Saiyed    schedule 03.08.2015


Ответы (6)


Для меня лучший способ:

https://jitpack.io

Шаг 1. Добавьте репозиторий JitPack в build.gradle в конце репозиториев:

repositories {
    // ...
    maven { url "https://jitpack.io" }
}

Шаг 2. Добавьте зависимость в форму

dependencies {
    implementation 'com.github.User:Repo:Tag'
}

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

dependencies {
    implementation 'com.github.jitpack:gradle-simple:master-SNAPSHOT'
}
person sunnyday    schedule 20.09.2015
comment
Если вам нужен последний мастер, используйте версию -SNAPSHOT jitpack.io/docs/#snapshots - person Andrejs; 21.09.2015
comment
я думаю, это спам. но я действительно хочу сказать, что jitpack.io действительно действительно здорово ........... ... - person Eric; 25.06.2016
comment
Убедитесь, что вы поместили это в основной раздел, а не в buildscript - person Sergei Ledvanov; 07.08.2017
comment
Что такое ТАГ ?? - person Makalele; 14.12.2017
comment
@Makalele, TAG - это тег git (любой помеченный коммит, например, какой-то выпуск). документы - person sunnyday; 14.12.2017
comment
Даже если Jitpack великолепен, это не вариант для многих, так как он оплачивается за частные репозитории. - person Stan; 31.07.2018
comment
Одно небольшое предостережение: я мог заставить свою сборку работать с кодом ветки, только добавив -SNAPSHOT в конце. В противном случае будет выдана ошибка, не найденная. - person hcabral; 07.03.2019
comment
Обратите внимание, что Jitpack можно использовать бесплатно только для проектов с открытым исходным кодом. - person Mister Smith; 27.06.2019
comment
Добавьте репозиторий JitPack в build.gradle в конце репозиториев: эта часть действительно имеет значение, иначе вы можете получить странные ошибки сборки. - person lasec0203; 27.05.2020

Или вы можете зарегистрировать репозиторий как подмодуль, подобный этому

$ git submodule add my_sub_project_git_url my-sub-project

Затем включите проект в свой файл settings.gradle, который должен выглядеть так:

include ':my-app', ':my-sub-project'

Наконец, скомпилируйте проект как зависимость в файле build.gradle вашего приложения, как это

dependencies {
  compile project(':my-sub-project')
}

Затем при клонировании проекта вам нужно будет только добавить параметр --recursive, чтобы git автоматически клонировал корневой репозиторий и все его подмодули.

git clone --recursive my_sub_project_git_url

Я надеюсь, что это помогает.

person trupin    schedule 22.04.2015
comment
Обычно я не пишу об этом в комментариях, но в этом случае я просто должен сказать «Черт возьми, чувак!» Это так здорово, спасибо, чувак! :-) - person L.Butz; 24.08.2018
comment
Я согласен с @MisterSmith, подмодули Git часто возвращаются, чтобы укусить вас и других .. - person AO_; 16.07.2019
comment
Много работы над чем-то, что должно быть простым. - person AndroidDev; 17.03.2021

Теперь в gradle появилась новая функция, которая позволяет добавлять исходные зависимости из git.

Сначала вам нужно определить репо в файле settings.gradle и сопоставить его с идентификатором модуля:

sourceControl {
    gitRepository("https://github.com/gradle/native-samples-cpp-library.git") {
        producesModule("org.gradle.cpp-samples:utilities")
    }
}

И теперь в вашем build.gradle вы можете указать на конкретный тег (например: 'v1.0'):

dependencies {
    ...

    implementation 'org.gradle.cpp-samples:utilities:v1.0'
}

Или в конкретную ветку:

dependencies {
    ...

    implementation('org.gradle.cpp-samples:utilities') {
        version {
            branch = 'release'
        }
    }
}

Предостережения:

  • Требуется Gradle 4.10 или выше
  • Пока не поддерживает аутентификацию

Ссылки:

person Mister Smith    schedule 27.06.2019
comment
Было бы здорово, если бы это могло работать и с IDE: я пробовал использовать sourceControl для одной из моих библиотек в моем проекте Android (с Android Studio 3.4.1), IDE не может выполнять синхронизацию gradle, а исходные файлы не видны библиотека ... ..но если я построю через командную строку с помощью ./gradlew build, все заработает. - person gabry; 03.07.2019
comment
Я не уверен, что это только я, но я столкнулся с множеством проблем, особенно когда в библиотеке есть привязка данных. Во-первых, скрипт gradle выдает NPE и не может найти папку sdk для компилятора привязки данных при автоматическом создании репозитория git. android.googlesource.com/platform/tools/base / + / Мне пришлось зафиксировать свои local.properties, однако я столкнулся с другими проблемами - person humblerookie; 02.04.2020
comment
Мне не очень везет с этим. Почти 2 года спустя, он практически не задокументирован, имеет очень мало вариантов, нет хороших примеров и, похоже, работает только для идеальных репозиториев. - person Grant Birchmeier; 30.04.2021

Я не думаю, что Gradle поддерживает добавление репозитория git в качестве зависимости. Мое решение:

  • объявить, что основной проект зависит от другого проекта в файловой системе
  • предоставить способ автоматического клонирования репозитория git в папке, объявленной как зависимость

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

Предполагая, что вы хотите, чтобы папка проекта библиотеки находилась в той же папке, что и папка основного проекта,

Ты мог бы:

В файле settings.gradle верхнего уровня объявите репозиторий библиотеки как проект, учитывая его расположение в файловой системе.

// Reference:  https://looksok.wordpress.com/2014/07/12/compile-gradle-project-with-another-project-as-a-dependency/

include ':lib_project'
project( ':lib_project' ).projectDir = new File(settingsDir, '../library' )

Используйте плагин gradle-git, чтобы клонировать библиотеку из репозитория git.

    import org.ajoberstar.gradle.git.tasks.*

    buildscript {
       repositories { mavenCentral() }
       dependencies { classpath 'org.ajoberstar:gradle-git:0.2.3' }
    }

    task cloneLibraryGitRepo(type: GitClone) {
            def destination = file("../library")
            uri = "https://github.com/blabla/library.git"
            destinationPath = destination
            bare = false
            enabled = !destination.exists() //to clone only once
        }

В зависимостях вашего проекта скажите, что код вашего проекта зависит от папки проекта git.

dependencies {
    compile project(':lib_project')
}
person GaRRaPeTa    schedule 25.11.2014
comment
Gradle теперь поддерживает исходные зависимости с определенными ограничениями. См. Мой ответ здесь - person Mister Smith; 27.06.2019

Самое близкое, что я нашел, - это https://github.com/bat-cha/gradle-plugin-git-dependencies, но я не могу заставить его работать с подключаемым модулем Android, продолжает пытаться вытащить из maven даже после загрузки репозиториев git.

person sgarman    schedule 13.11.2013

ответ @Mister Smith почти сработал для меня, единственная разница заключалась в том, что вместо передачи URI репозитория как String ему нужно было быть URI, то есть:

sourceControl {
    gitRepository(new URI("https://github.com/gradle/native-samples-cpp-library.git")) {
        producesModule("org.gradle.cpp-samples:utilities")
    }
}

Я использую Gradle 6.8.

person asherbar    schedule 19.05.2021