¿Es posible declarar el repositorio de git como dependencia en Android Gradle?


Respuestas:


150

Para mi la mejor forma es:

https://jitpack.io

Paso 1. Agregue el repositorio JitPack a build.gradle al final de los repositorios:

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

Paso 2. Agregue la dependencia en el formulario

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

Es posible construir la última confirmación en la rama maestra, por ejemplo:

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

6
Si desea el último maestro, use la versión -SNAPSHOT jitpack.io/docs/#snapshots
Andrejs

5
esto es spam, supongo. pero realmente quiero decir que jitpack.io es realmente genial ..............
Eric

5
Asegúrese de poner esto en la sección principal, no en labuildscript
Sergei Ledvanov

¿Qué es "TAG"?
Makalele

@Makalele, "TAG" es una etiqueta git (cualquier confirmación etiquetada, por ejemplo, alguna versión). docs
soleado

40

O puede registrar un repositorio como un submódulo como este

$ git submodule add my_sub_project_git_url my-sub-project

Luego incluya el proyecto en su archivo settings.gradle que debería verse así

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

Finalmente, compile el proyecto como una dependencia en el archivo build.gradle de su aplicación como este

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

Luego, al clonar tu proyecto, solo tendrás que agregar la opción --recursivepara hacer que git clone automáticamente el repositorio raíz, y todos sus submódulos.

git clone --recursive my_sub_project_git_url

Espero que ayude.


Normalmente no escribo esto en los comentarios, pero en este caso solo tengo que decir "¡Mierda, amigo! ¡Eso es genial, gracias tío!" :-)
L.Butz

Estoy de acuerdo con @MisterSmith, los submódulos de Git a menudo vuelven para morderte a ti y a otros ..
AO_

13

Ahora hay una nueva característica en gradle que le permite agregar dependencias de origen desde git.

Primero debe definir el repositorio en el settings.gradlearchivo y asignarlo a un identificador de módulo:

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

Y ahora en su build.gradlepuede apuntar a una etiqueta específica (por ejemplo: 'v1.0'):

dependencies {
    ...

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

O a una rama específica:

dependencies {
    ...

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

Advertencias:

  • Se requiere Gradle 4.10 o superior
  • Todavía no admite la autenticación

Referencias:


Sería genial si esto pudiera funcionar también con el IDE: intenté usar sourceControl para una de mis bibliotecas en mi proyecto de Android (con Android Studio 3.4.1), el IDE no puede hacer "sincronización de gradle" y los archivos de origen sí No veo la biblioteca ... ..pero si construyo a través de la línea de comandos usando "./gradlew build" todo funciona.
gabry

No estoy seguro de si soy solo yo, pero enfrenté muchos problemas con esto, especialmente cuando la biblioteca tiene enlace de datos. Por un lado, el script gradle arroja un NPE y no puede ubicar la carpeta sdk para el compilador de enlace de datos mientras se construye automáticamente el repositorio de git. android.googlesource.com/platform/tools/base/+/… Terminé teniendo que confirmar mis propiedades locales, sin embargo, también encontré otros problemas
humblerookie

6

No creo que Gradle admita agregar un repositorio de git como dependencia. Mi solución es:

  • declarar que el proyecto principal depende de otro proyecto en el sistema de archivos
  • proporcionar una forma de clonar automáticamente el repositorio de git en la carpeta declarada como dependencia

Supongo que desea que el repositorio de la biblioteca esté fuera de la carpeta del repositorio del proyecto principal, por lo que cada proyecto será repositorio de git independiente, y puede realizar confirmaciones en la biblioteca y los repositorios de git del proyecto principal de forma independiente.

Suponiendo que desea tener la carpeta del proyecto de la biblioteca en la misma carpeta que la carpeta del proyecto principal,

Tú podrías:

En settings.gradle de nivel superior, declare el repositorio de la biblioteca como un proyecto, dada su ubicación en el sistema de archivos

// 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 el complemento gradle-git para clonar la biblioteca del repositorio de 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
        }

En las dependencias de su proyecto, diga que el código de su proyecto depende de la carpeta del proyecto git

dependencies {
    compile project(':lib_project')
}

Gradle ahora admite dependencias de origen con ciertas restricciones. Vea mi respuesta aquí
Mister Smith

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.