Em resumo

O que este artigo diz

Quando um aplicativo Android tem código aberto, um agente de IA pode fazer a engenharia a partir de um pedido simples: clonar, modificar, compilar o APK, instalar por USB, olhar a tela e iterar. O artigo mostra os prompts curtos reais por trás do tg-digest-android.

  • O fork de exemplo adiciona uma aba Digest que reúne as publicações não lidas de determinados canais do Telegram em um único feed cronológico.
  • O Claude compilou, instalou, abriu, verificou visualmente e fez iterações no aplicativo em um Redmi Note 8 Pro físico em um único dia.
  • A pessoa precisa obter seu próprio api_id e api_hash do Telegram, salvá-los no local.properties da raiz e ativar as opções do desenvolvedor e a depuração USB do Android.
  • Na data da publicação, as credenciais pessoais do Telegram do autor não apareciam nem na árvore pública nem em nenhum dos dois commits públicos; apenas o par de exemplo do upstream do Telegram permanecia no código importado.
  • A compilação fornecida é para arm64-v8a e se baseia no Telegram para Android 12.7.3 (6750).

O mais surpreendente não é um fork do Telegram ter ganhado uma aba Digest. É que colocá-la em um celular real não exigiu que eu escrevesse um plano de compilação Android. Descrevi o comportamento que faltava em linguagem comum, conectei o celular e depois escrevi apenas «Execute a versão mais recente no meu celular». Naquela mesma noite, eu já usava minha própria compilação.

Tg Digest no Android mostrando um feed cronológico; o item de navegação Perfil usa um círculo azul sólido no lugar do avatar.
As publicações não lidas aparecem em um único feed cronológico.
A tela Digest Channels do Tg Digest lista canais públicos de IA para selecionar como fonte do feed.
Escolha os canais que alimentam esse feed.
Código-fonte e funcionalidade pronta: github.com/howaihelps/tg-digest-android. Este é um fork público do Telegram para Android 12.7.3 (6750), não uma versão oficial do Telegram.
Você não precisa ser engenheiro Android. O agente cuidou do código, das dependências, da compilação, do ADB, da instalação, da inicialização e das verificações. À pessoa coube descrever o resultado, inserir credenciais privadas, confirmar no celular e olhar a tela.

Naquela manhã, a funcionalidade não existia

As assinaturas de canais costumam terminar em um de dois estados igualmente ruins: centenas de contadores vermelhos ou tudo marcado como lido enquanto publicações úteis desaparecem. Eu queria um terceiro modelo: escolher alguns canais e ler todas as publicações não lidas deles como uma única timeline comum.

A aba Digest que surgiu faz exatamente isso:

  • permite pesquisar canais e reúne suas publicações em ordem cronológica;
  • mantém um limite de última leitura separado para cada conta;
  • abre no primeiro item não lido e permite rolagem infinita para o passado;
  • exibe nomes dos canais, álbuns de mídia, datas e reações com a própria interface do Telegram;
  • marca mensagens visíveis como lidas pelo mesmo mecanismo de uma tela normal de canal.

Isto não é uma pequena demonstração nem um novo cliente desenhado do zero. O agente teve que atualizar a base para o código publicado mais recente do Telegram e entender seu banco de dados local, paginação, agrupamento de mídia e navegação. Mas eu não precisei ditar nomes de classes. Descrevi o que a pessoa deveria ver e sentir ao usar o aplicativo.

O trabalho era de engenharia. O prompt era linguagem comum

O pedido principal era mais ou menos este. A última frase foi importante: ela impediu o agente de construir uma segunda interface, visivelmente estranha, ao lado daquela que o Telegram já tinha.

O prompt que criou a funcionalidade
Adicione uma página separada com todas as mensagens não lidas dos canais do Telegram que eu selecionar.

Preciso de um seletor de canais. Mantenha para o Digest um marcador separado com o último item que eu realmente li. Quando a página abrir, posicione-a na primeira mensagem não lida. Adicione rolagem infinita para o passado e um botão inferior que retorne ao primeiro item não lido. Marque as publicações visíveis como lidas pelo estado de leitura padrão do Telegram.

Mostre os álbuns, o nome e o avatar do canal da mesma forma que o Telegram normalmente mostra. Reutilize a interface existente o máximo possível; crie uma interface própria apenas quando for inevitável.

Compile o aplicativo, instale-o no celular conectado e verifique o resultado no dispositivo.

Algumas horas depois, o aplicativo já funcionava em um Redmi Note 8 Pro. Então fiz mais dois pedidos curtos: eliminar os engasgos durante a rolagem e mover o botão redondo para cima da navegação inferior, removendo ao mesmo tempo um avatar indevido entre as mensagens. O Claude inspecionou o resultado no celular, encontrou as causas, recompilou o APK e verificou novamente. Parecia mais um trabalho com uma equipe de produto do que uma simples «geração de código».

O código está ficando mais barato; a intenção precisa ganha valor

Antes existia uma cadeia cara entre «eu preciso disto» e «eu uso isto»: encontrar um desenvolvedor Android, explicar a arquitetura, preparar o ambiente, esperar pelas compilações e aprender ADB. Isso nos treinou a tratar a interface de um aplicativo como definitiva. Aceitamos o que o fornecedor entrega e esperamos pela próxima versão.

Um agente de programação muda a economia dessa cadeia. Ele pode ler um repositório grande e desconhecido, combinar as versões de JDK, SDK e NDK, localizar o ponto certo de integração, compilar um APK, investigar uma falha de instalação, ler o logcat e repetir o ciclo. Nem todo resultado é bom, mas o custo de uma primeira versão funcional despencou.

A mudança: o código-fonte se parece menos com um produto finalizado e mais com matéria-prima. Seu valor não desapareceu; ele migrou para uma intenção clara, a escolha de uma fonte confiável, a verificação, a segurança e a capacidade de manter seu fork.

Isso não vale para tudo. Um aplicativo fechado sem código-fonte, uma funcionalidade do servidor, uma infraestrutura de pagamentos ou uma mudança em um protocolo criptográfico não aparecem com um único prompt. Mas, quando o comportamento desejado está dentro de um cliente Android aberto e pode ser verificado na tela, esperar pelo botão oficial já nem sempre é racional.

Como repetir: deixar para a pessoa apenas as ações indispensáveis

O processo abaixo foi feito para este fork. Você precisa de um computador, um agente de programação com acesso ao terminal, como Claude Code ou Codex, um celular Android, um cabo USB de dados e vários gigabytes de espaço livre. O repositório é grande e a primeira compilação para Android demora. Deixe o agente preparar o ambiente técnico; você acrescentará as credenciais privadas, alterará as configurações do celular e entrará no Telegram.

1 Deixe o agente preparar o projeto

Abra o agente em uma pasta vazia. O projeto original começou com um pedido igualmente curto: fazer um fork do cliente oficial para Android e executá-lo no celular conectado. Para o fork público pronto:

Prompt 1 — executar o fork
Clone https://github.com/howaihelps/tg-digest-android e execute a versão mais recente no meu celular Android conectado por USB.

Diga quando eu precisar inserir pessoalmente meu app id e app hash do Telegram ou confirmar algo no celular. Não exiba nem inclua essas credenciais em um commit.

2 Obtenha seu próprio API ID e hash do Telegram

Ação da pessoa

  1. Entre em um aplicativo oficial do Telegram, caso ainda não tenha uma conta.
  2. Abra my.telegram.org, entre com seu número de telefone e escolha API development tools.
  3. Preencha o formulário do aplicativo, escolha Android e salve o api_id e o api_hash fornecidos.

Isto não é um token de bot. O Telegram fornece um par por número de telefone e exige um ID pessoal para um cliente de terceiros. Consulte as instruções oficiais do Telegram.

Na raiz do repositório clonado, ao lado de settings.gradle, abra local.properties e substitua manualmente os marcadores. Não use aspas:

Arquivo local local.properties — nunca o inclua em um commit
sdk.dir=/Users/[SEU_NOME]/Library/Android/sdk
TELEGRAM_API_ID=[SEU_API_ID_NUMERICO]
TELEGRAM_API_HASH=[SEU_API_HASH_DE_32_CARACTERES]

O caminho sdk.dir é diferente no Windows e no Linux; o agente já deve tê-lo preenchido. Neste fork, TMessagesProj/build.gradle injeta os dois valores em BuildConfig, e BuildVars.java os lê durante a execução. local.properties está listado em .gitignore.

Na data da publicação, também comparei meus valores reais com todos os arquivos dos dois commits públicos: meus api_id e api_hash pessoais não aparecem nem na árvore atual nem no histórico do Git. O código importado do upstream contém o par de exemplo padrão e restrito do Telegram. Essas não são minhas credenciais, e você não deve depender delas para a sua compilação.

3 Prepare o celular

Ação da pessoa

  1. Abra Sobre o telefone e toque sete vezes em Número da versão. Em aparelhos Xiaomi, essa opção pode se chamar Versão da MIUI ou Versão do HyperOS.
  2. Volte para Configurações, abra Opções do desenvolvedor e ative a Depuração USB.
  3. Em aparelhos Xiaomi, ative também Instalar via USB; alguns modelos exigem Depuração USB (configurações de segurança).
  4. Conecte o celular desbloqueado com um cabo que transmita dados, não apenas energia.
  5. Aprove no celular a impressão digital RSA do computador; marcar «Sempre permitir» é prático.

Os nomes dos menus variam de acordo com o fabricante. A sequência básica está documentada no guia oficial do Android sobre opções do desenvolvedor. Mantenha a tela desbloqueada durante a primeira instalação: um agente não pode aprovar uma caixa de diálogo do sistema por você.

4 Peça ao agente para compilar e iniciar

Quando o local.properties estiver completo e o celular conectado, você não precisa citar ADB, tarefa do Gradle, ABI, CMake, caminho do APK nem activity do Android. Na sessão real com Claude, todo o meu pedido de inicialização foi uma frase:

O prompt real de inicialização
Execute a versão mais recente no meu celular.

Claude verificou o dispositivo, ajustou o toolchain do Android, compilou a variante correta, instalou-a, iniciou-a e depois analisou capturas de tela. Essas foram ações do agente, não conhecimento técnico escondido no meu prompt. O resultado foi um APK de depuração de cerca de 75 MB como org.telegram.messenger.beta em arm64-v8a. Continue inserindo você mesmo o código de login e a senha de dois fatores; não os forneça ao agente.

5 Peça sua funcionalidade na linguagem dos resultados

Depois que o aplicativo iniciar, você pode alterar este fork ou repetir o processo com outro aplicativo de código aberto. Não comece com «crie uma classe» ou «corrija o RecyclerView». Descreva a situação, o comportamento observável e os critérios de aceitação.

Modelo para uma funcionalidade pessoal
Altere o aplicativo para este fluxo pessoal.

Agora: [o que está faltando ou o que faço manualmente].
Quero: [o que devo ver e o que deve acontecer].
Mantenha: [as telas e os comportamentos existentes que não devem mudar].

Reutilize a interface do aplicativo o máximo possível. Faça funcionar, execute a versão mais recente no meu celular conectado e verifique o resultado por conta própria.

6 Depure a experiência, não apenas a compilação

A primeira compilação do Digest funcionava, mas o feed dava pequenas travadas enquanto carregava mais itens. O prompt seguinte não continha diagnóstico nem plano de teste, apenas o que eu via no celular:

Prompt de iteração
Está tudo ótimo, mas a tela dá umas pequenas travadas durante a rolagem. Você consegue verificar e corrigir por conta própria?

O agente encontrou uma atualização completa da lista durante a paginação e a substituiu por uma atualização incremental. Na nova medição, os quadros com engasgos caíram de 11,9% para 2,1%, enquanto o tempo de quadro no percentil 99 caiu de 40 para 22 ms. Descrevi outro defeito visual de forma ainda mais simples: «mova o botão para cima da navegação inferior e remova o artefato no centro, preservando o nome do canal». Isso também era linguagem comum, não uma especificação de UI. O compromisso final é um cabeçalho apenas com o nome: o avatar do autor que causava o artefato não é exibido. Esse ciclo — observar, nomear o defeito, deixar o agente reproduzi-lo e então verificar — é mais importante do que um primeiro prompt perfeito.

Antes de publicar, use um prompt de segurança separado

Um APK funcional não torna o repositório seguro. No pedido real de publicação, formulei o limite em linguagem comum; Claude o transformou em verificações dos arquivos rastreados e do histórico antes do push:

O pedido real de publicação, sem caminhos privados
Envie todas as alterações ao repositório público em um único bom commit em inglês.

Em hipótese alguma envie meu app id ou app hash. Eles devem permanecer em um arquivo local excluído do repositório. Verifique isso com cuidado antes do push.

O Telegram para Android é distribuído sob a GNU GPL v2 ou posterior, portanto o fork mantém a licença e o código-fonte disponíveis. Há também uma obrigação prática: manter seu fork, revisar o diff dele e não tratar o código gerado como automaticamente confiável. Um agente reduz radicalmente o custo de implementação; ele não elimina a responsabilidade de quem é dono da compilação.

Não é um aplicativo para todos — é um aplicativo exatamente para você

Um produto de massa precisa escolher funcionalidades que façam sentido para milhões de pessoas. Uma compilação pessoal pode ser estranha, específica e perfeita para uma única pessoa. É aqui que os agentes mais mudam o software: você não precisa fundar uma startup nem esperar anos pela votação de uma solicitação de funcionalidade. Às vezes, um repositório aberto, uma descrição precisa, um cabo USB e a disposição de inspecionar o resultado são suficientes.

O código não se tornou inútil. Ele se tornou muito menos escasso. E, por consequência, o direito de pegá-lo, alterá-lo e executá-lo no seu próprio dispositivo ganhou valor.

O caminho curto

  1. Escolha código-fonte aberto para Android e deixe um agente preparar o toolchain.
  2. Obtenha você mesmo as credenciais privadas e salve-as apenas em um arquivo local ignorado pelo Git.
  3. Ative as Opções do desenvolvedor e a Depuração USB, depois conecte um celular desbloqueado.
  4. Peça ao agente que compile, instale, inicie e verifique o APK.
  5. Descreva em linguagem comum o comportamento que você quer.
  6. Faça iterações em um dispositivo real e audite separadamente os segredos e a licença antes de qualquer push.

Perguntas frequentes

Uma pessoa que não é desenvolvedora realmente pode modificar um aplicativo Android com um agente de IA?

Sim, quando o código-fonte está disponível e a tarefa pode ser verificada em um dispositivo. Você ainda precisa descrever o comportamento desejado, aprovar ações sensíveis, fornecer credenciais privadas localmente e testar o resultado; o agente pode cuidar da maior parte do trabalho com o repositório, o toolchain, a compilação, a instalação e a depuração.

Onde entram o api_id e o api_hash do Telegram neste fork?

Crie local.properties na raiz do repositório e adicione TELEGRAM_API_ID e TELEGRAM_API_HASH sem aspas. O arquivo é ignorado pelo Git; o Gradle injeta os valores em BuildConfig durante a compilação.

O que preciso fazer no celular Android?

Ative as Opções do desenvolvedor tocando sete vezes em Número da versão, ative a Depuração USB, conecte um celular desbloqueado com um cabo de dados e aprove a impressão digital RSA do computador. Dispositivos Xiaomi também podem exigir Instalar via USB.