Google Play 服务有时会包含或依赖于开源库。 为了符合开源库的许可要求,作为开发者,您有责任适当地展示您的应用使用的开源库的通知。
Google Play 服务提供了一套工具,旨在让开发者更轻松地表达其应用中所用库的开源软件通知。其中一个工具就是 Gradle 插件,按照 POM 文件中的声明从包含的库收集许可条款,并创建可用于显示这些条款的 activity。详细了解此工具如何查找并打包许可信息。
添加 Gradle 插件
在根级 build 文件中,执行以下操作:
- 添加 Google Maven 代码库。
- 将
oss-licenses
插件添加到您的依赖项中。
以下代码段显示了这些步骤:
Kotlin DSL
build.gradle.kts
buildscript { repositories { ... google() // maven { url("https://maven.google.com") } for Gradle <= 3 } dependencies { ... classpath("com.google.android.gms:oss-licenses-plugin:0.10.6") } }
Groovy DSL
build.gradle
buildscript { repositories { ... google() // maven { url "https://maven.google.com" } for Gradle <= 3 } dependencies { ... classpath 'com.google.android.gms:oss-licenses-plugin:0.10.6' } }
在应用级 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 上查看此插件的代码。
将库添加到您的应用
在应用级 build 文件的 dependencies
部分中,添加对 oss-licenses
库的依赖项:
Kotlin DSL
build.gradle.kts
implementation("com.google.android.gms:play-services-oss-licenses:17.0.1")
Groovy DSL
build.gradle
implementation 'com.google.android.gms:play-services-oss-licenses:17.0.1'
显示许可信息
在您的应用构建时,Gradle 插件会处理许可并将其添加到应用资源中。为了轻松显示许可,您可以在应用中的适当位置启动 play-services-oss-licenses
库提供的 activity,如以下代码段所示:
Kotlin
import com.google.android.gms.oss.licenses.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.OssLicensesMenuActivity; ... // When the user selects an option to see the licenses: startActivity(new Intent(this, OssLicensesMenuActivity.class));
启动时,此 activity 会显示已编译到应用中的开源库的列表,包括 Google Play 服务中包含的库,如图 1 所示。用户可以点按库的名称,以查看该库的更多许可信息。
图 1. 许可菜单 activity 会显示一个供应用使用的开源库的可选列表。
设置活动标题
默认情况下,显示的 activity 的标题为“开源许可”。您可以通过调用 setActivityTitle()
来自定义 activity 的标题,如以下代码段所示:
Kotlin
OssLicensesMenuActivity.setActivityTitle(getString(R.string.custom_license_title))
Java
OssLicensesMenuActivity.setActivityTitle(getString(R.string.custom_license_title));
为 activity 应用主题
您可以为 activity 应用主题,以与应用的其他 activity 中使用的主题匹配。为此,请在应用清单文件的 <activity>
元素中添加开源许可 activity,如以下代码段所示:
<application android:theme="@style/AppTheme" ...> <activity android:name="com.google.android.gms.oss.licenses.OssLicensesMenuActivity" android:theme="@style/AppTheme" /> <activity android:name="com.google.android.gms.oss.licenses.OssLicensesActivity" android:theme="@style/AppTheme" /> </application>
如何确定许可列表
在编译时,Gradle 插件会扫描应用项目的 POM 依赖项。当存在应用直接依赖项的 Maven POM 时,插件会处理每个 <licenses>
元素,并将每个许可的链接和标题嵌入到应用包含的 Android 资产中。