©️

【Android】OSS Licenses Gradle Plugin でライセンス一覧を表示する

2025/03/23に公開

前提

Version Catalogs を使用

1. OSS Licenses Gradle Plugin の導入

プロジェクト直下のbuild.gradleに、以下を追加します。

./gradle/libs.versions.toml

[versions]
ossLicensesPlugin = "0.10.6"
playServicesOssLicenses = "17.1.0"

[libraries]
oss-licenses-plugin = { module = "com.google.android.gms:oss-licenses-plugin", version.ref = "ossLicensesPlugin" }
play-services-oss-licenses = { module = "com.google.android.gms:play-services-oss-licenses", version.ref = "playServicesOssLicenses" }

build.gradle

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath libs.oss.licenses.plugin
    }
}

com.google.android.gms.oss-licenses-pluginを、サブプロジェクトのbuild.gradleに追加します。
README.md に記載されているように、com.android.applicationの下に追加します。

app/build.gradle

apply plugin: 'com.android.application'
apply plugin: 'org.jetbrains.kotlin.android'
apply plugin: 'com.google.android.gms.oss-licenses-plugin'

dependencies {
    implementation(libs.play.services.oss.licenses)
}

app/build.gradle(plugins block を使う方法)

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'com.google.android.gms.oss-licenses-plugin'
}

dependencies {
    implementation(libs.play.services.oss.licenses)
}

2. ライセンス情報ファイルの生成

ビルドして、third_party_licensesthird_party_licenses_metadataファイルを作成します(この2ファイルの出力先はapp/build/generated/third_party_licenses/以下)。

# デバッグビルドだとライセンス情報が出力されないので、リリースビルド
./gradlew clean assembleRelease

3. ライセンス一覧画面の表示

IntentOssLicensesMenuActivityOssLicensesActivityではなく)を渡して、画面遷移します。

Activity にて

val intent = Intent(activity, OssLicensesMenuActivity::class.java)
startActivity(intent)

その他

OssLicensesMenuActivityのテーマやタイトルを変更する

<application ...>
        <activity
            android:name="com.google.android.gms.oss.licenses.OssLicensesMenuActivity"
            android:label="@string/oss_license_title"
            android:theme="@style/Theme.AppCompat.DayNight" />
</application>

マルチモジュールのとき

ライセンス画面への遷移を設定画面(feature:settings)のようなモジュールから行う場合。
feature:settingsモジュールはcom.android.libraryで、com.google.android.gms.oss-licenses-pluginを適用できなかったため、Hilt で DI して、appモジュールで遷移処理を実装しました(他に方法がああれば教えてください!)。

feature:settingsモジュール

SettingsNavigation.kt

interface SettingsNavigation {
    fun navigateLicenses(activity: Activity)
}

SettingsActivity.kt

class SettingsActivity : AppCompatActivity() {
    @Inject
    lateinit var navigation: SettingsNavigation

    fun onLicenseClicked() {
        navigation.navigateLicenses(this)
    }
}

app モジュール

ActivityNavigator.kt

object ActivityNavigator : SettingsNavigation {
    override fun navigateLicenses(activity: Activity) {
        val intent = Intent(activity, OssLicensesMenuActivity::class.java)
        activity.startActivity(intent)
    }
}

AppModule.kt

@Module
@InstallIn(SingletonComponent::class)
object AppModule {
    @Provides
    fun provideSettingsNavigation(): SettingsNavigation = ActivityNavigator
}

参考

Discussion