Có thể khai báo kho lưu trữ git là phụ thuộc trong android gradle không?


Câu trả lời:


150

Đối với tôi, cách tốt nhất là:

https://jitpack.io

Bước 1. Thêm kho lưu trữ JitPack vào build.gradle ở cuối kho:

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

Bước 2. Thêm phần phụ thuộc vào biểu mẫu

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

Có thể xây dựng cam kết mới nhất trên nhánh chính, ví dụ:

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

6
Nếu bạn muốn làm chủ mới nhất sau đó sử dụng các phiên bản -SNAPSHOT jitpack.io/docs/#snapshots
Andrejs

5
tôi đoán đây là thư rác. nhưng tôi thực sự muốn nói rằng jitpack.io thực sự thực sự thực sự mát ..............
Eric

5
Hãy chắc chắn rằng bạn đặt này vào phần chính, không đếnbuildscript
Sergei Ledvanov

"TAG" là gì ??
Makalele

@Makalele, "TAG" là một thẻ git (bất kỳ cam kết nào được gắn thẻ, chẳng hạn như một số bản phát hành). tài liệu
nắng

40

Hoặc bạn có thể đăng ký một kho lưu trữ dưới dạng mô-đun con như thế này

$ git submodule add my_sub_project_git_url my-sub-project

Sau đó, bao gồm dự án trong tệp settings.gradle của bạn, tệp này sẽ giống như thế này

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

Cuối cùng, biên dịch dự án dưới dạng phụ thuộc trong tệp build.gradle ứng dụng của bạn như thế này

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

Sau đó, khi nhân bản dự án của bạn, bạn sẽ chỉ phải thêm tùy chọn --recursiveđể làm cho git tự động sao chép kho lưu trữ gốc và tất cả các mô-đun con của nó.

git clone --recursive my_sub_project_git_url

Tôi hy vọng nó sẽ giúp.


Tôi thường không viết điều này trong các bình luận, nhưng trong trường hợp này, tôi chỉ phải thốt lên "Chết tiệt, anh bạn! Thật tuyệt, cảm ơn anh bạn!" :-)
L.Butz

Tôi đồng ý với @MisterSmith, các mô-đun con của Git thường quay lại để cắn bạn và những người khác ..
AO_

13

Hiện có một tính năng mới trong gradle cho phép bạn thêm các phụ thuộc nguồn từ git.

Trước tiên, bạn cần xác định repo trong settings.gradletệp và ánh xạ nó tới một mã định danh mô-đun:

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

Và bây giờ trong của build.gradlebạn, bạn có thể trỏ đến một thẻ cụ thể (ví dụ: 'v1.0'):

dependencies {
    ...

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

Hoặc đến một chi nhánh cụ thể:

dependencies {
    ...

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

Lưu ý:

  • Yêu cầu Gradle 4.10 trở lên
  • Chưa hỗ trợ xác thực

Người giới thiệu:


Sẽ thật tuyệt nếu điều này cũng có thể hoạt động với IDE: Tôi đã thử sử dụng sourceControl cho một trong các thư viện của mình trong dự án Android của tôi (với Android Studio 3.4.1), IDE không thể thực hiện "đồng bộ hóa gradle" và các tệp nguồn thì không. không thấy thư viện… ..nhưng nếu tôi xây dựng thông qua dòng lệnh bằng cách sử dụng "./gradlew build" thì mọi thứ đều hoạt động.
gabry

Tôi không chắc đó có phải chỉ là tôi không nhưng tôi đã phải đối mặt với rất nhiều vấn đề với điều này, đặc biệt là khi thư viện có databinding. Đối với một tập lệnh gradle ném NPE và không thể định vị thư mục sdk cho trình biên dịch databinding trong khi tự động xây dựng git repo. android.googlesource.com/platform/tools/base/+/… Cuối cùng tôi phải cam kết local.properties của mình, tuy nhiên tôi cũng gặp phải các vấn đề khác
khiêm tốn

6

Tôi không nghĩ Gradle hỗ trợ thêm kho lưu trữ git làm phụ thuộc. Cách giải quyết của tôi là:

  • tuyên bố rằng dự án chính phụ thuộc vào một dự án khác trong hệ thống tệp
  • cung cấp một cách để tự động sao chép git repo trong thư mục được khai báo là phụ thuộc

Tôi giả sử rằng bạn muốn kho thư viện bên ngoài thư mục của kho dự án chính, vì vậy mỗi dự án sẽ là các kho lưu trữ git độc lập và bạn có thể thực hiện cam kết đối với các kho lưu trữ git thư viện và dự án chính một cách độc lập.

Giả sử bạn muốn có thư mục của dự án thư viện trong cùng thư mục với thư mục của dự án chính,

Bạn có thể:

Trong settings.gradle cấp cao nhất, khai báo kho thư viện là một dự án, với vị trí của nó trong hệ thống tệp

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

Sử dụng plugin gradle-git để sao chép thư viện từ kho lưu trữ 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
        }

Trong phần phụ thuộc của dự án của bạn, giả sử rằng mã của dự án của bạn phụ thuộc vào thư mục của dự án git

dependencies {
    compile project(':lib_project')
}

Gradle hiện hỗ trợ các phụ thuộc nguồn với một số hạn chế nhất định. Xem câu trả lời của tôi tại đây
Mister Smith

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.