27
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

モバイルDevOpsAdvent Calendar 2015

Day 19

カジュアルにライブラリを作っていく話 Android のサンプルと共に

Posted at

アプリケーション開発中にライブラリが生まれることがあります。

  1. そのアプリの中で何度も登場したモジュール、処理
  2. 既存のAPIが使いにくい、やりたいことができないので拡張した部分

あなたの悩みはみんなの悩みの可能性があります。カジュアルにライブラリ化していくことで、OSSの界隈に貢献をしていきましょう。

ライブラリ公開の注意

業務内容など、公にはできない部分が含まれることが無いかどうかは気をつけるべきでしょう。また、業務に密接に関連するライブラリはより一般的である物の方がライブラリとして利用しやすい物になるとも言えますが、開発のコストも増します。

カジュアルに公開をすると言っても、不便だと意味がありません。ちょうどいい所を考えるようにしましょう。

ライブラリを公開する場所

Androidのライブラリはビルドをしたjaraarと言ったバイナリを Gradle で解決可能なWebサーバーに置いておくのがデファクトではないでしょうか。公開されていて無料で利用可能な置き場はいくつかありますが、今回は以下の理由で bintray を利用します。

  1. 特にアカウントを作る必要がない
  • Githubのアカウントでログインができます
  1. バイナリの署名とかがいらない
  • その良し悪しは置いておいて、不要なのでカジュアルにバイナリをアップロードできます
  1. Gradleプラグインもあるので、コマンド一発&CI環境からのデプロイも簡単
  2. jcenter にリンクもしてくれるので、デフォルトのGradleで管理されたAndroidアプリのプロジェクトからも参照ができる

ライブラリを作る

1.PNG

Android Studio でモジュールを作ります。ここでつけた名前がバイナリの名前になっていくので、ライブラリの名前をそのままつけるのが正しいっぽいですね。

モジュールを作ったらコードを書いていきましょう。また、ライブラリだけでなくサンプルコードやテストコードをつけることでライブラリの利用者にコードが利用方法を知る手がかりになって良いと思います。

bintray にアップロードをする

3.PNG

bintray のページから新しいリポジトリを作ります。Description など書いていきましょう。Repositry Type は Maven を選びます。

gradle に bintray のプラグインを設定する

bintray/gradle-bintray-pluginを利用します。設定の内容は適宜読み替えてください。

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0-alpha1'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
    }
}

def siteUrl = 'https://github.com/numa08/DynamicFragmentPagerAdapter'
def gitUrl = 'https://github.com/numa08/DynamicFragmentPagerAdapter.git'

bintray {
    user = bintray_username
    key = bintray_api_key
    configurations = ['archives']
    pkg {
        repo = 'maven'
        name = library_id
        userOrg = 'numa08'
        licenses = ['MIT']
        vcsUrl = gitUrl
        websiteUrl = siteUrl
        issueTrackerUrl = siteUrl + '/issues'
        labels = ['android']
        publicDownloadNumbers = true
    }
}

install {
    repositories.mavenInstaller {
        pom {
            project {
                packaging 'aar'
                name 'Remove and add and swap fragment pager adapter'
                url siteUrl
                developers {
                    developer {
                        id 'numa08'
                        name 'numa08'
                        email 'n511287@gmail.com'
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl

                }
            }
        }
    }
}

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

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}
artifacts {
    archives javadocJar
    archives sourcesJar
}

task findConventions << {
    println project.getConvention()
}

また、プロジェクトのメタな設定をgradle.propertiesに書きます。

version=0.6.2
group=net.numa08
library_id=dynamicfragmentpageradapter

最後にbintrayの認証情報を書きます。これはリポジトリには含められない情報なので置き場を考えましょう。私はよく~/.gradle/gradle.propertiesに書いています。

bintray_username=numa08
bintray_api_key=your api key

最後に gradle bintrayUpload でバイナリをアップロードすることができます。

CI環境

travis CIや circle ciを利用してバイナリのデプロイを自動化できます。最近の自分の戦略は以下の感じ

  • developブランチのバイナリはどんどん bintray にアップロードをする
    • このとき、バージョン番号の後ろに自動的にビルド番号が入るようにしておくと良いと思う
    • あと、 unstable とかつけておこう
  • tag を打ったらstableなバージョンのアップデートということで、bintrayにアップロードをする

jcenter

bintray から link to jcenter を選ぶことで、jcenterにアップロードをすることができます。だいたい2日くらいでリンクをしてくれるっぽいです。

利用をする

jcenter にアップロードされていれば、build.gradleのdependenciesに

compile '[organization_id]:[library_id]:[version]'

で依存性を解決できるようになります。

その他

その他に準備をするもの

  • License.txt
    • OSSで公開するのなら、ライセンスを定めておくのが良いでしょう。ApacheやMITなど使いやすいやつが好まれる雰囲気です。
  • Readme.md
    • Readmeにはライブラリの目的や使い方を書いておきましょう。またUIライブラリの場合、gifアニメなんかで動いてる風景を掲載しておくと、雰囲気がより伝わりやすくなると思います。
  • サンプル・テストコード
    • サンプルやテストコードはそのままライブラリを利用するときのコードのサンプルです。Readmeの英語が苦手でもコードを書いておけばそれなりに通じると思います。

まとめ

ライブラリの公開方法について書きました。カジュアルにライブラリを公開してOSS界隈に貢献していきましょう。

27
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?