是否可以在Android Gradle中将git仓库声明为依赖项?


Answers:


150

对我来说最好的方法是:

https://jitpack.io

步骤1.在存储库末尾将JitPack存储库添加到build.gradle:

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

步骤2.在表单中添加依赖项

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

可以在master分支上构建最新的提交,例如:

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

6
如果您想要最新的母版,-SNAPSHOT
Andrejs

5
我猜这是垃圾邮件。但是我真的想说jitpack.io真的非常酷…… ..
埃里克

5
确保将其放到主要部分,而不是放到buildscript
Sergei Ledvanov '17

什么是“ TAG”?
Makalele '17

@Makalele,“ TAG”是git标签(任何带标签的提交,例如,某些发行版)。docs
sunnyday

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

希望对您有所帮助。


我通常不会在评论中写这个,但是在这种情况下,我只需要说“天哪,伙计!太酷了,谢谢!” :-)
L.Butz

我同意@MisterSmith的观点,Git子模块经常会再次咬你和其他人
。.– AO_

12

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或更高版本
  • 尚不支持身份验证

参考文献:


如果这也可以与IDE一起使用,那就太好了:我尝试对我的android项目(使用Android Studio 3.4.1)中的库之一使用sourceControl,IDE无法执行“渐变同步”,而源文件可以没有看到库.....但是,如果我使用“ ./gradlew build”通过命令行进行构建,则一切正常。
gabry19年

我不确定是否只有我一个人,但是与此同时我遇到了很多问题,尤其是当库具有数据绑定时。例如,gradle脚本抛出一个NPE,并且在自动构建git repo时找不到数据绑定编译器的sdk文件夹。android.googlesource.com/platform/tools/base / + / ... 我最终不得不提交我的local.properties,但是我也遇到了其他问题
humblerookie

6

我不认为Gradle支持添加git存储库作为依赖项。我的解决方法是:

  • 声明主项目依赖于文件系统中的另一个项目
  • 提供一种自动克隆声明为依赖项的文件夹中的git repo的方法

我假设您希望库回购位于主项目回购文件夹的外部,因此每个项目都将是独立的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')
}

Gradle现在支持具有某些限制的源依赖项。在这里
史密斯先生(Mr Smith)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.