Ist es möglich, Git-Repository als Abhängigkeit in Android Gradle zu deklarieren?

112

Ich möchte die Master-Version meiner Bibliothek von mavencentral verwenden.

Ist es möglich, Git-Repository als Abhängigkeit in Android Gradle zu deklarieren?

Alexey Zakharov
quelle
3
Hast du eine Lösung gefunden?
Sahir Saiyed

Antworten:

150

Für mich ist der beste Weg:

https://jitpack.io

Schritt 1. Fügen Sie das JitPack-Repository am Ende der Repositorys zu build.gradle hinzu:

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

Schritt 2. Fügen Sie die Abhängigkeit in das Formular ein

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

Es ist möglich, das neueste Commit für den Hauptzweig zu erstellen, zum Beispiel:

dependencies {
    compile 'com.github.jitpack:gradle-simple:master-SNAPSHOT'
}
sonniger Tag
quelle
6
Wenn Sie den neuesten Master möchten, verwenden Sie die Version -SNAPSHOT jitpack.io/docs/#snapshots
Andrejs
5
Das ist wohl Spam. aber ich möchte wirklich sagen, dass jitpack.io wirklich wirklich sehr, sehr cool ist ..............
Eric
5
buildscript
Stellen
Was ist "TAG"?
Makalele
@Makalele, "TAG" ist ein Git-Tag (jedes getaggte Commit, zum Beispiel eine Version). docs
Sonnentag
40

Oder Sie können ein Repository wie folgt als Submodul registrieren

$ git submodule add my_sub_project_git_url my-sub-project

Fügen Sie dann das Projekt in Ihre settings.gradle-Datei ein, die so aussehen sollte

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

Kompilieren Sie das Projekt schließlich als Abhängigkeit in Ihrer Anwendungsdatei build.gradle wie folgt

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

Wenn Sie dann Ihr Projekt klonen, müssen Sie nur die Option hinzufügen --recursive, dass git das Root-Repository und alle seine Submodule automatisch klont.

git clone --recursive my_sub_project_git_url

Ich hoffe, es hilft.

Trupin
quelle
Normalerweise schreibe ich das nicht in die Kommentare, aber in diesem Fall muss ich nur sagen "Heilige Scheiße, Alter! Das ist so cool, danke Mann!" :-)
L.Butz
Ich stimme @MisterSmith zu, Git-Submodule kommen oft zurück, um dich und andere zu beißen.
AO_
12

In gradle gibt es jetzt eine neue Funktion, mit der Sie Quellabhängigkeiten von git hinzufügen können.

Sie müssen zuerst das Repo in der settings.gradleDatei definieren und es einer Modulkennung zuordnen:

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

Und jetzt können build.gradleSie in Ihrem auf ein bestimmtes Tag verweisen (zB: 'v1.0'):

dependencies {
    ...

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

Oder zu einem bestimmten Zweig:

dependencies {
    ...

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

Vorsichtsmaßnahmen:

  • Gradle 4.10 oder höher erforderlich
  • Unterstützt die Authentifizierung noch nicht

Verweise:

Herr Smith
quelle
Es wäre großartig, wenn dies auch mit der IDE funktionieren könnte: Ich habe versucht, sourceControl für eine meiner Bibliotheken in meinem Android-Projekt (mit Android Studio 3.4.1) zu verwenden. Die IDE kann keine "Gradle-Synchronisierung" durchführen und Quelldateien nicht Ich sehe die Bibliothek nicht ... ... aber wenn ich über die Befehlszeile mit "./gradlew build" baue, funktioniert alles.
Gabry
Ich bin mir nicht sicher, ob es nur ich ist, aber ich hatte viele Probleme damit, insbesondere wenn die Bibliothek über Datenbindung verfügt. Zum einen löst das Gradle-Skript eine NPE aus und kann den SDK-Ordner für den Datenbindungs-Compiler nicht finden, während das Git-Repo automatisch erstellt wird. android.googlesource.com/platform/tools/base/+/… Ich musste schließlich meine local.properties festschreiben, stieß aber auch auf andere Probleme
humblerookie
6

Ich glaube nicht, dass Gradle das Hinzufügen eines Git-Repositorys als Abhängigkeit unterstützt. Meine Problemumgehung ist:

  • Deklarieren Sie, dass das Hauptprojekt von einem anderen Projekt im Dateisystem abhängt
  • bieten eine Möglichkeit, das Git-Repo automatisch in den als Abhängigkeit deklarierten Ordner zu klonen

Ich gehe davon aus, dass Sie das Bibliotheks-Repo außerhalb des Ordners des Hauptprojekt-Repos haben möchten, sodass jedes Projekt unabhängige Git-Repos sind und Sie unabhängig voneinander Commits für die Bibliothek und die Hauptprojekt-Git-Repositorys vornehmen können.

Angenommen, Sie möchten, dass sich der Ordner des Bibliotheksprojekts im selben Ordner befindet wie der Ordner des Hauptprojekts.

Du könntest:

Deklarieren Sie in der Datei settings.gradle der obersten Ebene das Bibliotheksrepository als Projekt, da es sich im Dateisystem befindet

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

Verwenden Sie das Gradle-Git-Plugin , um die Bibliothek aus dem Git-Repository zu klonen

    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
        }

Angenommen, der Code Ihres Projekts hängt in den Abhängigkeiten Ihres Projekts vom Ordner des Git-Projekts ab

dependencies {
    compile project(':lib_project')
}
GaRRaPeTa
quelle
Gradle unterstützt jetzt Quellabhängigkeiten mit bestimmten Einschränkungen. Siehe meine Antwort hier
Mister Smith