Jetpack ComposeでAboutLibrariesを使用する
最近、XMLからJetpack Composeを使ってアプリのUIをリニューアルする取り組みを行っているんですが、その際にライセンス画面をAboutLibrariesというライブラリを使ってリニューアルしました。
今回は、AboutLibrariesについて実際に導入する時に躓いた部分やどうやって使うかについてまとめていきます。
ライブラリ選定
もともと、クックパッドさんのLicenseToolsPluginというライブラリを使ってライセンス画面を実装していたのですが、すでにメンテナンスが終了しており、他のライブラリに移行する必要がありました。
Jetpack Composeでリニューアルするにあたって、どのライブラリで実装するかを決めるためにいくつか調査をしました。
その結果が以下のような感じです。
- Gradle License Report
- play-services-plugins
- https://github.com/google/play-services-plugins
- スター数: 501
- 最終アップデート: 2025年9月
- Google Play Service公式が出しているライブラリ
- 公式が出してるやつなので、アップデートも結構行われているみたい
- AboutLibraries
- https://github.com/mikepenz/AboutLibraries
- スター数: 4.1k
- 最終アップデート: 2025年7月
- 最近もアップデートが行われており、スター数も他のものに比べて多いので良さそう
- Compose UI用のコンポーネントもこのライブラリに含まれているようなので、Composeを使う場合は結構カスタマイズしやすそう
- licensee
- https://github.com/cashapp/licensee
- スター数: 708
- 最終アップデート: 2025年5月
- cashappが開発しているライブラリ
- HTMLやJSONでレポートを生成
- LicenseToolsPluginを使っていた時と同じように、WebViewで表示するようなイメージになりそう?
この中でAboutLibrariesが一番良さそうだと感じた理由としては、UIの自由度が高そうだったからです。
Composeのコンポーネントを使用できるので、こちらが実現したいUIを完全に再現できそうでした。
// こんな感じで使える
val libraries by produceLibraries(R.raw.aboutlibraries)
LibrariesContainer(
libraries = libraries,
modifier = Modifier.fillMaxSize()
)
// もっとカスタマイズする場合
LibrariesContainer(
libraries = libraries,
modifier = Modifier.fillMaxSize().padding(it),
header = {
item {
Box(modifier = Modifier.fillMaxWidth().padding(16.dp), contentAlignment = Alignment.Center) {
Text("Hello Header")
}
}
},
divider = { HorizontalDivider() },
footer = {
item {
Box(modifier = Modifier.fillMaxWidth().padding(16.dp), contentAlignment = Alignment.Center) {
Text("Hello Footer")
}
}
}
)
スター数もメンテナンスも継続的に行われていそうだったので、AboutLibrariesを使うことに決まりました。
自動でライセンス情報を取得できなかった場合
AboutLibrariesを使うと、ほぼ全てのライブラリのライセンス情報を取得して表示してくれたのですが、いくつかのライブラリのライセンス情報を取得できないケースがありました。
例えば、firebase-analyticsやplay-services-ads-identifierなどです。
これらのライセンス情報を表示するためには、まずbuild.gradle.ktsに以下を追加する必要があります。
aboutLibraries {
// カスタムライセンスファイルの設定
collect {
configPath = file("../aboutLibraries")
}
}
その後、aboutLibrariesというディレクトリを作成し、内部にlicensesというディレクトリを作成。
その中に以下のようにASDKLのライセンス情報を追加すると、firebase-analyticsやplay-services-ads-identifierにライセンス情報を追加でき、内容を表示することができるようになります。
{
"content": "This is the Android Software Development Kit License Agreement\n\n1. ......",
"hash": "ASDKL",
"url": "https://developer.android.com/studio/terms.html",
"name": "Android Software Development Kit License Agreement"
}
また、プロジェクトによっては、自作ライブラリを使用しているケースもあると思います。
その場合は、aboutLibrariesにlibrariesというディレクトリを追加し、そこで以下のようにライブラリ情報を追加することで対応することができます。
{
"uniqueId": "com.example.library",
"artifactVersion": "xxxxxxxxx",
"developers": [
{
"name": "Google Inc"
},
{
"name": "example"
}
],
"description": "example",
"name": "com.example.library",
"licenses": [
"Apache-2.0"
]
}
現在のライセンス定義情報を出力
現在のライセンス定義情報を出力する際は、まずbuild.gradle.ktsに定義情報を出力するパスを定義します。
aboutLibraries {
// 現在のライセンス定義情報を出力
export {
outputFile = file("../aboutLibraries/aboutLibraries.json")
}
}
その上で、./gradlew :app:exportLibraryDefinitionsを実行すると、build.gradle.ktsで定義したaboutLibraries.jsonというファイルが出力されます。
これを活用して、新しくライブラリを追加した際でも、GitHub Actionsでライセンス情報を取得できていないライブラリがないかどうかをチェックすることができます。
まとめ
はじめて、AboutLibrariesというライブラリを使ってみましたが、Jetpack Composeと相性が良く、UIの自由度も高いので中々良かったです。
もし、他のライブラリの方が良いぞ!という話があれば、ぜひ教えてください!
Discussion