包含开源声明

Google Play 服务 SDK 有时会包含或依赖于开源库。为遵守开源库的许可要求,开发者有责任妥善显示应用所用开源库的通知。

Google Play 服务包含一组工具,旨在让开发者更轻松地表达其应用中使用的库的开源软件 (OSS) 注意事项。oss-licenses-plugin 和 Google Play 服务 oss-licenses SDK 会从包含的库中收集许可条款(如其 POM 文件中所声明),并创建一个可用于显示这些条款的 activity。详细了解该工具如何查找和打包许可信息

添加 Gradle 插件

在项目设置的 pluginManagement 中,执行以下操作:

  1. 添加 Google Maven 制品库
  2. PluginManagement 中解析 oss-licenses 插件。

以下代码段展示了这些步骤:

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.10.6")
      }
    }
  }
}

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.10.6")
      }
    }
  }
}

在应用级 build 文件中,通过在文件顶部的 com.android.application 插件的现有声明下添加以下代码行来应用该插件:

app/build.gradle.kts

plugins {
    id("com.android.application")
    id("com.google.android.gms.oss-licenses-plugin")
}

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 库的依赖项:

build.gradle.kts

implementation("com.google.android.gms:play-services-oss-licenses:17.2.2")

build.gradle

implementation 'com.google.android.gms:play-services-oss-licenses:17.2.2'

显示许可信息

当您的应用构建时,Gradle 插件会处理许可并将它们添加到应用的资源中。如需轻松显示许可,您可以在应用的适当位置启动 play-services-oss-licenses 库提供的 activity,如以下代码段所示:

KotlinJava
import com.google.android.gms.oss.licenses.OssLicensesMenuActivity
...

// When the user selects an option to see the licenses:
startActivity(Intent(this, OssLicensesMenuActivity::class.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 启动时,它会显示编译到应用中的开源库列表,包括应用使用的库,如图 1 所示。用户可以点按库的名称,查看该库的其他许可信息。

列表视图,其中每个元素都包含一个开源库的名称

图 1. 许可菜单 activity 会显示应用使用的开源库的可选择列表。

设置活动标题

默认情况下,显示的 activity 的标题为“开源许可”。您可以调用 setActivityTitle() 自定义 activity 的标题,如以下代码段所示:

KotlinJava
OssLicensesMenuActivity.setActivityTitle(getString(R.string.custom_license_title))
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 资源中。