©️
【Android】OSS Licenses Gradle Plugin でライセンス一覧を表示する
前提
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_licenses
とthird_party_licenses_metadata
ファイルを作成します(この2ファイルの出力先はapp/build/generated/third_party_licenses/
以下)。
# デバッグビルドだとライセンス情報が出力されないので、リリースビルド
./gradlew clean assembleRelease
3. ライセンス一覧画面の表示
Intent
にOssLicensesMenuActivity
(OssLicensesActivity
ではなく)を渡して、画面遷移します。
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