日々是好日

プログラミングについてのあれこれ、ムダ知識など

StickyListHeaders風のライブラリを自作する-6

StickyListHeaders風のライブラリを自作する-5 - 日々是好日の続き。

Bintray で Android のライブラリを公開するまでやってみた。 Kotlin ライブラリなのでだいぶはまってしまいました……。

Bintray 側の準備

こちらの Qiita 記事に丸投げ(ぇ

Bintray にて maven リポジトリとパッケージの作成、API Key の確認をしておきます。 API Key は後で .gradle/gradle.properties にメモします。

qiita.com

Gradle の設定

Android Studio にて、ライブラリのプロジェクトの gradle ファイルを編集していきます。

API Key の保存

~/.gradle/gradle.propertiesを生成し、次の情報を定義しておきます。

bintray_user=user_id
bintray_key=API Key

プラグインの追加

Gradle から Bitray に aar ファイルをアップするため、次のプラグインを追加します。

GitHub - Kotlin/dokka: Documentation Engine for Kotlin

プロジェクトレベルのbuild.gradleを開き、次の記述を追加します。

buildscript {
    ext.kotlin_version = '1.3.40'
    
    /*追加*/
    ext.dokka_version = '0.9.18'

    repositories {...}
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        /*追加*/
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
        classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:${dokka_version}"
    }
}

ライブラリの追加

モジュールレベルのbuild.gradleに次のライブラリと、次節で生成するdeploy.gradleを追加します。

dependencies {
  compileOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

apply from: 'deploy.gradle'

もともとは kotlin-stdlib-jre7 だったみたいですが、今は jdk7 に置き換わってるみたいですね。

デプロイ用の gradle ファイルの生成

deploy.gradle はデプロイ用のスクリプトをまとめた gradle ファイルです。 モジュールレベルのbuild.gradleと同じ階層に置いておきましょう。

中身の全記述は次のとおりです。

2019.8.15 追記

javadoc の生成(task javadocJar)を追加

apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
apply plugin: 'org.jetbrains.dokka-android'

ext {
    groupId = 'work.kcpoipoi'
    artifactId = 'pinninglistview'
    libVersion = '0.0.1'
}

dokka {
    outputFormat = 'html'
    outputDirectory = "$buildDir/javadoc"
}

group = groupId
version = libVersion

def siteUrl = "https://github.com/Hide-KC/PinningListView"
def gitUrl = "https://github.com/Hide-KC/PinningListView.git"

def loadProperties(filename) {
    def props = new Properties()
    file(filename).withInputStream {
        props.load(it)
    }
    return props
}

bintray {
    def props = loadProperties("$gradle.gradleUserHomeDir/gradle.properties")

    user = props.bintray_user
    key = props.bintray_key

    configurations = ['archives'] //When uploading configuration files
    pkg {
        repo = 'maven'
        name = "PinningListView"
        desc = 'Custom RecyclerView that draws a header that represents a break.'
        publish = true
        override = true
        websiteUrl = siteUrl
        issueTrackerUrl = 'https://github.com/Hide-KC/PinningListView/issues'
        vcsUrl = gitUrl
        licenses = ['MIT']
        labels = ['aar', 'android', 'custom view', 'recycler view']
        publicDownloadNumbers = true
        version {
            name = libVersion
        }
    }
}

install {
    repositories.mavenInstaller {
        pom.project {
            packaging 'aar'
            groupId group
            artifactId artifactId
            name artifactId
            version version
            url siteUrl
            licenses {
                license {
                    name 'MIT License.'
                    url 'https://opensource.org/licenses/mit-license.php'
                }
            }
            developers {
                developer {
                    id 'kcpoipoi'
                    name 'KC'
                    email 'kcs.dev.labo@gmail.com'
                }
            }
            scm {
                connection siteUrl
                developerConnection siteUrl
                url siteUrl
            }
        }
    }
}

task sourcesJar(type: Jar) doLast {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

//2019.8.15 追加
task javadocJar(type: Jar, dependsOn: dokka) {

}

artifacts {
    archives sourcesJar
    //2019.8.15 追加
    archives javadocJar
}

正直なところ、各種ブロックの意味や Groovy の文法全然わかってませんが……動いたから( ΦωΦ)σヨシッ!

2019.8.15 追記

dokka で生成した javadoc は下記のディレクトリに保存されるようです。

AndroidStudioProjects\StickyListViewLibrary\pinninglistview\build\javadoc\pinninglistview\work.kcs_labo.pinninglistview

.gradle/gradle.properties の参照は loadProperties("$gradle.gradleUserHomeDir/gradle.properties") で行っています。 Gradle で定義されている定数は次のエントリを参照。

waman.hatenablog.com

また、後ほど JCenter にリンクさせる際 jar ファイルを要求されるので、 soucesJar で生成しています。

Bintray にデプロイ

上記が準備できたら、あとはターミナルで gradlew bintrayUpload を叩くだけ。 BUILD SUCCESSFUL と表示されるようにお祈りします。

無事にデプロイできれば、次のようにして使用することが可能です。

プロジェクトレベル build.gradle

allprojects {
    repositories {
        ...
        maven {
            url  "https://dl.bintray.com/hide-kc/maven"
        }
    }
}

モジュールレベル build.gradle

dependencies {
    implementation 'work.kcpoipoi:pinninglistview:0.0.1'
}

これで一応使えるようにはなっているのですが、url を表記しているあたり明らかに思ってたんと違います。 仕上げに JCenter への登録申請を行いましょう。

Add to JCenter

Bintray にログインし、パッケージのページを開きます。 右下に「Linked to」というセクションがあり、そこに「Add to JCenter」というボタンがあると思います。

チェックボックスや groupId を入力(私はwork.kcpoipoi.pinninglistviewと入力)し申請すれば、通常ならものの数時間で許可が下ります。 もし不許可だった場合はアドバイスメッセージがアカウントに飛んでくるので、粛々と従いましょう。 ちなみに私は jar ファイルが無かったので一度弾かれました。

JCenter のリポジトリに表示されるようになるにはもうちょっとかかるようで、私の場合翌日くらいに確認したら検索結果に表示されるようになっていました。

ライブラリの使用

承認後、次のようにモジュールレベルに依存関係を指定するだけで OK となります。

プロジェクトレベル build.gradle

allprojects {
    repositories {
        jcenter()
    }
}

モジュールレベル build.gradle

dependencies {
    implementation 'work.kcpoipoi:pinninglistview:0.0.1'
}

所感

とてもつらかった。

あと dokka が完全に飾りです(マテ

2019.8.15 dokka で javadoc の生成追加しました。

参考サイト

notes.devlabs.bg

waman.hatenablog.com

minpro.net

stackoverflow.com

qiita.com

www.virag.si

リポジトリ

github.com