É possível declarar o repositório git como dependência no android gradle?

112

Eu quero usar a versão master da minha lib do mavencentral.

É possível declarar o repositório git como dependência no android gradle?

Alexey Zakharov
fonte
3
Você achou alguma solução ?
Sahir Saiyed

Respostas:

150

Para mim, a melhor maneira é:

https://jitpack.io

Etapa 1. Adicione o repositório JitPack a build.gradle no final dos repositórios:

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

Etapa 2. Adicionar a dependência no formulário

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

É possível construir o commit mais recente no branch master, por exemplo:

dependencies {
    compile 'com.github.jitpack:gradle-simple:master-SNAPSHOT'
}
dia ensolarado
fonte
6
Se você quiser o master mais recente, use a versão -SNAPSHOT jitpack.io/docs/#snapshots
Andrejs
5
isso é spam, eu acho. mas eu realmente quero dizer que jitpack.io é realmente muito legal ..............
Eric
5
Certifique-se de colocar isso na seção principal, não nobuildscript
Sergei Ledvanov
O que é "TAG" ??
Makalele
@Makalele, "TAG" é uma tag git (qualquer commit com tag, por exemplo, alguma versão). docs
sunnyday
40

Ou você pode registrar um repositório como um submódulo como este

$ git submodule add my_sub_project_git_url my-sub-project

Em seguida, inclua o projeto em seu arquivo settings.gradle, que deve se parecer com este

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

Finalmente, compile o projeto como uma dependência no arquivo build.gradle de seu aplicativo como este

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

Então, ao clonar seu projeto, você só terá que adicionar a opção --recursivede fazer o git clonar automaticamente o repositório raiz e todos os seus submódulos.

git clone --recursive my_sub_project_git_url

Espero que ajude.

trupin
fonte
Eu normalmente não escrevo isso nos comentários, mas nesse caso eu só tenho que dizer "Puta merda, cara! Isso é tão legal, obrigado cara!" :-)
L.Butz
Eu concordo com @MisterSmith, os submódulos Git costumam voltar para morder você e os outros ..
AO_
13

Agora há um novo recurso no gradle que permite adicionar dependências de origem do git.

Primeiro, você precisa definir o repo no settings.gradlearquivo e mapeá-lo para um identificador de módulo:

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

E agora build.gradlevocê pode apontar para uma tag específica (por exemplo: 'v1.0'):

dependencies {
    ...

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

Ou para um ramo específico:

dependencies {
    ...

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

Ressalvas:

  • Gradle 4.10 ou superior necessário
  • Ainda não suporta autenticação

Referências:

Senhor Smith
fonte
Seria ótimo se isso pudesse funcionar também com o IDE: tentei usar sourceControl para uma das minhas bibliotecas em meu projeto android (com Android Studio 3.4.1), o IDE não é capaz de fazer "gradle sync" e os arquivos de origem fazem não vejo a biblioteca ... ..mas se eu construir através da linha de comando usando "./gradlew build" tudo funciona.
gabry
Não tenho certeza se sou só eu, mas enfrentei muitos problemas com isso, especialmente quando a biblioteca tem ligação de dados. Por um lado, o script gradle lança um NPE e não consegue localizar a pasta sdk para o compilador de ligação de dados durante a construção automática do repositório git. android.googlesource.com/platform/tools/base/+/… Acabei tendo que comprometer meu local.properties, no entanto, também tive outros problemas
humblerookie
6

Não acho que o Gradle oferece suporte para adicionar um repositório git como uma dependência. Minha solução alternativa é:

  • declara que o projeto principal depende de outro projeto no sistema de arquivos
  • fornecem uma maneira de clonar automaticamente o repositório git na pasta declarada como uma dependência

Presumo que você queira o repositório da biblioteca fora da pasta do repositório principal do projeto, então cada projeto será repositório git independente e você pode fazer commits para a biblioteca e repositórios git do projeto principal independentemente.

Supondo que você deseja ter a pasta do projeto de biblioteca na mesma pasta que a pasta do projeto principal,

Você poderia:

No settings.gradle de nível superior, declare o repositório da biblioteca como um projeto, considerando sua localização no sistema de arquivos

// 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' )

Use o plugin gradle-git para clonar a biblioteca do repositório 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
        }

Nas dependências do seu projeto, diga que o código do seu projeto depende da pasta do projeto git

dependencies {
    compile project(':lib_project')
}
GaRRaPeTa
fonte
O Gradle agora oferece suporte a dependências de origem com certas restrições. Veja minha resposta aqui
Senhor Smith