# DoncMobile App -- Guia de Release Android
**Versao:** v1.0 -- Mar 2026
**Plataforma:** Android
**Framework:** net10.0-android
**Versao atual:** 3.5.2 (build 29)
## 01 -- Versao semantica
A versao do app fica em dois campos no arquivo DoncMobile.App.csproj. O AndroidManifest.xml nao precisa ser editado -- o .NET MAUI injeta os valores automaticamente durante o build.
- **ApplicationDisplayVersion** -- Exemplo: 3.5.2. Versao legivel pelo usuario. Aparece na Play Store e nas configuracoes do app. Segue semantica MAJOR.MINOR.PATCH.
- **ApplicationVersion** -- Exemplo: 29. Numero inteiro interno do Android (versionCode). Deve ser incrementado em +1 a cada release. A Play Store rejeita se diminuir.
```xml
3.5.2
29
```
> **ALERTA:** Nao edite o AndroidManifest.xml para versao. O .NET MAUI gera o android:versionName e android:versionCode automaticamente a partir do .csproj.
## 02 -- Arquivos gerados
O comando de release gera dois arquivos principais em bin/Release/net10.0-android/:
- **com.br.doncmobile-Signed-3.5.2.apk** -- APK assinado. Este arquivo e enviado ao cliente para instalacao direta.
- **com.br.doncmobile-Signed-3.5.2.aab** -- Android App Bundle. Formato otimizado para publicacao na Google Play Store.
- **publish/com.br.doncmobile-Signed.apk** -- Copia do APK sem a versao no nome.
**Caminho completo do output:** src/DoncMobile.App/bin/Release/net10.0-android/com.br.doncmobile-Signed-{versao}.apk
## 03 -- Passo a passo
### Passo 1 -- Atualizar a versao no .csproj
Abra src/DoncMobile.App/DoncMobile.App.csproj e edite os dois campos de versao. Sempre incremente o ApplicationVersion em +1.
### Passo 2 -- Limpar a pasta de release anterior
Delete a pasta bin/ e obj/ para garantir que o build parta do zero.
```bash
# Opcao 1 -- via dotnet CLI (recomendado)
dotnet clean -c Release -f net10.0-android
# Opcao 2 -- remocao manual completa (build do zero garantido)
rm -rf bin/ obj/
```
> **ALERTA:** dotnet clean nao remove os .apk/.aab ja gerados.
### Passo 3 -- Executar o comando de release
```bash
dotnet publish -c Release -f net10.0-android
```
O que esse comando faz: Compila em configuracao Release, desabilita AOT (configurado no .csproj), gera o .aab e o .apk, assina automaticamente com o keystore do projeto.
### Passo 4 -- Localizar o APK e subir no Google Drive
O arquivo final estara em: `src/DoncMobile.App/bin/Release/net10.0-android/com.br.doncmobile-Signed-{versao}.apk`
Suba o .apk no Google Drive e copie o link de compartilhamento. Configure o Drive para "qualquer pessoa com o link pode visualizar".
### Passo 5 -- Atualizar o banco -- tabela ContratoSaas
```sql
BEGIN TRAN
UPDATE ContratoSaas
SET
LinkDownloadAtualizacaoApp = 'https://drive.google.com/file/d/{ID_DO_ARQUIVO}/view?usp=sharing',
AtualizacaoObrigatoria = 1, -- 1 = obrigatoria | 0 = opcional
MensagemAtualizacao = 'Nova versao disponivel (v3.5.3)',
CodigoVersaoApp = '3.5.3'
WHERE id IN (1004, 1073, 1042, 1049) -- IDs dos contratos que verao o banner
-- Confira os registros antes de confirmar:
SELECT id, CodigoVersaoApp, AtualizacaoObrigatoria,
MensagemAtualizacao, LinkDownloadAtualizacaoApp
FROM ContratoSaas
WHERE id IN (1004, 1073, 1042, 1049)
COMMIT -- ou ROLLBACK se algo estiver errado
```
| Campo | O que preencher |
|-------|----------------|
| LinkDownloadAtualizacaoApp | Link do Google Drive do APK gerado neste release |
| AtualizacaoObrigatoria | 1 = exibe banner que bloqueia o app ate atualizar, 0 = banner informativo |
| MensagemAtualizacao | Texto exibido no banner -- inclua a versao |
| CodigoVersaoApp | Versao semantica (ex: 3.5.3) -- deve bater com o ApplicationDisplayVersion |
| WHERE id IN (...) | IDs dos ContratoSaas que receberao o banner |
> **ALERTA:** Use BEGIN TRAN / COMMIT sempre. Execute o SELECT de conferencia antes do COMMIT.
## 04 -- Regras de versao
O ApplicationDisplayVersion segue o padrao semantico MAJOR.MINOR.PATCH.
| Campo | Quando incrementar | Exemplo | Resetar os outros? |
|-------|-------------------|---------|---------------------|
| MAJOR | Mudanca que quebra fluxo existente ou redesign completo | 2.x.x -> 3.0.0 | Sim -- MINOR e PATCH voltam a 0 |
| MINOR | Nova funcionalidade adicionada (nova tela, nova feature) | 3.4.x -> 3.5.0 | Sim -- PATCH volta a 0 |
| PATCH | Correcao de bug, ajuste visual, melhoria sem nova feature | 3.5.2 -> 3.5.3 | Nao |
| Campo | Regra obrigatoria |
|-------|-------------------|
| ApplicationDisplayVersion | Seguir MAJOR.MINOR.PATCH. Nunca diminuir. Sempre diferente da versao anterior. |
| ApplicationVersion | Sempre incrementar +1 a cada release, sem excecao. A Play Store rejeita versao igual ou menor. |
> **ALERTA:** Nunca reutilize um ApplicationVersion ja publicado. Se um APK com ApplicationVersion=29 ja foi instalado, publicar outro APK com o mesmo numero 29 impede a atualizacao naquele dispositivo.
## 05 -- Checklist de entrega
1. ApplicationDisplayVersion atualizado no .csproj
2. ApplicationVersion incrementado em +1
3. Pasta bin/ e obj/ limpas antes do build
4. Comando executado sem erros de compilacao
5. Nome do APK tem a versao correta
6. APK subido no Google Drive com link de compartilhamento copiado
7. Script SQL executado com BEGIN TRAN / SELECT / COMMIT
8. CodigoVersaoApp no banco bate com ApplicationDisplayVersion no .csproj