Androidアプリを作る際にAPIサーバーとの通信部分をモジュール化したいことはよくあると思います。このような場合にKotlinでクラスを作ってライブラリとして公開するためのチュートリアルです。なお筆者はAndroid初心者。
ここで作るライブラリはAndroidのパッケージではなくただのKotlinのクラスです。
準備
まずはターミナルから新しく作業ディレクトリを作成します。
mkdir -p my-project/src/main/java/com/asmsuechan/example
gradle -v
モジュールの作成はAndroid Studioからでも可能なのですが単体で作成することができないみたいなのでまずはターミナルから始めます。一度ビルドすればAndroidStudioでモジュールとしてimportすればIDEの恩恵が受けられます。
なおgradle -v
が実行できなかった人は各自gradleをインストールしてください。
Exampleクラスの追加
src/main/java/com/asmsuechan/example
にExample.ktを作成します。サンプルなのでprintするだけのシンプルなコードです。
class Example {
fun bark () {
print("Bow wow!")
}
}
build.gradle.ktsの追加
プロジェクトルートにbuild.gradle.kts
を追加して以下を書きます。
import org.gradle.jvm.tasks.Jar
import com.jfrog.bintray.gradle.BintrayExtension
group = "com.asmsuechan"
version = "0.0.1"
val artifactID = "kotlin-gradle-bintray-example"
val publicationName = "default"
plugins {
`maven-publish`
kotlin("jvm") version "1.3.70"
id("com.jfrog.bintray") version "1.8.5"
}
repositories {
jcenter()
}
dependencies {
implementation(kotlin("stdlib"))
}
val sourcesJar by tasks.registering(Jar::class) {
classifier = "sources"
from(sourceSets.main.get().allSource)
}
publishing {
publications {
create<MavenPublication>("default") {
from(components["java"])
}
}
publications.invoke {
publicationName(MavenPublication::class) {
artifactId = artifactID
artifact(sourcesJar.get())
}
}
}
fun findProperty(s: String) = project.findProperty(s) as String?
bintray {
user = findProperty("bintrayUser")
key = findProperty("bintrayApiKey")
publish = true
setPublications(publicationName)
pkg(delegateClosureOf<BintrayExtension.PackageConfig> {
repo = "asmsuechan"
name = "kotlin-gradle-bintray-example"
userOrg = "asmsuechan"
websiteUrl = "https://github.com/asmsuechan/kotlin-gradle-bintray-example"
githubRepo = "asmsuechan/kotlin-gradle-bintray-example"
vcsUrl = "https://github.com/asmsuechan/kotlin-gradle-bintray-example"
description = ""
setLabels("kotlin")
setLicenses("MIT")
desc = description
})
}
pom.xmlの追加
プロジェクトルートにpom.xml
を追加します。
<project>
<groupId>com.asmsuechan</groupId>
<artifactId>kotlin-gradle-bintray-example</artifactId>
<version>0.0.1</version>
<packaging>jar</packaging>
<name>kotlin-gradle-bintray-example</name>
<url>https://github.com/asmsuechan/kotlin-gradle-bintray-example</url>
</project>
今の所フォルダ構成はこんな感じ。
$ tree
.
├── build.gradle.kts
├── pom.xml
└── src
└── main
└── java
└── com
└── asmsuechan
└── example
└── Example.kt
bintrayへの登録
bintrayというサービスを使って作成したライブラリを公開します。bintrayとは簡単に言うとJavaScriptのnpmみたいなサービスです。
登録はこちら(jCenterでライブラリを公開する方法)などを参考にしてやってみてください。
publishする
以下のコマンドを打ってbintrayにpublishします。API Keyはbintrayのマイページにあります。
gradle clean build bintrayUpload -PbintrayUser=YourNameHere -PbintrayApiKey=YourTokenHere -PdryRun=false
Publishしたら最初はAdd to jcenter
ボタンを押してjcenterにライブラリを登録する必要があります。
完成
適当なAndroidプロジェクトを作成してbuild.gradleのdependenciesにimplementationを書けば正しくライブラリが使えるようになるはずです。
dependencies {
....(中略)
implementation 'com.asmsuechan:kotlin-gradle-bintray-example:0.0.1'
}
参考