KasyKasy

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 upload

Depois 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):

PerguntaO que responder
Senha da área de armazenamento de chavesEssa você precisa lembrar, vai usar de novo no key.properties abaixo. Mínimo 6 caracteres.
Nome e sobrenome / unidade organizacional / empresa / cidade / estadoQualquer 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.jks

Nunca 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=prod

Ou, 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 ci

Pelo MCP: "adiciona CI/CD no projeto" (add_feature).

Cria o codemagic.yaml com o workflow android-workflow.

2. Configurar no painel Codemagic (uma vez)

  1. codemagic.io/apps → conecte o repositório
  2. Settings → Code signing identities → Android keystores: suba o arquivo .jks → preencha Keystore password, Key alias, Key password (os mesmos do keytool -genkey que você rodou) e Reference name = keystore_reference
Formulário de upload do keystore Android no Codemagic, campos vazios
Codemagic: Code signing identities → Android keystores: os 4 campos pedidos após subir o .jks
Keystore Android adicionado com sucesso no Codemagic
Codemagic: keystore_reference disponível em Available keystores
  1. Suba o JSON da service account do Google Play como variável secreta GOOGLE_PLAY_SERVICE_ACCOUNT_CREDENTIALS (grupo google_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 configure

Pelo 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>   # acompanhar

O 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.

Track de testes internos no Google Play Console
Play Console: Testes → Testes internos com a release publicada

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