Em resumo

O que este artigo diz

Quando um aplicativo Android tem código aberto, um agente de programação de IA pode cloná-lo, adicionar uma funcionalidade pessoal, compilar o APK, instalá-lo em um celular conectado por USB, inspecionar o resultado e fazer iterações. O artigo demonstra isso com o fork público tg-digest-android e fornece prompts prontos para usar, mantendo o api_id e o api_hash do Telegram em um arquivo local.properties ignorado pelo Git.

  • 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).

Eu queria abrir o Telegram e ver um único feed com as publicações não lidas apenas dos canais que eu tivesse escolhido. Esse botão não existia. Não abri uma solicitação para esperar e ver se ela entraria no roadmap de alguém. Abri o código-fonte do cliente oficial para Android, descrevi o comportamento para o Claude, conectei meu celular e, naquela mesma noite, 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.

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 prompt especificava o comportamento, não o código

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 e cole o prompt abaixo. Ele foi pensado para parar antes de tocar em segredos e para não remover um aplicativo instalado se o Android informar um conflito de assinatura.

Prompt 1 — clonar e preparar com segurança
Prepare https://github.com/howaihelps/tg-digest-android para uma compilação local.

Trabalhe de forma autônoma: clone o projeto, leia o README e inspecione o histórico do Git e a árvore de trabalho. Detecte meu sistema operacional e verifique Git, JDK 17, Android SDK / Build Tools 35, NDK 27.2.12479018, CMake e platform-tools. Prepare o que estiver faltando; se um download ou uma instalação precisar da minha permissão, solicite-a uma única vez e explique exatamente por quê.

Nunca exiba, transmita nem inclua em um commit TELEGRAM_API_ID ou TELEGRAM_API_HASH. Verifique se o local.properties da raiz é ignorado pelo Git. Se ele não existir, crie um modelo seguro contendo apenas o sdk.dir correto e marcadores para os dois valores; depois pare e peça que eu os preencha manualmente.

Ainda não compile nem faça push. Termine informando apenas o caminho do repositório, o estado do toolchain, o caminho de local.properties e minha próxima ação.

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, envie o próximo prompt. Esta é a instrução de inicialização. Os comandos esperados no README estão incluídos, mas você não precisa entendê-los nem executá-los por conta própria.

Prompt 2 — compilar, instalar e verificar
As credenciais em local.properties estão preenchidas e o celular Android desbloqueado está conectado por USB. Compile e execute o aplicativo nele.

Trabalhe até obter um resultado verificável. Não exiba TELEGRAM_API_ID nem TELEGRAM_API_HASH e, antes de qualquer ação do Git, verifique se local.properties não está sendo rastreado.

1. Execute adb devices -l. Se o status for unauthorized, peça que eu aprove a caixa de diálogo RSA e depois continue.
2. Verifique a ABI com adb shell getprop ro.product.cpu.abilist. Atualmente este fork compila apenas para arm64-v8a. Se o celular não for compatível com arm64-v8a, adapte a configuração de ABI com a menor mudança possível e explique-a.
3. Prepare PATH, JAVA_HOME, ANDROID_HOME e ANDROID_SDK_ROOT; concilie a versão instalada do CMake com a esperada pelo Gradle.
4. Execute ./gradlew :TMessagesProj_App:assembleAfatDebug. Corrija os erros de ambiente ou compilação em vez de parar no primeiro.
5. APK esperado: TMessagesProj_App/build/outputs/apk/afat/debug/app.apk. Instale-o com adb install -r.
6. Se a instalação estiver bloqueada, peça que eu ative Instalar via USB. Se o Android informar um conflito de assinatura, NÃO desinstale o aplicativo anterior sem minha aprovação explícita: a desinstalação apaga os dados locais dele.
7. Inicie o pacote org.telegram.messenger.beta e verifique se a primeira tela abre e se a aba Digest está presente. Use adb, logcat e capturas de tela para o diagnóstico.

Termine informando o caminho e o tamanho do APK, a ABI do dispositivo, o resultado da instalação, o pacote/atividade iniciados e o que eu devo verificar visualmente. Não faça push.

A configuração atual foi verificada em arm64-v8a: um APK de depuração de cerca de 75 MB foi compilado, instalado e iniciado como org.telegram.messenger.beta. Na primeira inicialização, você ainda precisa entrar no Telegram por conta própria e inserir o código de login e a senha de dois fatores, caso ela esteja ativada. Não forneça esses dados 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 que está sendo executado no meu celular para este fluxo de trabalho pessoal.

Problema: [o que atualmente faço de forma manual ou o que está faltando].
Comportamento desejado: [o que devo ver e o que deve acontecer depois de cada ação].
Dados e estado: [o que armazenar, quando atualizar e o que deve sobreviver a uma reinicialização].
Limites: [o que não deve mudar; quais telas e comportamentos nativos devem ser mantidos].
Está pronto quando:
- [critério verificável 1];
- [critério verificável 2];
- [critério verificável 3].

Primeiro encontre os componentes e fluxos de dados existentes no código-fonte. Reutilize a interface e a arquitetura do próprio aplicativo o máximo possível. Depois implemente a menor versão completa, compile-a, instale-a no celular conectado e verifique por conta própria todos os critérios. Mostre o resultado em uma captura de tela e liste as concessões. Não faça push sem uma instrução separada.

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 um diagnóstico — apenas uma observação e a exigência de um resultado medido:

Prompt de iteração
No celular físico, o feed dá engasgos quando a paginação acontece durante a rolagem. Reproduza o problema por conta própria, meça os quadros com engasgos / o tempo de quadro, encontre a causa, corrija-a sem mudar o comportamento do feed, reinstale o APK e repita a mesma medição. Não considere a tarefa concluída apenas porque o código compila.

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». 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. Antes de fazer push, peça ao agente que procure segredos nos arquivos rastreados e em todo o histórico publicado, mostre o diff em relação ao upstream, preserve a licença e não apresente um APK de depuração como cliente oficial.

Prompt antes do commit e do push
Prepare as alterações para publicação, mas primeiro faça uma auditoria de segurança e licença.

Inspecione git status, git diff, todos os arquivos rastreados e todo o histórico que será publicado em busca dos meus TELEGRAM_API_ID e TELEGRAM_API_HASH reais, tokens, senhas, chaves de assinatura e caminhos absolutos privados. Não exiba o valor de nenhum segredo encontrado; informe apenas seu tipo, arquivo e uma correção segura. Verifique se local.properties é ignorado e nunca foi rastreado.

Compare as alterações com o upstream e preserve os cabeçalhos de copyright e as obrigações da licença. Declare no README que esta é uma compilação pessoal não oficial, quais versões e ABIs foram testadas, onde as credenciais devem ser inseridas localmente e como compilar o APK.

Mostre a lista final de arquivos e o resultado da auditoria. Faça commit e push apenas depois da minha aprovação explícita.

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 as funcionalidades pelo comportamento e pelos critérios de aceitação.
  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.