Чи можна оголосити сховище git як залежність в android gradle?


Відповіді:


150

Для мене найкращий спосіб:

https://jitpack.io

Крок 1. Додайте сховище JitPack до build.gradle в кінці сховищ:

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

Крок 2. Додайте залежність у форму

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

На головній гілці можна побудувати останню комісію, наприклад:

dependencies {
    compile 'com.github.jitpack:gradle-simple:master-SNAPSHOT'
}

6
Якщо ви хочете останнього майстра, тоді використовуйте версію -SNAPSHOT jitpack.io/docs/#snapshots
Andrejs

5
це спам, я здогадуюсь. але я дуже хочу сказати, що jitpack.io насправді дуже крутий ..............
Ерік,

5
Переконайтесь, що ви розмістили це на головному розділі, а не наbuildscript
Сергій Ледванов

Що таке "TAG" ??
Макалеле

@Makalele, "TAG" - це тег git (будь-який позначений тег, наприклад, якийсь реліз). Документи
сонячний день

40

Або ви можете зареєструвати сховище як такий підмодуль

$ 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

Я сподіваюся, що це допомагає.


Я зазвичай не пишу цього в коментарях, але в цьому випадку я просто повинен сказати "Боже, держ! Це так здорово, дякую людино!" :-)
Л.Буц

Я погоджуюсь з @MisterSmith, підмодулі Git часто повертаються, щоб вкусити вас та інших.
AO_

13

Зараз у 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'
        }
    }
}

Застереження:

  • Потрібна ступінь 4.10 або вище
  • Ще не підтримує автентифікацію

Список літератури:


Буде чудово, якщо це могло б працювати і з IDE: я спробував використовувати sourceControl для однієї з моїх бібліотек в моєму проекті Android (з Android Studio 3.4.1), IDE не в змозі "синхронізувати градуси" і вихідні файли не бачити бібліотеку ... .. але якщо я будую командний рядок, використовуючи "./gradlew build", все працює.
Габрі

Я не впевнений, що це тільки я, але я зіткнувся з багатьма проблемами з цим, особливо коли бібліотека має прив'язку даних. Для одного сценарій gradle кидає NPE і не може знайти папку sdk для компілятора прив'язки даних під час автоматичного створення gpo repo. android.googlesource.com/platform/tools/base/+/… Мені в кінцевому підсумку довелося вчинити свої local.properties, однак я також натрапив на інші проблеми
humblerookie

6

Я не думаю, що Gradle підтримує додавання git-сховища як залежність. Моє вирішення:

  • заявляють, що основний проект залежить від іншого проекту у файловій системі
  • надати спосіб автоматичного клонування git repo в папці, декларованій як залежність

Я припускаю, що ви хочете, щоб бібліотека репо була поза папкою основного репорта проекту, тому кожен проект буде незалежним git repos, і ви можете робити зобов’язання перед бібліотекою та основними сховищами 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')
}

Тепер Gradle підтримує залежність джерела з певними обмеженнями. Дивіться мою відповідь тут
Містер Сміт

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