Google Play 服务 SDK 有时会包含开源库或依赖于开源库。为了遵守开源库的许可要求,作为开发者,您有责任为应用使用的开源库适当显示通知。
Google Play 服务包含一系列工具,旨在让开发者能够更轻松地表达其应用中使用的库的开源软件 (OSS) 通知。oss-licenses-plugin 和 Google Play 服务
oss-licenses SDK 会从包含的库(如其
POM 文件中所声明)收集许可条款,并创建一个
activity
,可用于显示这些条款。详细了解
该工具如何查找和打包许可信息。
添加 Gradle 插件
在项目设置的 pluginManagement 中,执行以下操作:
- 添加 Google Maven 制品库。
- 在
PluginManagement中解析oss-licenses插件。
以下代码段展示了这些步骤:
Kotlin DSL
settings.gradle.kts
pluginManagement { repositories { ... google() } resolutionStrategy { eachPlugin { if (requested.id.id == "com.google.android.gms.oss-licenses-plugin") { useModule("com.google.android.gms:oss-licenses-plugin:0.11.0") } } } }
Groovy DSL
build.gradle
pluginManagement { repositories { ... google() } resolutionStrategy { eachPlugin { if (requested.id.id == "com.google.android.gms.oss-licenses-plugin") { useModule("com.google.android.gms:oss-licenses-plugin:0.11.0") } } } }
在应用级 build 文件中,通过在文件顶部的 com.android.application 插件的现有声明下添加以下行来应用该插件:
Kotlin DSL
app/build.gradle.kts
plugins { id("com.android.application") id("com.google.android.gms.oss-licenses-plugin") }
Groovy DSL
app/build.gradle
plugins { id 'com.android.application' id 'com.google.android.gms.oss-licenses-plugin' }
您可以在 GitHub 上查看此插件的代码 。
将 play-services-oss-licenses 库添加到您的应用
在应用级 build 文件的 dependencies 部分中,添加对 play-services-oss-licenses 库的依赖项:
Kotlin DSL
build.gradle.kts
implementation("com.google.android.gms:play-services-oss-licenses:17.5.0")
Groovy DSL
build.gradle
implementation 'com.google.android.gms:play-services-oss-licenses:17.5.0'
显示许可信息
构建应用时,Gradle 插件会处理许可并将其添加到应用的资源中。如需轻松显示许可,您可以在应用中的适当位置启动 play-services-oss-licenses 库提供的 activity
,如以下代码段所示:
Kotlin
import com.google.android.gms.oss.licenses.v2.OssLicensesMenuActivity ... // When the user selects an option to see the licenses: startActivity(Intent(this, OssLicensesMenuActivity::class.java))
Java
import com.google.android.gms.oss.licenses.v2.OssLicensesMenuActivity; ... // When the user selects an option to see the licenses: startActivity(new Intent(this, OssLicensesMenuActivity.class));
启动该 activity 后,它会显示编译到应用中的开源库列表,包括应用使用的库,如图 1 所示。用户可以点按库的名称,以查看该库的其他许可信息。
图 1. 许可菜单 activity 显示了应用使用的开源库的可选列表。
设置 activity 标题
默认情况下,显示的 activity 的标题为“开源许可”。您可以通过调用
setActivityTitle()来自定义 activity 的标题,
如以下代码段所示:
Kotlin
OssLicensesMenuActivity.setActivityTitle(getString(R.string.custom_license_title))
Java
OssLicensesMenuActivity.setActivityTitle(getString(R.string.custom_license_title));
为 activity 应用主题
根据您的应用是使用 Material 3 还是基于 XML 的主题,有多种方法可将主题应用于 OssLicensesMenuActivity。
使用 Material 3 的应用
对于使用 Material 3 的应用,您可以调用
setTheme()
方法来为 activity 应用自定义主题,如以下代码
段所示:
Kotlin
import com.google.android.gms.oss.licenses.v2.OssLicensesMenuActivity ... OssLicensesMenuActivity.setTheme(lightColorScheme, darkColorScheme, typography) startActivity(Intent(this, OssLicensesMenuActivity::class.java))
Java
import com.google.android.gms.oss.licenses.v2.OssLicensesMenuActivity; ... OssLicensesMenuActivity.setTheme(lightColorScheme, darkColorScheme, typography); startActivity(new Intent(this, OssLicensesMenuActivity.class));
使用 XML 主题的应用
对于使用 XML 主题的应用,您可以在清单中为 activity 应用主题,以与应用的其他 activity 中使用的主题相匹配。为此,
请在应用的清单文件中将开源许可 activity 添加到 <activity> 元素中,如以下代码段所示:
<application android:theme="@style/AppTheme" ...> <activity android:name="com.google.android.gms.oss.licenses.v2.OssLicensesMenuActivity" tools:replace="android:theme" android:theme="@style/AppTheme" /> </application>
如何确定许可列表
在编译时,Gradle 插件会扫描应用项目的 POM 依赖项。当应用的直接依赖项存在 Maven POM 时,该插件会
处理每个 <licenses>
元素,并将每个许可的链接和标题嵌入到应用随附的 Android 资源中。