📚 Módulo 10: Mobile - Setup do Capacitor no Vue 3, Android Studio e Build Nativa
Neste módulo, daremos o primeiro passo para a expansão móvel da nossa TecLoja 02. Utilizaremos o Capacitor para empacotar a nossa SPA (Single Page Application) desenvolvida em Vue 3 + Vite e transformá-la em um aplicativo nativo Android totalmente funcional, sem reescrever o código de apresentação.
Configuraremos o ambiente móvel local, integraremos a CLI do Capacitor à nossa esteira de build do Vite e geraremos uma versão executável no emulador do Android Studio.
🗺️ 1. Arquitetura Híbrida com Capacitor
Abaixo, revisamos visualmente como o Capacitor faz a ponte entre o motor web da nossa SPA e a camada nativa do sistema operacional Android:
flowchart TD
%% Styling
classDef vue fill:#41B883,stroke:#35495E,stroke-width:2px,color:#fff;
classDef cap fill:#1197F6,stroke:#0B5899,stroke-width:2px,color:#fff;
classDef native fill:#3DDC84,stroke:#073042,stroke-width:2px,color:#fff;
classDef backend fill:#009688,stroke:#00796B,stroke-width:2px,color:#fff;
subgraph Vue_App ["📱 Camada Frontend (Web View)"]
A[Vue 3 SPA - Vite Build]:::vue --> B[Capacitor Bridge]:::cap
end
subgraph Native_OS ["🤖 Camada Nativa (Android)"]
B <-->|JavaScript Plugins Bridge| C[Capacitor Android Core]:::cap
C <--> D[Atividades & Recursos OS]:::native
end
subgraph Server_API ["⚙️ Camada API Backend"]
A <-->|HTTP / JWT Bearer| E[API FastAPI no Render]:::backend
end
⚙️ 2. Instalação e Inicialização do Capacitor
Para iniciar a ponte móvel híbrida, acesse a pasta raiz do seu repositório frontend (tecloja-frontend) e instale o core do Capacitor e o suporte nativo ao ecossistema Android:
# 1. Instalar as dependências do Capacitor como dependências de desenvolvimento
npm install @capacitor/core
npm install -D @capacitor/cli @capacitor/android
Após instalar os pacotes, inicialize as configurações globais do Capacitor. O comando solicitará o nome do aplicativo e o ID de pacote exclusivo (Package ID / Application ID):
npx cap init
Durante o prompt de inicialização, responda de forma coerente com a nomenclatura e domínio de sua aplicação:
- App name:
TecLoja 02 - App Package ID:
com.tecloja.tecloja02 - Web asset directory:
dist(Esse passo é crucial: aponta para a pasta onde o Vite compila o build de produção).
Após finalizar, um arquivo capacitor.config.json ou capacitor.config.ts será gerado automaticamente na raiz. Vamos configurá-lo para apontar corretamente para os assets compilados:
Configurando o capacitor.config.ts
import type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
appId: 'com.tecloja.tecloja02',
appName: 'TecLoja 02',
webDir: 'dist',
server: {
androidScheme: 'https'
}
};
export default config;
🏗️ 3. Sincronização e Geração do Projeto Android
Antes de sincronizar a aplicação com o framework nativo, precisamos gerar a pasta dist compilada para produção através do bundler Vite. A cada nova alteração de interface Web, você deverá reexecutar estes dois passos:
# 1. Compilar os assets estáticos do Vue 3 para produção
npm run build
# 2. Adicionar a plataforma Android ao Capacitor (apenas na primeira execução)
npx cap add android
Este comando criará um subdiretório nativo /android/ no seu projeto. Esse diretório é um projeto Android real baseado em Gradle que pode ser aberto e compilado diretamente no Android Studio.
Para transferir o código compilado da pasta /dist/ para a pasta de assets nativos do Android de forma contínua, rode:
npx cap sync
📱 4. Configurando e Executando no Android Studio
- Baixe e instale o Android Studio.
- Abra o projeto do Capacitor executando a CLI no terminal do frontend:
npx cap open android - O Android Studio abrirá importando o projeto
/androidautomaticamente. Aguarde até que o Gradle sincronize os índices do projeto. - No menu superior, vá em Tools -> Device Manager e configure um dispositivo emulado (AVD), escolhendo uma versão recente do Android (API 33+ recomendada).
- Clique no botão Run (Play) no topo do Android Studio. O projeto compilará o APK local e abrirá a nossa aplicação Vue 3 simulada diretamente na tela do dispositivo emulado.
✅ Pré-Requisitos deste Módulo
Antes de iniciar este módulo, verifique se:
- Sua SPA desenvolvida em Vue 3 no Módulo 08 está compilando sem erros no console local (
npm run builddeve rodar perfeitamente). - Você instalou o Java Development Kit (JDK) 17 e configurou a variável de ambiente
JAVA_HOME. - O Android Studio está com o Android SDK devidamente configurado e o emulador de celular configurado com acesso de rede.
🤔 Por que fizemos assim?
- Por que usar Capacitor em vez de reescrever tudo em React Native ou Flutter? Para equipes pequenas ou projetos escolares rápidos, reescrever um catálogo completo e checkout e-commerce que já funcionam de forma responsiva em HTML/CSS na web exigiria o dobro do tempo de desenvolvimento. O Capacitor atua como uma WebView de alta performance acoplada a plugins nativos do sistema. Isso nos dá reaproveitamento de 100% da lógica e do design do Vue 3 com custos mínimos de manutenção.
- Por que o Package ID
com.tecloja.tecloja02é importante? Esse identificador reversa de domínio é o RG único do aplicativo no sistema do Android e na loja Google Play Store. Caso você precise usar serviços do Firebase (como login e notificações) ou submeter o app à loja, o sistema identificará sua aplicação exclusivamente por este ID. - Por que configurar
server.androidScheme: 'https'? Por padrão, arquivos WebView locais rodam sob o protocolo insegurohttp://. A partir do Android 9, requisições de rede clara (HTTP) sem HTTPS são bloqueadas. Mapear o esquema nativo interno para HTTPS garante a coerência de segurança do tráfego do app, resolvendo problemas de segurança local (Cleartext HTTP traffic blocked).
🔍 Checkpoint
- Geração do build local: Certifique-se de que a execução do
npm run buildgera a pasta/dist/sem dependências globais órfãs. - Sincronização correta: Valide se o comando
npx cap syncexibe a mensagem de sucesso para a plataforma Android. - App no Emulador: Com o emulador Android de teste ativo, confirme se a página de login da TecLoja 02 renderiza e se você consegue fazer requisições à API remota (configurada em produção no Render).
⚠️ Erros Comuns
| Erro | Causa | Solução |
|---|---|---|
ERR_CLEARTEXT_NOT_PERMITTED ao bater na API local |
O app no emulador Android está tentando se conectar a uma URL http://localhost:8000 ou http://127.0.0.1:8000. |
O emulador não reconhece localhost como a sua máquina. Mude a URL da API para http://10.0.2.2:8000 (IP especial de loopback do emulador do Android) ou aponte para a URL de produção na Render com HTTPS. |
| O emulador abre uma tela em branco no carregamento inicial | O caminho físico para os arquivos compilados no capacitor.config.ts está incorreto ou a pasta dist ainda não foi criada. |
Rode npm run build no console de desenvolvimento antes de disparar o comando npx cap sync. |
Falha ao abrir no Android Studio: SDK location not found |
A variável local informando o caminho do Android SDK não está configurada no projeto nativo. | Crie um arquivo chamado local.properties dentro da subpasta /android/ e adicione o caminho do seu SDK (ex: sdk.dir=C\:\\Users\\SeuUsuario\\AppData\\Local\\Android\\Sdk). |