Android Gradleの依存関係としてgitリポジトリを宣言することは可能ですか?


回答:


150

私にとって最良の方法は:

https://jitpack.io

手順1.リポジトリの最後にあるbuild.gradleにJitPackリポジトリを追加します。

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

ステップ2.依存関係をフォームに追加する

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

マスターブランチで最新のコミットを構築することは可能です、例えば:

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

6
あなたは、最新のマスターをしたい場合は、バージョンの使用-SNAPSHOT jitpack.io/docs/#snapshotsを
Andrejs

5
これはスパムだと思います。しかし、私は本当にjitpack.ioが本当に本当にクールだと言いたいです..............
Eric

5
必ずメインセクションに、ではないにこれを入れてくださいbuildscript
セルゲイLedvanov

「タグ」とは?
マカレル2017

@Makalele、「TAG」はgitタグです(タグ付きのコミット、たとえば一部のリリース)。ドキュメント
sunnyday

40

または、このようなサブモジュールとしてリポジトリを登録できます

$ git submodule add my_sub_project_git_url my-sub-project

次に、プロジェクトをsettings.gradleファイルに含めます。これは次のようになります。

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

最後に、プロジェクトを依存関係としてアプリケーションのbuild.gradleファイルに次のようにコンパイルします。

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

その後、プロジェクトを複製するとき--recursiveに、gitにルートリポジトリとそのすべてのサブモジュールを自動的に複製させるオプションを追加するだけで済みます。

git clone --recursive my_sub_project_git_url

お役に立てば幸いです。


私は通常これをコメントに書いていませんが、この場合私はただ「聖なるクソ、おいおい!それはとてもクールです、ありがとうございます!」と言わなければなりません。:-)
L.Butz

私は.. Gitのサブモジュールは、多くの場合、あなたや他の人を噛まないように戻ってくる、@MisterSmithに同意
AO_

13

Gradleに新機能が追加され、gitからソースの依存関係を追加できるようになりました。

最初にsettings.gradleファイルでリポジトリを定義し、それをモジュール識別子にマップする必要があります。

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

そして今、あなたbuild.gradleは特定のタグを指すことができます(例えば: 'v1.0'):

dependencies {
    ...

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

または特定のブランチに:

dependencies {
    ...

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

警告:

  • Gradle 4.10以上が必要
  • まだ認証をサポートしていません

参照:


これがIDEでも機能するのであれば素晴らしいことです。Androidプロジェクト(Android Studio 3.4.1を使用)でライブラリの1つにsourceControlを使用してみましたが、IDEは "gradle sync"を実行できず、ソースファイルはライブラリが表示されない... ..しかし、「./ gradlew build」を使用してコマンドラインからビルドすると、すべてが機能します。
ガブリ

それが私だけかどうかはわかりませんが、特にライブラリにデータバインディングがある場合、多くの問題に直面しました。1つは、GradleスクリプトがNPEをスローし、gitリポジトリを自動ビルドしているときに、データバインディングコンパイラのsdkフォルダーを見つけられないことです。android.googlesource.com/platform/tools/base/+/…local.properties をコミットする必要がありましたが、他の問題にも
遭遇し

6

Gradleが依存関係としてgitリポジトリを追加することをサポートしているとは思いません。私の回避策は:

  • メインプロジェクトがファイルシステム内の別のプロジェクトに依存していることを宣言する
  • 依存関係として宣言されたフォルダーにgit repoを自動的に複製する方法を提供する

ライブラリリポがメインプロジェクトリポジトリのフォルダーの外にあることを前提としているため、各プロジェクトは独立したgitリポジトリとなり、ライブラリとメインプロジェクトのgitリポジトリに個別にコミットできます。

ライブラリプロジェクトのフォルダーをメインプロジェクトのフォルダーと同じフォルダーに配置する場合、

あなたは出来る:

トップレベルのsettings.gradleで、ファイルシステム内の場所を指定して、ライブラリリポジトリをプロジェクトとして宣言します。

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

gradle-gitプラグインを使用して、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
        }

プロジェクトの依存関係で、プロジェクトのコードがgitプロジェクトのフォルダーに依存するとします

dependencies {
    compile project(':lib_project')
}

Gradleは、特定の制限付きでソースの依存関係をサポートするようになりました。ここで
ミスタースミス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.