Kotlinで作ったライブラリをリリースする


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'
}

参考