Добавить уведомления об открытом ПО

В SDK сервисов Google Play иногда входят библиотеки с открытым исходным кодом или они зависят от них. Чтобы соблюдать требования лицензий на библиотеки ПО с открытым исходным кодом, вы как разработчик должны показывать уведомления для таких библиотек, используемых в вашем приложении.

Сервисы Google Play включают набор инструментов, которые позволяют разработчикам легко добавлять уведомления о программном обеспечении с открытым исходным кодом (OSS) в свои приложения. oss-licenses-plugin и SDK oss-licenses сервисов Google Play собирают условия лицензий из включенных библиотек, как указано в их файлах POM, и создают операцию, которую можно использовать для отображения этих условий. Подробнее о том, как инструмент находит и упаковывает информацию о лицензиях…

Как добавить плагин Gradle

В разделе pluginManagement настроек проекта выполните следующие действия:

  1. Добавьте хранилище Google Maven.
  2. Устраните проблему с плагином oss-licenses в PluginManagement.

Ниже приведен фрагмент кода, в котором показаны эти шаги:

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

В файле сборки на уровне приложения примените плагин, добавив следующую строку под существующим объявлением плагина 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 в приложение

В разделе dependencies файла сборки на уровне приложения добавьте зависимость от библиотеки play-services-oss-licenses:

Kotlin DSL

build.gradle.kts

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

Groovy DSL

build.gradle

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

Как посмотреть информацию о лицензии

Во время сборки приложения плагин Gradle обрабатывает лицензии и добавляет их в ресурсы приложения. Чтобы легко показывать лицензию, вы можете запустить действие, предоставленное библиотекой play-services-oss-licenses, в подходящий момент в приложении, как показано в следующем фрагменте кода:

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));

Когда вы запустите это действие, на экране появится список библиотек ПО с открытым исходным кодом, скомпилированных в ваше приложение, включая библиотеки, используемые приложением (см. рис. 1). Чтобы посмотреть дополнительную информацию о лицензии, нажмите на название библиотеки.

Список, в котором каждый элемент содержит название библиотеки ПО с открытым исходным кодом.

Рисунок 1. В меню лицензий можно посмотреть список библиотек с открытым исходным кодом, которые используются в приложении.

Как задать название действия

По умолчанию у действия будет название "Лицензии на ПО с открытым исходным кодом". Вы можете настроить название действия, вызвав метод setActivityTitle(), как показано в следующем фрагменте кода:

Kotlin

OssLicensesMenuActivity.setActivityTitle(getString(R.string.custom_license_title))

Java

OssLicensesMenuActivity.setActivityTitle(getString(R.string.custom_license_title));

Как применить тему к действию

Существует несколько способов применить тему к OssLicensesMenuActivity, в зависимости от того, использует ли ваше приложение темы Material 3 или на основе XML.

Приложения, в которых используется Material Design 3

Для приложений, использующих Material 3, вы можете вызвать метод setTheme(), чтобы применить к действию пользовательскую тему, как показано в следующем фрагменте кода:

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> в файле манифеста приложения, как показано в следующем фрагменте кода:

<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 проекта приложения. Если для прямой зависимости приложения существует файл POM Maven, плагин обрабатывает каждый элемент <licenses> и встраивает ссылку и название каждой лицензии в объект Android, который включен в приложение.