以下のようなmulti module project構成のAndroid LibraryをJitPackで配信できるようにします
root
├── core // 主となる機能を格納したmodule
└── plugin // coreに対して機能を追加するmodule
core
のみ配信
まずはcore
のみ配信してみます
Library側
root直下のbuild.gradle
に以下を追加します
buildscript {
...
dependencies {
// gradle version毎にversionを変更する必要あり
// https://github.com/dcendents/android-maven-gradle-plugin#note-on-releases
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
...
}
}
次に、core/build.gradle
に以下の記述を追加します
apply plugin: 'com.github.dcendents.android-maven'
group="com.github.$USERNAME.$REPO"
これをGithubにpushするとJitPackでlibraryを配信可能になります
versionはbranch名やtag, commitなど指定可能ですが、今回はbranch名をexample
でpushした体で進めようと思います
この場合、以下のようなversionで配信されます
example-SNAPSHOT
Library利用側
配信したLibraryを利用する場合は以下のように記述します
repositories {
...
maven { url 'https://jitpack.io' } // ※ Private repositoryで配信されている場合はauthTokenの設定も必要
}
dependencies {
...
implementation 'com.github.$USERNAME:$REPO:example-SNAPSHOT@aar'
}
余談
JitPack配信のsetupをしていてこの辺でハマってしまったのですが、
前知識として"multi moduleなlibraryを com.github.$USERNAME.$REPO:$MODULE:$VERSION
のように読み込むことができる"という情報を仕入れていたためcore
のみ配信可能な状態で以下のような設定をしてしまいました
dependencies {
...
implementation 'com.github.$USERNAME.$REPO:core:example-SNAPSHOT@aar'
}
しかし配信されるmoduleが1つだけの場合JitPackが気を利かせて(?)module名を使わないpathに変更してくれるため、このpathでは読み込むことができませんでした
multi moduleなlibraryを一つ一つsetupする際にはご注意ください
core
とplugin
を配信
次にplugin
を配信します
Library側
rootのbuild.gradle
は既に設定済みなので、plugin/build.gradle
のみ変更します
変更内容はcore/build.gradle
と同じです
apply plugin: 'com.github.dcendents.android-maven'
group="com.github.$USERNAME.$REPO"
これをGithubにpushします
Library利用側
core
とplugin
が利用可能になりましたので読み込んでみます
core
のみ利用する
plugin
はいらないよという場合は以下のようにしてcore
だけ利用することができます
dependencies {
...
implementation 'com.github.$USERNAME.$REPO:core:example-SNAPSHOT@aar'
}
core
とplugin
を利用する
core
とplugin
を利用する場合は2通りの設定方法があります
dependencies {
...
implementation 'com.github.$USERNAME.$REPO:core:example-SNAPSHOT@aar'
implementation 'com.github.$USERNAME.$REPO:plugin:example-SNAPSHOT@aar'
}
もしくは
dependencies {
...
implementation 'com.github.$USERNAME:$REPO:example-SNAPSHOT@aar'
}
module名を指定しない場合、repository内の全てのmoduleを落としてくるので新しくmoduleが追加されたりした場合、それも配信されます
どちらの方法で読み込むかはユースケースごとに選択すると良いかと思います
参考
https://jitpack.io/docs/ANDROID/
https://android.jlelse.eu/publish-multi-module-android-libraries-on-jitpack-339213f6224c