È possibile dichiarare il repository git come dipendenza in Android Gradle?


Risposte:


150

Per me il modo migliore è:

https://jitpack.io

Passaggio 1. Aggiungi il repository JitPack a build.gradle alla fine dei repository:

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

Passaggio 2. Aggiungere la dipendenza nel modulo

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

È possibile creare l'ultimo commit sul ramo master, ad esempio:

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

6
Se vuoi l'ultimo master, usa la versione -SNAPSHOT jitpack.io/docs/#snapshots
Andrejs

5
questo è spam immagino. ma voglio davvero dire che jitpack.io è davvero davvero davvero fantastico ..............
Eric

5
Assicurati di metterlo nella sezione principale, non inbuildscript
Sergei Ledvanov

Che cos'è "TAG" ??
Makalele

@Makalele, "TAG" è un tag git (qualsiasi commit taggato, ad esempio, qualche release). docs
sunnyday

40

Oppure puoi registrare un repository come sottomodulo come questo

$ git submodule add my_sub_project_git_url my-sub-project

Quindi includi il progetto nel tuo file settings.gradle che dovrebbe assomigliare a questo

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

Infine, compila il progetto come dipendenza nel file build.gradle dell'applicazione in questo modo

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

Quindi, quando cloni il tuo progetto, dovrai solo aggiungere l'opzione --recursiveper fare in modo che git cloni automaticamente il repository di root e tutti i suoi sottomoduli.

git clone --recursive my_sub_project_git_url

Spero possa essere d'aiuto.


Normalmente non lo scrivo nei commenti, ma in questo caso devo solo dire "Santo cielo, amico! È fantastico, grazie amico!" :-)
L.Butz

Sono d'accordo con @MisterSmith, i sottomoduli Git spesso tornano per mordere te e gli altri ..
AO_

13

Ora c'è una nuova funzionalità in gradle che ti consente di aggiungere dipendenze di origine da git.

Devi prima definire il repository nel settings.gradlefile e mapparlo a un identificatore di modulo:

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

E ora nel tuo build.gradlepuoi puntare a un tag specifico (ad esempio: 'v1.0'):

dependencies {
    ...

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

O a un ramo specifico:

dependencies {
    ...

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

Avvertenze:

  • Grado 4.10 o superiore richiesto
  • Non supporta ancora l'autenticazione

Riferimenti:


Sarebbe fantastico se questo potesse funzionare anche con l'IDE: ho provato a usare sourceControl per una delle mie librerie nel mio progetto Android (con Android Studio 3.4.1), l'IDE non è in grado di fare "gradle sync" e i file sorgenti lo fanno non vedo la libreria ... ..ma se compilo tramite riga di comando usando "./gradlew build" tutto funziona.
gabry

Non sono sicuro che sia solo io, ma ho dovuto affrontare molti problemi con questo, specialmente quando la libreria ha l'associazione dati. Per uno, lo script gradle genera un NPE e non può individuare la cartella sdk per il compilatore di associazione dati durante la creazione automatica del repository git. android.googlesource.com/platform/tools/base/+/… Ho finito per dover eseguire il commit delle mie proprietà local.properties ma ho riscontrato anche altri problemi
humblerookie

6

Non credo che Gradle supporti l'aggiunta di un repository git come dipendenza. La mia soluzione alternativa è:

  • dichiarare che il progetto principale dipende da un altro progetto nel filesystem
  • fornire un modo per clonare automaticamente il repository git nella cartella dichiarata come dipendenza

Presumo che tu voglia il repository della libreria fuori dalla cartella del repository del progetto principale, quindi ogni progetto sarà repository git indipendente e puoi eseguire commit nella libreria e nei repository git del progetto principale in modo indipendente.

Supponendo che tu voglia avere la cartella del progetto libreria nella stessa cartella della cartella del progetto principale,

Potresti:

In settings.gradle di primo livello, dichiara il repository della libreria come un progetto, data la sua posizione nel filesystem

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

Usa il plugin gradle-git per clonare la libreria dal repository 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
        }

Nelle dipendenze del tuo progetto, dì che il codice del tuo progetto dipende dalla cartella del progetto git

dependencies {
    compile project(':lib_project')
}

Gradle ora supporta le dipendenze dalla sorgente con alcune limitazioni. Vedi la mia risposta qui
Mister Smith,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.