Publicar no Android
Play Store com build local ou Codemagic na nuvem.
Implementação
Pré-requisitos
- Conta Google Play Developer (USD $25, pagamento único)
- App criado no Google Play Console
- Keystore de assinatura configurado (próximo passo)
Confira o nome e o ID antes do primeiro envio. Depois que o app chega à loja (vale TestFlight e teste interno), o ID (com.seuapp.app) não muda mais. Se o projeto ainda está com nome provisório, troque agora: Nome do app.
1. Gerar e configurar o keystore
Precisa dele nos dois caminhos, build local ou Codemagic:
keytool -genkey -v -keystore ~/upload-keystore.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias uploadDepois de rodar, o terminal faz várias perguntas em sequência. Nenhuma delas é validada pela Google: pode responder qualquer coisa (ou deixar em branco, apertando Enter):
| Pergunta | O que responder |
|---|---|
| Senha da área de armazenamento de chaves | Essa você precisa lembrar, vai usar de novo no key.properties abaixo. Mínimo 6 caracteres. |
| Nome e sobrenome / unidade organizacional / empresa / cidade / estado | Qualquer coisa (seu nome, nome da empresa). Não afeta o app. |
| Código do país (2 letras) | Use um código real de 2 letras (ex: US, BR), mas mesmo errado não trava nada. |
| "Está correto?" | Digite sim (ou s) |
| Senha da chave para "upload" | Aperte Enter para reaproveitar a mesma senha da área de armazenamento, mais simples de lembrar. |
A senha que você digitar aqui não aparece na tela enquanto escreve (comportamento normal do terminal) e não tem como recuperar depois: se esquecer, precisa gerar um keystore novo (e perde a chave permanentemente se já tiver publicado com o antigo). Anote em um gerenciador de senhas assim que terminar.
Crie android/key.properties:
storePassword=SUA_SENHA
keyPassword=SUA_SENHA
keyAlias=upload
storeFile=/caminho/para/upload-keystore.jksNunca versione o key.properties nem o arquivo .jks. Adicione os dois ao .gitignore.
E configure em android/app/build.gradle:
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}Se for publicar pelo Codemagic, não precisa desse passo de gradle: você só sobe o mesmo arquivo .jks no painel (Code signing identities → Android keystores) e o Codemagic assina pra você.
Pelo MCP: o keytool -genkey (gerar o .jks) você roda uma vez, fora do MCP. Mas com o arquivo já em mãos, peça ao assistente "configura a assinatura do Android com esse keystore", ele roda kasy android configure (configure_android_signing) e escreve o key.properties pra você, sem precisar copiar senha manualmente. Veja MCP do Kasy.
2. Build release local (opcional, se não for usar Codemagic)
flutter build appbundle --release --dart-define=ENV=prodOu, com a CLI Kasy (e assinatura já configurada): kasy android release / kasy android build-aab.
Pelo MCP: "gera o AAB do Android" (build_aab ou release_android). Veja MCP do Kasy.
Gera o arquivo em build/app/outputs/bundle/release/app-release.aab. Suba este arquivo no Play Console.
Precisa de um APK em vez de AAB (sideload, lojas alternativas como Amazon/Samsung/F-Droid, ou só testar rápido no celular)? A Play Store só aceita AAB, mas o MCP também tem build_apk (debug, sem assinatura) e build_apk_signed (release, usa a mesma assinatura acima). Veja MCP do Kasy.
--dart-define=ENV=prod é obrigatório em release. Sem isso o app pode usar config de desenvolvimento.
3. Ou publicar com Codemagic (sem configurar localmente)
O Codemagic compila e envia para o Play Store na nuvem.
1. Adicionar CI ao projeto
Projeto criado com kasy new? O codemagic.yaml já vem por padrão (nos dois modos, Rápido e Passo a passo; nesse último, CI/CD já vem pré-marcado no multiselect). Só rode o comando abaixo se você desmarcou CI/CD na criação, ou se o projeto é anterior a essa opção existir.
kasy add ciPelo MCP: "adiciona CI/CD no projeto" (add_feature).
Cria o codemagic.yaml com o workflow android-workflow.
2. Configurar no painel Codemagic (uma vez)
- codemagic.io/apps → conecte o repositório
- Settings → Code signing identities → Android keystores: suba o arquivo
.jks→ preencha Keystore password, Key alias, Key password (os mesmos dokeytool -genkeyque você rodou) e Reference name =keystore_reference


- Suba o JSON da service account do Google Play como variável secreta
GOOGLE_PLAY_SERVICE_ACCOUNT_CREDENTIALS(grupogoogle_play)
3. Ajustar 1 campo no codemagic.yaml
Troque o e-mail em publishing.email.recipients pelo seu (ou apague a seção email: inteira, se não quiser notificação).
4. Configurar no terminal (uma vez)
kasy codemagic configurePelo MCP: esse passo também tem tool própria, peça "configura o Codemagic desse projeto" e o assistente roda configure_codemagic (liga o token e o app ID). Só a criação de conta no Codemagic e o upload do keystore no painel (passo 2 acima) seguem manuais. Veja MCP do Kasy.
5. Publicar
Pelo MCP: com o keystore e o Codemagic já configurados (passos acima), peça ao assistente "publica o Android com o Codemagic". Ele roda codemagic_release e consegue acompanhar o status com codemagic_status. Veja MCP do Kasy.
kasy codemagic release --android
kasy codemagic status <buildId> # acompanharO build vai para o track interno por padrão (configurável no codemagic.yaml).
O build sobe como rascunho (submit_as_draft: true no codemagic.yaml). Ainda falta um passo manual: Play Console → Testes internos → Revisar release → Iniciar lançamento, pra liberar de fato aos testadores.
Informações
Track recomendado
Publique primeiro no track interno para testar com a equipe, depois no fechado (beta), e só então em produção. A Play Store não requer aprovação manual para o track interno.

Versão no pubspec.yaml
Mantenha version: 1.0.0+1 no pubspec.yaml. O número após + é o build number, precisa ser incrementado a cada upload. O kasy codemagic release faz isso automaticamente.
Atualizado em 03/11/2026

