Incluir avisos de código aberto

Os SDKs do Google Play Services às vezes incluem ou dependem de bibliotecas de código aberto. Para obedecer aos requisitos de licença das bibliotecas de código aberto, você, como desenvolvedor, é responsável por exibir adequadamente os avisos das bibliotecas de código aberto que seu app usa.

O Google Play Services inclui um conjunto de ferramentas projetadas para oferecer aos desenvolvedores uma maneira mais fácil de expressar os avisos de software de código aberto (OSS, na sigla em inglês) de bibliotecas usadas nos apps. O oss-licenses-plugin e o SDK de licenças de código aberto do Google Play Services coletam os termos de licença das bibliotecas incluídas, conforme declarado nos arquivos POM, e criam uma atividade que pode ser usada para exibir esses termos. Saiba mais sobre como a ferramenta encontra e empacota informações de licença.

Adicionar o plug-in do Gradle

No pluginManagement das configurações do projeto, faça o seguinte:

  1. Inclua o repositório Maven do Google.
  2. Resolva o plug-in oss-licenses no PluginManagement.

O snippet de código abaixo mostra essas etapas:

DSL do Kotlin

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

DSL do Groovy

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

No arquivo de build do app, aplique o plug-in adicionando a seguinte linha abaixo da declaração atual do plug-in com.android.application na parte de cima do arquivo:

DSL do Kotlin

app/build.gradle.kts

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

DSL do Groovy

app/build.gradle

plugins {
    id 'com.android.application'
    id 'com.google.android.gms.oss-licenses-plugin'
}

É possível ver o código desse plug-in no GitHub.

Adicionar a biblioteca play-services-oss-licenses ao app

Na seção dependencies do arquivo de build no nível do app, adicione uma dependência à biblioteca play-services-oss-licenses:

DSL do Kotlin

build.gradle.kts

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

DSL do Groovy

build.gradle

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

Mostrar informações da licença

Quando o app é criado, o plug-in do Gradle processa as licenças e as adiciona aos recursos do app. Para exibir a licença com facilidade, inicie uma atividade fornecida pela biblioteca play-services-oss-licenses em um ponto adequado do app, conforme mostrado no snippet de código abaixo:

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

Quando a atividade é iniciada, ela mostra uma lista de bibliotecas de código aberto que são compiladas no app, incluindo as usadas por ele, como mostrado na figura 1. Os usuários podem tocar no nome de uma biblioteca para ver mais informações de licença sobre ela.

Visualização em lista com cada elemento contendo o nome de uma biblioteca de código aberto

Figura 1. A atividade do menu de licenças mostra uma lista selecionável de bibliotecas de código aberto usadas por um app.

Definir o título da atividade

Por padrão, a atividade exibida tem o título "Licenças de código aberto". É possível personalizar o título da atividade chamando setActivityTitle(), conforme mostrado no snippet de código abaixo:

Kotlin

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

Java

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

Aplicar um tema à atividade

Há diferentes maneiras de aplicar um tema ao OssLicensesMenuActivity, dependendo se o app usa o Material Design 3 ou temas baseados em XML.

Apps que usam o Material 3

Para apps que usam o Material 3, chame o método setTheme() para aplicar um tema personalizado à atividade, conforme mostrado no snippet de código abaixo:

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

Apps que usam temas XML

Para apps que usam temas XML, é possível aplicar um tema à atividade no manifesto para que ele corresponda ao tema usado nas outras atividades do app. Para fazer isso, inclua a atividade de licença de código aberto em um elemento <activity> no arquivo de manifesto do app, conforme mostrado no snippet de código abaixo:

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

Como a lista de licenças é determinada

No tempo de compilação, o plug-in do Gradle verifica as dependências do POM do projeto do app. Quando um POM do Maven existe para uma dependência direta do app, o plug-in processa cada elemento <licenses> e incorpora o link e o título de cada licença em um recurso do Android que é incluído no app.