Androidアプリにライセンス表示を埋め込むライブラリいくつか

アプリを作る上で外部のライブラリのお世話になる事は多いと思うのだけど、使わせてもらった場合はライセンスをアプリのどこかで表示する必要があったりするわけです。
メニューなり設定なりのどっかから適当に Dialog 出して、テキストなりをペター っと貼り付ければいいんだけど、使ってるライブラリが増えてくると管理がめんどうだし、実装時間があるなら そんなトコ(と言ってはなんだが)よりアプリ本体に時間をかけたい。

って事でライセンスを簡単に埋め込めるライブラリを探してみました。


# com.google.gms:oss-licenses

google さん謹製のライブラリがありました。
使い方はすでに書いてる方が居たので、そちらを張っておきます。
[com.google.gms:oss-licenses を使ってオープンソースライセンスを表示する](https://qiita.com/sho5nn/items/f63ebd7ccc0c86d98e4b)

ライブラリを設定してビルドすると pom から依存するライブラリのライセンス情報を取得して一覧化してくれます。
後は Activity を呼び出すだけ……簡単すぎる……
iOS には以前からあったようだけど、Android 向けにこれが提供されたのは昨年の9月あたりのようで最近のものですね。

難点は最終的にリンクを出すだけで表示が殺風景なのと、だいたいの人が記載してない SDK や support ライブラリの依存関係まで手繰って全部出てしまうので 量が多くなる点。
(実際 support ライブラリも Apache License, Version 2.0 で提供されてるんだから、記載するのが筋なのだろうけど、そこまで記載してるアプリ稀じゃない？いいのか？)

# LarsWerkman/LicenseView

[LarsWerkman/LicenseView: A simple library to show licenses in your android application.](https://github.com/LarsWerkman/LicenseView)

![LicenseView](https://camo.githubusercontent.com/ddfc601705474130350fe75d8e45a0fa3006c78f/68747470733a2f2f6c68332e676f6f676c6575736572636f6e74656e742e636f6d2f2d7236644c32316b67567a6f2f556c38636f7a4b6b4752492f41414141414141414179382f51383959584457346f346b2f2f53637265656e73686f745f323031332d31302d31372d30302d32322d33395f6672616d65642e706e67)

```java
licenseView.setLicenses(R.xml.licenses);
```

プログラム側から LicenseView に対してリソースに置いた xml を読み込ませるスタイル。
管理コストは解決しないが一番シンプル。
xml は ライブラリ名をタグに設定して、body にライセンス置くような感じ。


# jgabrielfreitas/LicenseTextView
[jgabrielfreitas/LicenseTextView: Custom Lincese TextView for android](https://github.com/jgabrielfreitas/LicenseTextView)

![LicenseTextView](https://raw.githubusercontent.com/jgabrielfreitas/LicenseTextView/master/img/license_print.jpg)

LicenseTextView の text アトリビュートにそのまま突っ込んでいる。
(sample では @string/license から読み込ませてるけど)
完全に見た目だけのものなのだろうか。


# alzybaad/LicenseView
[alzybaad/LicenseView: LicenseView for Android](https://github.com/alzybaad/LicenseView)
これ特にスター付いてなかったけど、けっこう凝ってる。

![LicenseView](https://raw.githubusercontent.com/wiki/alzybaad/LicenseView/ss1.png)

出力はシンプルだが、assets 内に置いたライセンス情報をベースにコンテンツを生成してくれる。

![](https://raw.githubusercontent.com/wiki/alzybaad/LicenseView/ss3.png)


ファイルさえ用意しておけば、後は LicenseView を置くだけ。
管理しやすさ という点では良さそうだけど、自分でやる作業自体は増えてる気がしないではない。

# cookpad/license-tools-plugin
2018 1/19 追記
コメントで紹介して頂いた cookpad さんの plugin を追記。

[cookpad/license-tools-plugin: Gradle plugin to check library licenses and generate license pages.](https://github.com/cookpad/license-tools-plugin)
[オープンソースライセンスの管理を楽にする -Android アプリ編 - クックパッド開発者ブログ](http://techlife.cookpad.com/entry/2016/04/28/183000)

![20160427155605.png](https://qiita-image-store.s3.amazonaws.com/0/78375/0877f0eb-c47d-37a8-85a7-11b345818254.png)

導入方法はオフィシャルの記事に譲るとして、プラグインを設定して gradle のタスクを実行すると、yaml 形式でライセンスリストが出力されるので、
それを編集してページ生成のタスクを実行すると、上記のような表示に利用できる html ファイルが生成される。
UI パーツは提供されていないので、アプリに組込む場合は適当に WebView を用意して流し込む必要があるが、yaml 形式でライセンスの管理が可能で、また skip 等の設定が出来る点も凄く魅力的。

ただ難点は、gradle にしていないデザイン関係のライセンスなどを追加しようとした所、自動生成される license リストに存在しないものが yaml にあるとエラーを吐いてページを生成してくれない点と
上記の html ページ生成はプリセットの template から生成されているので、マイナーなライセンスやデザイン系のライセンスの template が存在せず、また追加する方法も提供されていないので 最終出力の html を自前で編集うる羽目になる所……
けっきょく手間が増えている気がしないではない……

何とかならんのか っと思って調べた所、素晴らしいプルリクが存在した
[Introduce template feature (CSS, header/footer, license)](https://github.com/cookpad/license-tools-plugin/pull/57)
テンプレート機能を追加するものなんだけど、gradle 管理外のライブラリの追加とサポート外のライセンスを追加する為の template 機能が盛り込まれている……！
本当に求めていたものに出会えた感じがあるが、プルリクの形なのでマージされておらず、本体の実装が進んでいるのでコンフリクト解消しないとそのまま使えなさそう……

探してたらプルリク投げた方が、フォークして別のライブラリとしても登録されているのだが
[オープンソースライセンスの管理をもっと楽にするために Cookpad のプラグインをフォークしてみた - Qiita](https://qiita.com/rockwillj/items/dae2364be281c0ea2ef1)
ちょっと古い releases から派生してる為か、手元の環境では動かなかったので どちらにせよマージが必要っぽい。

この辺自分でやれればいいんだけど、門外漢すぎて時間がかかりそうだ。

発見した時は最高な気分だっただけに、使えないのが分かった時は割とどん底な気分である……


# 感想
オーソドックスなライセンスと gradle で管理してるものだけで事足りる時は cookpad さんのが最強だと思う。
@rockwillj さんのが使えれば最高だけど、とりあえず自分は cookpad さんので出した html をしこしこ編集する事になりそうだ。

表示がオーソドックスなので良いって人は google さんの oss-licenses が一番楽ではある

個人開発だとデザインとか外部リソース頼る事もあると思うんだけど、デザイン系のライセンスを追加したいって需要は稀なのかなぁ。