Lembro da primeira vez que procurei uma palavra dentro de uma nota do Google Keep e o app simplesmente me disse “a palavra existe nesta nota” sem mostrar onde. Aquilo me parecia absurdo em 2016 e continua me parecendo absurdo agora, em 2026. Segundo o Eurisko.com.br, o Google finalmente lançou o “Localizar na nota” para Android — quase uma década depois da Apple Notes. Na minha experiência, esse tipo de feature tardia revela muito sobre prioridades de produto e sobre como times grandes escolhem o que construir.
Por que demorou tanto para o Keep ganhar busca dentro da nota
Quem trabalha com desenvolvimento mobile sabe: implementar “find in page” não é trivial, mas também não é rocket science. O Google já tinha TextClassifier, androidx.text e APIs nativas de busca em texto desde a era do KitKat. Então por que dez anos?
Na minha leitura, três fatores explicam o atraso:
- Peso do app: o Keep roda em dispositivos antigos e com pouca RAM. Indexar notas inteiras para busca rápida aumenta o footprint de memória.
- Sincronização em tempo real: o Keep sincroniza via Firebase entre múltiplos dispositivos. Manter o índice consistente sem degradar a UX é um problema de engenharia paralelo.
- Prioridade de roadmap: o Keep é “quase um hobby” dentro do Google. Recebe features de IA, widgets, e ficou anos sem ganhar nada estrutural.
A Apple implementou isso no iOS 9 (2015) porque o Notes é nativo do sistema e roda dentro do pipeline do UIKit — uma busca por texto cabe em poucas dezenas de linhas de Swift. Já o Keep é um app Android puro que precisava renegociar renderização de rich text, Markdown e listas com checkbox.
O que muda na prática para quem usa o Keep
O comportamento é exatamente o que você espera de um Ctrl+F de navegador: abre a nota, toca no menu de três pontos, escolhe “Localizar na nota”, digita o termo e o Keep destaca em amarelo as ocorrências. Você pula entre elas com setas.
Testei aqui em três cenários reais do meu fluxo de trabalho:
- Nota de projeto com 5.000+ caracteres: antes eu rolava manualmente. Agora pulo direto para a linha do commit específico.
- Lista de compras de 80 itens: localizar “leite” virou trivial — útil para evitar duplicar itens em listas compartilhadas com minha esposa.
- Nota com checkboxes marcados parcialmente: encontrei um item desmarcado de 3 meses atrás em 3 cliques.
O detalhe importante é que a atualização depende de flag de servidor, não só de versão do APK. Se você atualizou e o botão não apareceu, é normal — o Google habilita em ondas, como já vi várias vezes em rollouts internos e em testes A/B de features em produção.
Na Prática: como eu faria “Find in Note” se fosse implementar do zero
Como a galera aqui é técnica, vou mostrar o esqueleto de uma implementação equivalente em um app Android nativo com Kotlin. Isso ajuda a entender o tamanho real do problema que o Google resolveu.
class FindInNoteController(
private val editableText: Editable,
private val textView: TextView
) {
private val highlights = mutableListOf()
private var currentIndex = -1
fun search(query: String) {
clearHighlights()
if (query.isBlank()) return
val text = editableText.toString()
var start = text.indexOf(query, ignoreCase = true)
while (start != -1) {
val end = start + query.length
highlights.add(start until end)
start = text.indexOf(query, start + 1, ignoreCase = true)
}
if (highlights.isNotEmpty()) {
currentIndex = 0
applyHighlights(query)
jumpToCurrent()
}
}
private fun applyHighlights(query: String) {
val spannable = SpannableString(editableText)
val bgColor = ContextCompat.getColor(
textView.context,
R.color.find_in_note_highlight
)
highlights.forEachIndexed { idx, range ->
val color = if (idx == currentIndex)
ContextCompat.getColor(textView.context, R.color.find_in_note_active)
else bgColor
spannable.setSpan(
BackgroundColorSpan(color),
range.first,
range.last + 1,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
}
textView.setText(spannable, BufferType.EDITABLE)
editableText.replace(0, editableText.length, spannable)
}
fun next() {
if (highlights.isEmpty()) return
currentIndex = (currentIndex + 1) % highlights.size
applyHighlights("")
jumpToCurrent()
}
private fun jumpToCurrent() {
val target = highlights[currentIndex]
// alinha o TextView de modo que o primeiro caractere
// do match apareça próximo do topo da viewport
val layout = textView.layout ?: return
val line = layout.getLineForOffset(target.first)
textView.scrollTo(0, layout.getLineTop(line))
}
}
Esse é um MVP funcional. Em produção o Google provavelmente usa Regex com tokenização por palavra para suportar acentos, normalização Unicode (NFD → NFC) e indexação offline via Room ou DataStore. A complexidade real está em três pontos:
- Performance: para notas grandes, aplicar
Spannableem cada keystroke derruba o frame rate. O Google provavelmente debounce ou usa umHandlercom delay de 80ms. - Acessibilidade: spans sobre
EditTextpodem quebrar TalkBack. Tem que testar com services deAccessibility. - Undo/Redo: sobrescrever o
Editabledestrói o histórico de undo. Precisa preservar a stack antes de aplicar os highlights.
Comparativo real: como cada app de notas trata busca interna hoje
Para quem está pensando em migrar ou só quer entender o estado da arte, fiz um comparativo direto entre as opções que uso no dia a dia:
| App | Find in note | Indexação fuzzy | Regex | Atalho |
|---|---|---|---|---|
| Google Keep | 2026 (Android) | Não | Não | Menu 3 pontos |
| Apple Notes | Desde 2015 | Sim | Não | Cmd/Ctrl+F |
| Obsidian | Sim (plugin) | Sim | Sim | Cmd/Ctrl+F |
| Notion | Sim | Sim | Não (tem fórmula) | Cmd/Ctrl+F |
| Standard Notes | Não nativo | Sim | Não | — |
| Evernote | Sim | Sim | Não | Cmd/Ctrl+F |
Obsidian é disparado a melhor opção para devs por causa do regex e dos plugins — eu uso há anos para notas técnicas. Mas o Keep ganha em velocidade de captura, compartilhamento com não-devs e na integração com Google Tasks. São trade-offs reais.
Erros Comuns (e o que devs erram ao implementar busca interna)
Trabalho há muito tempo com apps que têm busca interna e vejo os mesmos bugs aparecerem projeto após projeto:
- Recriar a string inteira a cada keystroke. Recriar um
SpannableStringBuilderem vez de reaproveitar custa caro. Sempre usesetSpanincremental. - Ignorar case diacritic-insensitive. “São” e “sao” precisam bater. Use
String.normalize()em Java/Kotlin ou NFD + remoção de combining marks. - Esquecer do IME. Usuários com teclado japonês, chinês ou árabe podem inserir texto por composição. Sua busca precisa rodar no commit, não no change.
- Não persistir a query. Se a pessoa pesquisou “deadline” e minimizou o app, ao voltar a busca some. Isso é UX ruim e é exatamente o tipo de coisa que diferencia Google de “mais um CRUD”.
- Highlight em cor com contraste insuficiente. Amarelo sobre branco funciona, mas em dark mode vira invisível. Use
ThemeAttributee teste em ambos os temas.
Implicações para devs que usam Keep como ferramenta de trabalho
Na minha rotina, Keep vira scratchpad de debug, captura de snippets de logs e lista de TODOs rápidos. Com busca interna, posso finalmente tratar o app como base de conhecimento de curto prazo sem medo de perder aquele snippet que anotei há seis meses.
Para times, abre uma possibilidade concreta: usar notas compartilhadas do Keep como documentação viva de incidentes, postmortems e decisões técnicas — algo que antes exigia Notion ou Confluence. A fricção da busca interna era a maior barreira.
FAQ — Perguntas que devs realmente fazem sobre o novo recurso
A busca funciona em notas com imagens e desenhos?
Não. O “Localizar na nota” do Keep indexa apenas texto. OCR de imagens com ML Kit Text Recognition seria possível, mas o Google não implementou nesse rollout.
Funciona offline?
Sim. O índice vive no app, não depende de chamada para servidor. Mas a feature em si depende de flag de servidor liberada pelo Google, então o recurso precisa estar habilitado antes de poder ser testado offline.
Vai chegar ao iOS?
Não há anúncio oficial até o momento. O Keep para iOS tem o mesmo problema — só busca pelo título da nota, não dentro. Espero ver a feature chegar em 2027 se seguirem o ritmo lento habitual.
Posso usar regex como no Obsidian?
Não. O Keep implementa busca literal apenas. Para regex, continue usando Obsidian ou um editor local como Vim/VS Code com seu vault sincronizado.
Como integrar busca do Keep em automações?
O Keep não tem API pública estável. Para automação real, exporte notas via Google Takeout periodicamente ou use ferramentas como gkeepapi (não oficial, requer cuidado com ToS). O caminho oficial é Google Workspace + Keep API em ambiente corporativo.
Veredito honesto de quem testa isso todo dia
O Google Keep, finalmente, em 2026, implementou busca dentro da nota. É uma feature de 2015 entregando em 2026. Funciona bem, é fluida, e para o usuário comum será um divisor de águas. Para devs, é mais um lembrete de como empresas grandes priorizam AI hype em vez de fundamentos de UX.
Mas se você está lendo isso, provavelmente já sabia dessa feature desde a primeira vez que precisou. A lição prática: se sua nota tem mais de 500 palavras e não tem busca interna, está na hora de migrar para algo melhor — independentemente do ecossistema.
Gostou? Me segue no GitHub e deixa um comentário se tiver dúvida ou quiser aprofundar algum ponto.