AboutLibrariesでOSSライセンス表示画面を作る

2021/08/29

Androidアプリを作っていると地味に頭が痛いのがOSSライセンスの表示をどうするか問題。

以前に AndroidでOSSライセンス表示をするためのライブラリ比較 という記事を書きましたが、そのときはどれも一長一短で決め手に欠く印象でした。

最近またライセンス表示を実装する機会があったので、新たに mikepenz/AboutLibraries を試してみることに。

所感

決定版!とまではいきませんが、今後の第一候補にしてもいいかな、というくらいにはいい感じでした。

機能面は充実。個人的に欲しい機能は一通りそろっています。

  • ライブラリの洗い出しをしてくれる
  • 画面表示の機能がある
    • カスタマイズも結構できる
  • ライブラリ情報だけ使って画面表示を自前実装することもできる
  • ライセンス定義を手動で追加できる
    • 画像リソースとかWebView内のJavaScriptライブラリとかネイティブライブラリとか使うときに重要

いくつか気になる点もあります。

依存ライブラリ多くて重ためなライブラリなのがひとつめ。高々ライセンス表記したいだけなのに、という気はします。

あと、機能が豊富な割にドキュメントがイマイチなんですよね。

公式サイト の記述、ボリュームあるように見えて網羅しきれていないんです。なので、凝ったことしようとすると自力で試行錯誤する羽目になります。もうちょっとドキュメンテーション強化してほしいなー。

とは言え、毎回細かくカスタマイズするようなモノでもないので、自分なりのセオリーが決まれば、それ以降は横展開で問題なさそうではあります。

Google謹製の google/play-services-plugins に匹敵する手軽さがあり、かつライセンス定義を手動で追加できるというアドバンテージがあるので、ライブラリの「重さ」が気にならないなら有力候補になるんじゃないでしょうか。

実装方法

プラグインとライブラリに分かれているので両方組み込む必要があります。

build.gradle では依存関係にプラグインを追加。

buildscript {
    dependencies {
        classpath 'com.mikepenz.aboutlibraries.plugin:aboutlibraries-plugin:8.9.1'
    }
}

app/build.gradle でプラグイン実行とライブラリ読み込みを行い、 aboutLibraries で必要に応じてオプションの設定をします。

apply plugin: 'com.mikepenz.aboutlibraries.plugin'

android {

    aboutLibraries {
        includeAllLicenses = true
    }
}

dependencies {
    implementation 'com.mikepenz:aboutlibraries:8.9.1'
}

ライセンス画面をとりあえず呼び出すなら以下でOK。

new LibsBuilder()
    .withLicenseShown(true)  // ライセンス種別を表示するかどうか
    .withVersionShown(false) // バージョンを表示するかどうか
    .withActivityTitle(getString(R.string.license_title)) // タイトル文字列
    .start(requireActivity());

withXXX というメソッドがたくさんあって、細かなカスタマイズができるようになっています。

あと、ちょっとハマったのが、ActionBar を使っている場合は NoActionBar 系のテーマを明示的に適用しないとクラッシュするということ。

表示するだけなら AndroidManifest.xml

<activity
        android:name="com.mikepenz.aboutlibraries.ui.LibsActivity"
        android:theme="@style/Theme.MaterialComponents.NoActionBar" />

を定義すればOK。見た目を弄りたいときは NoActionBar 系のテーマを継承した独自テーマを作るのがよさそう。

大半のアプリは Toolbar に移行済みだと思うんですが、古いアプリで使うときとかは注意ですね。




関連(するかもしれない)記事


おススメ