Androidライブラリを作って公開する

# 経緯
弊社アプリでチュートリアルを入れることになり、ライブラリをあさっていたのですがデザイナーが納得できるものがない！
じゃあ自前で作ろう！となったのが発端でした。

で、ついでに手を入れてライブラリ化しようと思い立って今に至ります。
今回はライブラリの登録方法についてです。
作ったライブラリは後ほど公開予定です。

# 環境
<img width="598" alt="スクリーンショット 2018-05-12 14.05.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/49308/3aae5739-26c0-2fdb-a692-c46a6f7106fa.png">


# ライブラリ公開までのすゝめ
## 1. ライブラリ用プロジェクトの作成
最初にAndroid Studioで「New」→「ライブラリ」みたいなメニューが有ると思っていたのですが見当たらず。。。そもそも公式見ろよということで「[Android ライブラリの作成  Android Developers](https://developer.android.com/studio/projects/android-library?hl=JA)」を見ながらやりました。

- 最初は普通に新規プロジェクトを作ります。

<img width="902" alt="スクリーンショット 2018-05-12 13.46.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/49308/34b3c3b8-0b27-670d-365c-614664884cb5.png">


## 2. ライブラリ用モジュールを作成する
- プロジェクトのrootディレクトリを右クリックして「New」→「Module」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/49308/1cac3218-97ff-d60b-02af-7881a9b7080d.png)


- その後「New Module」ウィンドウで「Android Library」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/49308/bb45e8d0-09c2-2e99-1f46-8a0153627725.png)


- 次に必要な情報を入力してFinish！
- で、新たにappと同階層に作成したライブラリ用Moduleのディレクトリが出来上がります。

## 3. あとは普段と同じように開発する！
- プロジェクト作成時にinclude kotlin supportを指定していてもModuleはModuleでbuild.gradleを持っているので再設定が必要です。
- 他に必要な依存関係があればModuleの下のbuild.gradleに追加していく

- appパッケージ側でライブラリModuleを使う時はapp下のbuild.gradleに以下を追加する

```build.gradle
dependencies {
    implementation project(':library_name')
}
```


# 作ったライブラリを公開したい
ここからが本題なのですが、作ったライブラリをせっかくなので公開したい！今回はJCenterに公開しようと思います。

こちらを大いに参考にさせていただきました。ありがとうございます！
[作ったAndroidライブラリを公開する方法 - Qiita](https://qiita.com/gupuru/items/aa81f007d306fc6c4a2c)

## 1. バイナリをアップロードするためのサービスに登録
- 色々読んだところBintrayというサービスを使うようです。
[Bintray](https://bintray.com/)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/49308/fe22f8f4-fba9-1403-515c-ab9d56cf352d.png)


ここに登録します。

- 右上の「sign in」ではなく中央右の「Sign Up Here」からアカウントを作成します。
(最初は「sign in」から作ろうとして、Organizationの登録とか出てきて混乱しました)

## 2. アップロードのためにbintray-releaseを入れる
- 入れ方はこちら参照 [GitHub - novoda/bintray-release: A helper for releasing from gradle up to bintray](https://github.com/novoda/bintray-release)

- ライブラリModule側にpublishを追加

```build.gradle
publish {
    userOrg = 'your_organization_name' // ユーザー登録時に一緒に登録したOrganization名
    groupId = 'jp.group.your_group_name'
    artifactId = 'your_library_name'
    publishVersion = '0.1.0'
    desc = 'description'
    website = 'https://github.com/hoge/project'
    repoName = 'your_library_name'
}
```

`repoName` を設定しないとエラーになります。
この `repoName`の設定をすっかり忘れてずっとエラーに悩んでました。

### publish のrepoNameについて

- Bintrayにサインインして、右上のメニューからView Profileを選択
- 以下の箇所からRepositoryを作成する

![image.png](https://qiita-image-store.s3.amazonaws.com/0/49308/8259cb11-c6c6-0b66-c27a-225ac9e9220f.png)


- 作成時にNameに設定したものを `repoName` に設定する
- ちなみに作成時のTypeはMavenを設定

## 3. アップロードする
- 以下のコマンドを実行する

```
./gradlew clean build bintrayUpload -PbintrayUser=BINTRAY_USERNAME -PbintrayKey=BINTRAY_KEY -PdryRun=false
```

BINTRAY_USERNAME と BINTRAY_KEY は適宜読み替えてください。

- ちなみにBINTRAY_KEYは以下のところにあります

右上のメニュー→「Edit profile」→左側のメニューの中の「API Key」

![image.png](https://qiita-image-store.s3.amazonaws.com/0/49308/0541ce30-ce94-9479-aea3-830087ec670a.png)


## 4. アップロードしたpackageをjcenterに登録
### 右上のメニューからView Profileを選択
### 登録したRepositoryを選択

![image.png](https://qiita-image-store.s3.amazonaws.com/0/49308/a923c8a3-1b68-7ab8-30bd-bbb982bb4bb4.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/49308/d1bf6c30-9c2d-f9db-9630-7a1074ab9e47.png)


![image.png](https://qiita-image-store.s3.amazonaws.com/0/49308/720638d6-25c1-4305-eb6a-8334090a38e4.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/49308/301b6616-d2e6-c457-acd1-266946138dcc.png)

Sendした後はしばらく時間がかかるようです。すぐには登録されませんでした。送っても表示が何か変わるわけでもないので、間違えて2階送ってしまいました。

- 数時間後にメールが届き、登録されました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/49308/8a7aa999-8c3a-e0a8-1c0c-ce34d718e9d2.png)


# 登録したライブラリを使う
- プロジェクトのapp/build.gradleで以下を入力するだけです。

```
dependencies {
	implementation 'jp.studio.edamame:balloontutorial:0.1.0'
}
```

~~※ まだ動くか試していません。~~無事動作確認まで出来ました。

# おわり
今回はJCenterに公開しましたがこれは中々手順が多いようで、JitPackの方が簡単に公開できそうでした。

振り返ってみたらいつの間にかエンジニアになってから意外と長い間やってきましたが個人でこういうのを残してこなかったため他人に評価してもらえるところが無いなと思いました。

これを機に少しずつライブラリやアプリを世に出していきたいです。
次回は作ったチュートリアル用ライブラリについて書きます。