Alternativa PWABuilder [GRÁTIS]
- Publicado em: Aplicativos
- 293 visualizações
Todo desenvolvedor Web que já tentou colocar um Progressive Web App (PWA) na Google Play Store conhece o PWABuilder. É a ferramenta padrão da indústria, uma interface web da Microsoft que faz todo o trabalho pesado de “empacotar” seu site em um arquivo APK ou AAB nativo do Android. É rápido, é visual e funciona… até o dia em que não funciona. Foi então que precisei de uma alternativa PWABuilder…

Este artigo é a história de como um dia de frustração, causado por uma queda de serviço, me levou a desenvolver uma solução própria, saindo da minha zona de conforto do terminal para criar uma interface web funcional, com a ajuda indispensável da Inteligência Artificial.
O dia em que o PWABuilder parou
Eu estava no meio de um processo de deploy importante. Tinha acabado de refinar um PWA e precisava gerar o APK final para testes em dispositivos reais antes da publicação. Acessei o pwabuilder.com, preparei a URL do manifesto e… nada. O site estava fora do ar. Reiniciei o navegador, tentei outra rede, verifiquei o Discord. Sim, o PWABuilder estava enfrentando uma instabilidade global.
Para um desenvolvedor com prazos, “fora do ar” é uma frase aterrorizante. Eu não podia esperar a equipe da Microsoft corrigir o problema. Eu precisava de uma alternativa, e precisava agora.
A descoberta no Discord
Minha primeira parada foi o servidor de Discord da comunidade de desenvolvedores PWA. Alguns usuários relataram o mesmo problema. Eu não era o único travado.
Enquanto muitos lamentavam, alguns desenvolvedores mais experientes davam a dica dourada: “O PWABuilder é ótimo, mas por baixo dos panos ele usa o Bubblewrap. Se o site caiu, use o Bubblewrap via CLI”.
Eu já tinha ouvido falar do Bubblewrap, uma ferramenta de linha de comando (CLI) do Google que gera Trusted Web Activities (TWA) para Android. Mas havia um problema: eu nunca tinha usado. O PWABuilder sempre foi tão fácil que eu nunca precisei me aprofundar na “magia” que acontecia no terminal.
Fui atrás da documentação. Instalação via NPM, configuração do Android SDK, Java HOME, variáveis de ambiente complexas, comandos longos como:
bubblewrap init --manifest="https://meupwa.com/manifest.json" bubblewrap build
Não era impossível, mas para alguém que precisava de agilidade, configurar todo esse ambiente “na mão” parecia um retrocesso produtivo. Além disso, eu sabia que se eu quisesse que outras pessoas da minha equipe (ou outros desenvolvedores na mesma situação) pudessem usar, o terminal seria uma barreira de entradia muito alta.
A ideia: uma interface web para o Bubblewrap
Foi ali, no meio do caos, que a ideia surgiu. Uma alternativa PWABuilder que gerasse rapidamente meu aplicativo, afinal o PWABuilder é uma GUI (Interface Gráfica de Usuário) para o Bubblewrap. Se a GUI deles estava fora do ar, por que eu não poderia criar a minha própria?
Minha meta era clara: Criar uma aplicação web simples onde eu pudesse colar a URL do manifesto do meu PWA e, instantaneamente, receber o link para download do APK gerado pelo Bubblewrap. Sem configurações de SDK no meu computador, sem decorar comandos complexos.
O desenvolvimento assistido por IA: Jules e Gemini
Eu sou um desenvolvedor apaixonado, mas criar uma solução de backend que execute comandos de sistema (processos Node.js rodando comandos CLI), gerencie arquivos APK temporários e sirva uma frontend limpa, tudo isso em poucas horas, parecia ambicioso demais. Foi quando decidi recrutar minha equipe de IAs.

1. Estruturando o Backend com o Jules
Comecei conversando com o Jules (minha IA focada em estrutura de código e Node.js). Expliquei o problema: “Jules, preciso de um servidor Express que receba uma URL de manifesto, crie uma pasta temporária, rode o comando bubblewrap init e bubblewrap build dentro dela, e depois me dê o caminho do APK gerado.”
O Jules foi instrumental na estruturação do fluxo de backend. Ele me ajudou a entender como usar o módulo child_process do Node.js para executar os comandos do Bubblewrap de forma assíncrona, garantindo que o servidor não travasse enquanto o APK era compilado. Ele também sugeriu uma lógica para limpar as pastas temporárias após o download, para não lotar o disco do servidor.
JavaScript
// Exemplo de lógica estruturada com ajuda do Jules
const { exec } = require('child_process');
app.post('/generate-apk', (req, res) => {
const { manifestUrl } = req.body;
// ... Lógica de sanitização e pastas temporárias ...
exec(`bubblewrap init --manifest="${manifestUrl}" --yes`, (error, stdout, stderr) => {
if (error) {
return res.status(500).send('Erro no init');
}
exec(`bubblewrap build`, (buildError, buildStdout, buildStderr) => {
if (buildError) {
return res.status(500).send('Erro no build');
}
// ... Lógica para servir o arquivo APK gerado ...
});
});
});
2. Refinando e documentando com o Gemini
Com o esqueleto do backend rodando, precisei do Gemini para lidar com os detalhes técnicos e a documentação. O Gemini me ajudou a refinar o tratamento de erros (o que acontece se a URL do manifesto for inválida?) e a criar um frontend extremamente simples e intuitiva.
O Gemini também foi fundamental para criar o README.md do projeto, explicando exatamente como rodar a solução localmente, incluindo a parte chata que eu queria evitar: a configuração do Android SDK e Java no ambiente onde o servidor rodaria.
Foi do Gemini a sugestão de adicionar a seção de configuração de ambiente genérica para usuários Windows, usando %USERPROFILE%, garantindo que o guia funcionasse para qualquer pessoa que clonasse o repositório.
O resultado: PWA-to-APK Generator no GitHub
Em algumas horas de trabalho intenso, assistido pelas IAs, eu saí de um desenvolvedor bloqueado para o criador de uma ferramenta funcional.
A solução consiste em:
- Backend: Node.js + Express + Bubblewrap CLI.
- Frontend: Uma página simples com um campo de input e um botão.
Não é tão robusto quanto o PWABuilder original, não tem todas as opções de customização, mas ele resolve o problema principal: gera um APK assinado e pronto para teste a partir de uma URL.
Eu não podia guardar isso só para mim. Sabendo que outros desenvolvedores no Discord ainda estavam travados, disponibilizei todo o código no GitHub.

Conclusão
Aquele dia poderia ter sido um dia perdido. Em vez disso, a queda do PWABuilder me forçou a entender o que acontece por baixo dos panos e me motivou a criar uma ferramenta que preenche uma lacuna quando o serviço principal falha.
A jornada do terminal para a web me ensinou que, com as ferramentas certas (Bubblewrap) e o apoio estratégico da IA (Jules e Gemini), nós, desenvolvedores, temos o poder de criar nossas próprias soluções para os problemas que a Web nos apresenta. Se o PWABuilder cair de novo, eu não estarei mais preocupado. Eu tenho o meu.