Bem-vindo de volta à série de postagens do blog "Crie apps Android inteligentes", em que pegamos um app Android básico e o transformamos em uma experiência personalizada, inteligente e ativa. Na postagem anterior, apresentamos o Jetpacker, o app de demonstração que vamos usar ao longo desta série.
Nesta postagem do blog, vamos compartilhar como usar o Gemini Nano com a API Prompt do ML Kit para criar recursos inteligentes no dispositivo.
A criação de recursos inteligentes no dispositivo se refere à capacidade de processar comandos e dados diretamente em um dispositivo sem enviar dados para um servidor. Isso oferece algumas vantagens:
- Os dados do usuário podem ser tratados localmente no dispositivo, preservando a privacidade do usuário.
- A funcionalidade do modelo é confiável mesmo com conexão de Internet instável ou sem conexão.
- Sem custo adicional de inferência na nuvem, já que tudo é executado no hardware do usuário
Pensando nos benefícios no dispositivo, identificamos três recursos para adicionar ao Jetpacker que podem melhorar a experiência do usuário: resumir itinerários de viagem, gerenciar despesas e capturar notas de voz.
Resumo personalizado de alta qualidade de textos curtos
A tela de itinerário oferece aos usuários uma visão geral rápida de todas as atividades de uma determinada viagem. Como essa tela contém muitas informações, ela pode ficar confusa rapidamente. Para ajudar os usuários a se preparar sem se sentir sobrecarregados, podemos adicionar uma seção Planeje e prepare-se para a viagem na parte de cima.
Ao inserir um itinerário de viagem e pedir para um LLM resumir, podemos gerar um resumo rápido da viagem com dicas de bagagem e frases locais úteis. Esse é um ótimo caso de uso para um modelo no dispositivo por vários motivos:
- Performance e qualidade:tanto o texto de entrada quanto o de saída são relativamente curtos. Assim, podemos esperar que o desempenho e a qualidade de uma solução no dispositivo estejam em pé de igualdade com modelos de nuvem mais poderosos.
- Escalonabilidade:a mudança da inferência no dispositivo permite que esse recurso seja usado por milhões de usuários sem se preocupar com o aumento dos custos de inferência na nuvem.
- Baixa latência e confiabilidade:a inferência no dispositivo garante baixa latência, oferecendo uma experiência confiável mesmo quando os usuários estão off-line.
Para criar com o recurso no dispositivo, usamos o Gemini Nano, o modelo mais eficiente do Google otimizado para dispositivos móveis. O Gemini Nano foi lançado há alguns anos e agora está em mais de 140 milhões de dispositivos. A versão mais recente do modelo, o Gemini Nano 4, foi criada com base na arquitetura do modelo Gemma 4, lançado recentemente, e foi ainda mais otimizada para máxima eficiência de bateria e desempenho.
Usando a API Prompt do ML Kit, podemos aproveitar os novos recursos do modelo do Gemini Nano 4 para criar protótipos dos nossos recursos no dispositivo. Vamos criar um comando que inclua o itinerário de uma viagem e pedir ao modelo para gerar um resumo com dicas de preparação.
Encontrar o comando ideal geralmente requer alguma iteração, e o app AICore é perfeito para essa etapa do processo. Depois de ativar a opção de prévia para desenvolvedores do AICore, podemos baixar modelos de prévia, como o Gemini Nano 4, para testar comandos e conferir as saídas esperadas do modelo. Com algumas iterações no comando, conseguimos melhorar a velocidade da resposta de 13 segundos para menos de 2 segundos. Confira a implementação final do código e o comando aqui.
[ASSET HERE - FILE TOO LARGE ATM]
Processamento local para entradas sensíveis do usuário
Em seguida, para ajudar os usuários a aproveitar ainda mais a viagem, vamos criar um gerenciador de despesas simples que elimina o trabalho manual de separar recibos e calcular orçamentos.
Como os recibos podem conter informações sensíveis, como número do cartão de crédito e endereços, esse é outro ótimo caso de uso para uma solução no dispositivo. Com o processamento no dispositivo, os usuários podem ter certeza de que as informações particulares serão processadas localmente no dispositivo sem que nenhum dado seja enviado para a nuvem.
Além disso, o Gemini Nano 4 tem recursos de modelo aprimorados para multimodalidade, especialmente para tarefas de compreensão de imagens, como OCR e extração de dados visuais. Isso o torna uma ótima solução para tarefas como extrair informações de recibos.
Para esse caso de uso, o comando vai analisar uma imagem do recibo e gerar informações como: um título gerado, o valor gasto e a categoria da despesa. Para garantir que o modelo gere as informações no formato preferido, podemos usar a API Structured Output do ML Kit para gerar sem problemas um objeto de dados Kotlin que definimos.
// implementation("com.google.mlkit:genai-prompt:1.0.0-beta3")
// ksp("com.google.mlkit:genai-schema-compiler:1.0.0-alpha1")
@Generable("Information extracted from an expense receipt")
data class ParsedReceipt(
@Guide("Generated title for the expense less than 6 words. Based on restaurant or activity name.")
val title: String,
@Guide("Total amount of the expense. Look for values at the bottom and words like total or balance due.")
val amount: Double,
@Guide("Type of expense", enumValues = ["travel", "food", "shopping", "entertainment", "other"])
val category: String,
)
val prompt = "Determine if the image is a receipt or expense.
If it is NOT a receipt or expense, output the text 'NOT_A_RECEIPT'.
Otherwise, parse the receipt information."
val request = generateContentRequest(ImagePart(bitmap), TextPart(prompt)) {}
val requestWithStructuredOutput = generateTypedContentRequest(request, ParsedReceipt::class)
// Define the configuration for Gemini Nano 4 E4B preview model
// When selecting models, you can specify which performance charactertists are most important
// for your use case. Use ModelPreference.FULL when you want to prioritize reasoning power over speed.
// Use ModelPreference.FAST when complex logic is not required and latency is a priority.
val previewFullConfig = generationConfig {
modelConfig = modelConfig {
releaseStage = ModelReleaseStage.PREVIEW
preference = ModelPreference.FULL
}
}
val geminiNano4BPreviewModel = Generation.getClient(previewFullConfig)
val response = geminiNano4BPreviewModel.generateContent(requestWithStructuredOutput)
val parsedReceipt: ParsedReceipt? = response.candidates.firstOrNull()?.responseentrada multimodal
Por fim, para ajudar os usuários a gravar memorandos de áudio durante a viagem, vamos criar um recurso de notas de voz totalmente no dispositivo. Usando a API Speech Recognition do Kit de ML, vamos permitir que os usuários gravem notas de voz curtas que são transcritas automaticamente em texto. Com o texto transcrito, vamos usar a API Prompt do Kit de ML para identificar qual atividade da viagem está associada à nota em áudio gravada, permitindo que os usuários recapitulem facilmente a viagem enquanto rolam pelo itinerário.
A API Kit de ML GenAI Speech Recognition permite transcrever conteúdo de áudio para texto totalmente no dispositivo usando dois modos distintos. O modo básico usa um modelo tradicional de reconhecimento de fala no dispositivo e está disponível na maioria dos dispositivos Android com nível 31 da API e versões mais recentes. O modo avançado usa o Gemini Nano para oferecer uma cobertura de idiomas mais ampla e melhor qualidade. No momento, ele está disponível para dispositivos Pixel 10.
Para nosso recurso, combinamos a API Speech Recognition com a API GenAI Prompt do Kit de ML:
// implementation("com.google.mlkit:genai-prompt:1.0.0-beta3")
// implementation("com.google.mlkit:genai-speech-recognition:1.0.0-alpha1")
val tripEvents = ...
// Set up speech recognition
val speechRecognizerOptions =
speechRecognizerOptions {
locale = Locale.US
preferredMode = SpeechRecognizerOptions.Mode.MODE_ADVANCED
}
val speechRecognizer: SpeechRecognizer = SpeechRecognition.getClient(speechRecognizerOptions)
suspend fun transcribeVoiceNote(recognizer: SpeechRecognizer) {
// Display partial text as the user is recording audio
var partialTextResponse = ""
// Display the full text once user is finished recording audio
var transcription = ""
val request: SpeechRecognizerRequest
= speechRecognizerRequest { audioSource = AudioSource.fromMic() }
recognizer.startRecognition(request).collect { response ->
when (response) {
is SpeechRecognizerResponse.PartialTextResponse -> {
partialTextResponse = response.text
}
is SpeechRecognizerResponse.FinalTextResponse -> {
transcription = response.text
processAndCategorizeVoiceNote(transcription, tripEvents)
}
}
}
}
fun processAndCategorizeVoiceNote(transcribedVoiceNote: String, events: List<Event>) {
val prompt = "Given the voice note $transcribedVoiceNote
and the following events for this trip: $events, rewrite this transcription
to remove filler words. Then, identify which events from the
list this rewritten transcription matches to."
// Utilize ML Kit's Prompt API to process voice note and tag it with the relevant trip activities
Generation.getClient().generateContent(prompt)
}Conclusão
Usando as APIs de IA generativa do ML Kit, aproveitamos o Gemini Nano para desenvolver recursos inteligentes totalmente no dispositivo para o app JetPacker e oferecer uma experiência do usuário aprimorada sem custos adicionais de nuvem.
Confira o código-fonte completo do Jetpacker no GitHub e assista o vídeo Crie apps Android inteligentes com a IA do Google para saber mais sobre como integrar recursos inteligentes diretamente ao seu app usando modelos no dispositivo, raciocínio com tecnologia da nuvem e as estruturas de agentes mais recentes.
Saiba mais
Confira as outras partes desta série de postagens do blog:
Parte 1:introdução do app e uma visão geral de alto nível.
Parte 2 (este post!): Inteligência no dispositivo. Conheça as APIs GenAI do Kit de ML e o Gemini Nano para criar recursos que priorizam a privacidade, como resumo de itinerários, análise de recibos e processamento de áudio local.
Parte 3:raciocínio híbrido e na nuvem. Saiba como usar o Firebase AI Logic para fundamentar as respostas do LLM em dados do mundo real, como o Google Maps e o contexto da Web.
Parte 4:integração de sistemas. Integração com o sistema de inteligência do Android usando AppFunctions.
Parte 5 (em breve): fluxos de trabalho agênticos no app. Estenda o app com um assistente de reservas completo com tecnologia A2UI e ADK.
Quer saber mais sobre desenvolvimento para Android? Siga o Android Developers no YouTube ou no LinkedIn.
Todos os snippets de código nesta postagem do blog seguem a seguinte notificação de direitos autorais:
Copyright 2026 Google LLC. SPDX-License-Identifier: Apache-2.0
-
TutoriaisBem-vindo de volta à série de postagens do blog "Crie apps Android inteligentes", em que pegamos um app Android básico e o transformamos em uma experiência personalizada, inteligente e com agentes.
Thomas Ezan, Jolanda Verhoef, Caren Chang • Leitura de 8 minutos -
TutoriaisO Jetpacker é um app de demonstração técnica que nossa equipe criou do zero para o Google I/O deste ano (usando o Antigravity). Basicamente, o Jetpacker ajuda os usuários a planejar, explorar e aproveitar a próxima grande aventura.
Jolanda Verhoef • Leitura de 4 minutos -
TutoriaisBem-vindo de volta à série de postagens do blog "Crie apps Android inteligentes", em que pegamos um app Android básico e o transformamos em uma experiência personalizada, inteligente e com agentes. Na postagem anterior, mostramos como usar o Firebase AI Logic para criar recursos de IA híbridos e hospedados na nuvem.
Ben Weiss • Leitura de 6 minutos
Receba os insights mais recentes sobre desenvolvimento Android na sua caixa de entrada semanalmente.