Adicionar recursos do Gemini ao seu app Android

1. Antes de começar

A API Gemini Developer via Firebase AI Logic oferece acesso a modelos de IA generativa da família Gemini. Isso vai permitir que você crie novas experiências que até agora não estavam disponíveis.

Este codelab orienta você no processo de adicionar recursos de resumo ao aplicativo JetNews. O JetNews é um app de notícias criado com o Jetpack Compose, parte do repositório compose-samples (links em inglês).

Aplicativo JetNews em ação

Neste codelab, você vai:

  • Criar um comando no Google AI Studio para resumir notícias.
  • Integrar o SDK de lógica de IA do Firebase ao JetNews.
  • Adicionar uma seção "Resumo do Gemini" na parte de cima da visualização da notícia e um botão "Resumo" na barra de baixo.

7eee9f1dcad682c.png

O app JetNews com o recurso de resumo da API Gemini.

Pré-requisitos

  • Conhecimentos básicos sobre Kotlin (link em inglês)
  • Familiaridade com o uso do Android Studio e o teste de apps em um emulador ou dispositivo físico com o nível 23 da API do Android ou mais recente
  • Uma Conta do Google para acessar o Firebase

2. Elaborar um comando

O comando é a mensagem enviada pelo seu app ao modelo Gemini pela API Gemini. Ele pode incluir arquivos de texto, imagens, áudio e vídeo.

A criação do comando ideal para um caso específico é mais arte do que ciência. Muitas vezes, esse processo requer várias iterações. O Google AI Studio é ótimo para isso. Com essa ferramenta do Google, você gera protótipos e testa rapidamente modelos de IA generativa.

Neste codelab, você vai resumir o conteúdo de um artigo técnico em quatro pontos. Seu objetivo com esse comando é garantir que o resumo seja relevante e esteja em texto simples, sem formatação Markdown.

Depois de algumas iterações, você provavelmente vai encontrar um comando que funciona muito bem. Você pode usar algo como o seguinte:

Summarize the core findings of the following article in 4 concise bullet points. Ensure each bullet point is specific, informative and relevant. Return just the bullet points as plain text. Don't use markdown.

[article body]

Quando achar que o resultado está como você quer, poderá integrar a API Gemini ao app Android.

3. Conferir o código

Comece conferindo o código-fonte inicial do GitHub:

git clone https://github.com/android/codelab-gemini-summary

O app JetNews foi projetado desde o início para ficar bem dimensionado em qualquer dispositivo móvel, seja grande ou pequeno. Para ver um exemplo das práticas recomendadas da arquitetura Android, confira o Now In Android (link em inglês).

Leia mais sobre a abordagem de implementação do JetNews para que o app possa ser usado em telas grandes (link em inglês).

Se o código-fonte do app JetNews for muito grande, não se preocupe. Para adicionar o recurso de resumo do Gemini, você só precisa modificar o código na classe GeminiRepositoryImpl. O código que ativa a geração do resumo e mostra o resultado no app já foi implementado.

Implementação final

É possível acessar diretamente a implementação final do código-fonte conferindo esta ramificação:

git clone https://github.com/android/codelab-gemini-summary
git switch final

Siga as instruções detalhadas na etapa 4 deste codelab para criar e configurar seu projeto do Firebase.

4. Configurar seu projeto do Firebase

Criar um projeto do Firebase

Crie um projeto do Firebase no console do Firebase. Crie um novo projeto do Firebase inserindo um novo nome na primeira etapa do fluxo de trabalho "Criar um projeto". O projeto do Google Cloud será criado automaticamente.

No seu projeto, abra o menu suspenso de IA e selecione Lógica de IA.

Clique em "Começar" e ative a API Gemini Developer, que permite começar sem custos financeiros e com cotas generosas:

Por fim, ative a API Gemini Developer:

Conectar seu app ao Firebase

Agora que você configurou seu projeto do Firebase, é necessário conectar o app Android a ele.

  1. No console do Firebase, selecione seu projeto.
  2. Clique em "Adicionar app" e selecione "Android".
  3. Siga as instruções na tela para registrar o app informando o nome do pacote.
  4. Baixe o arquivo google-services.json e adicione ao diretório raiz do módulo (nível do app) do seu app.
  5. Continue seguindo as instruções na tela para adicionar o plug-in do Gradle para Serviços do Google e as dependências do Gradle da Lista de Materiais (BoM) do Firebase ao app.

CUIDADO: não faça o commit público de google-services.json no controle de origem. O acesso público pode permitir que outras pessoas usem o projeto e pode gerar cobranças.

5. Atualizar importações do Gradle

O app JetNews usa o recurso de catálogos de versões do Gradle, que ajuda a centralizar as versões das dependências.

  1. Para adicionar a importação do Gradle para o Firebase AI Logic, adicione o seguinte ao arquivo libs.versions.toml:
    [versions]
    ...
    firebase-bom = "34.4.0" // get the latest version from the Firebase documentation
    
    [libraries]
    ...
    firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref ="firebase-bom" }
    firebase-ai = { group = "com.google.firebase", name = "firebase-ai" }
    
    Não é necessário especificar a versão do firebase-ai. Usar a versão mais recente da BoM do Firebase especifica automaticamente a versão mais recente do SDK Firebase AI Logic.
  2. Atualize build.gradle.kts:
    implementation(platform(libs.firebase.bom))
    implementation(libs.firebase.ai)
    
  3. Clique em "Sincronizar agora" para buscar os artefatos do Gradle.

Se você não quiser usar os catálogos de versões do Gradle, adicione a importação diretamente no build.gradle.kts:

implementation(platform("com.google.firebase:firebase-bom:34.4.0"))
implementation("com.google.firebase:firebase-ai")

6. Integração com o Kotlin

Agora que as dependências adequadas foram adicionadas, atualize o código Kotlin.

Abra a classe GeminiRepositoryImpl. Essa classe hospeda todo o código que interage com a API Gemini.

Inicialização do modelo Gemini

Instancie a classe GenerativeModel:

private val generativeModel = Firebase.ai(backend = GenerativeBackend.googleAI())
        .generativeModel(
            modelName = "gemini-2.5-flash",
            generationConfig = generationConfig {
                temperature = 0f
            },
            safetySettings = listOf(
                SafetySetting(HarmCategory.HARASSMENT, HarmBlockThreshold.LOW_AND_ABOVE),
                SafetySetting(HarmCategory.HATE_SPEECH, HarmBlockThreshold.LOW_AND_ABOVE),
                SafetySetting(HarmCategory.SEXUALLY_EXPLICIT, HarmBlockThreshold.LOW_AND_ABOVE),
                SafetySetting(HarmCategory.DANGEROUS_CONTENT, HarmBlockThreshold.LOW_AND_ABOVE),
            )
        )

Neste exemplo, você está acessando o modelo Gemini 2.5 Flash. Ele é capaz de lidar com o caso de uso para resumos de texto do exemplo. Saiba mais sobre os modelos do Gemini disponíveis na documentação do Firebase AI Logic.

Esse exemplo também define o valor da temperatura como 0, o que garante uma consistência melhor na geração de resumos. Saiba mais sobre os parâmetros de configuração do modelo na documentação do Firebase AI Logic.

Por fim, este exemplo define as configurações de segurança para garantir que o modelo gere respostas com linguagem apropriada. Saiba mais sobre os recursos de configuração de segurança na documentação do Firebase AI Logic.

Resumo usando o Gemini

Em seguida, atualize a função summarizePost() para resumir o post transmitido como parâmetro.

Primeiro, extraia o texto do post combinando todos os parágrafos em uma única string e a transmita para o modelo:

val postString = StringBuilder()
for (paragraph in post.paragraphs) {
  postString.append(paragraph.text)
}

Crie o prompt com base no comando criado na etapa 2 deste codelab e transmita o post:

val prompt =
            "Summarize the following article in 4 concise bullet points. " +
                    "Ensure each bullet point is specific, informative and relevant. " +
                    "Return just the bullet points as plain text. " +
                    "Use plain text, don't use markdown. \n $postString"

Por fim, transmita o comando para o modelo e retorne a resposta:

return generativeModel.generateContent(prompt).text

Testar a implementação

Para testar a implementação, clique em "Run app" no Android Studio e instale o app JetNews no emulador ou em um dispositivo físico.

Abra qualquer matéria na página inicial e clique no botão "Resumir" na barra de baixo:

Botão que ativa o resumo do Gemini

A seção "Resumo do Gemini" vai aparecer na parte de cima da matéria, abaixo da ilustração:

A seção "Resumo do Gemini" que aparece na parte de cima da matéria

Arquitetura do app JetNews

O JetNews foi criado para mostrar os recursos atuais da interface do Jetpack Compose. Ele foi implementado para ser compatível com diferentes tamanhos de tela. Para mais detalhes, consulte este post do blog (em inglês).

O objetivo deste codelab não é entrar em detalhes na arquitetura do app JetNews. A integração do Gemini ocorre principalmente na classe GeminiRepositoryImpl.

No entanto, se você quiser saber como o botão ativa o resumo, consulte a função SummaryButton() em JetnewsIcons.kt. Você também pode analisar a implementação da interface de resumo na função SummarySection() em PostContent.kt.

7. Conclusão

Neste codelab, você aprendeu a:

  • Criar e testar um comando no Google AI Studio.
  • Configurar um projeto no Firebase para usar o SDK Firebase AI Logic.
  • Configurar as dependências do Gradle para usar o Firebase AI Logic em um app Android.
  • Chamar o Gemini 2.5 Flash no código Kotlin.

Para saber mais sobre o Firebase AI Logic, consulte os exemplos de código de IA do Android e a documentação.