O que o gerador entrega
O GeradorAPK.exe cria um aplicativo Android nativo com WebView apontando para uma URL definida na geração. O mesmo executável produz um APK debug para testes ou um AAB release assinado para publicação.
APK debug
Para testes em aparelho físico, homologação e validação interna.
apk\wmn_visualizador-debug.apk
AAB release
Para publicação no Google Play Console.
aab\wmn_visualizador-release.aab
Arquivos esperados na pasta de trabalho
C:\wayssoft\projetos\wmn.w1\devkit\android_build │ ├── GeradorAPK.exe ├── InstaladorAndroidDevKit.exe ├── wmn.ico ├── google-services.json ├── keystore.jks │ ├── apk └── aab
| Arquivo | Finalidade |
|---|---|
| GeradorAPK.exe | Cria o projeto Android e gera APK ou AAB. |
| InstaladorAndroidDevKit.exe | Prepara JDK, Android SDK, Gradle e dependências. |
| wmn.ico | Ícone do aplicativo Android. |
| google-services.json | Configuração Firebase do app Android. |
| keystore.jks | Arquivo de assinatura do release. |
Instalando o ambiente Android
Execute o instalador do devkit
Abra o executável com privilégios de administrador.
InstaladorAndroidDevKit.exe
Verifique o Java e o Gradle
O ambiente precisa de JDK 17 ou superior.
java -version javac -version gradle -v
Confirme o SDK Android
Verifique se o SDK foi criado em C:\wayssoft\wmn\w1\devkit\android\Sdk.
Como gerar APK e AAB
Use o gerador informando o nome do app, o pacote Android e a URL inicial.
APK de teste
GeradorAPK.exe "WMN Visualizador" ^ "br.com.wayssoft.visualizador" ^ "https://app.wayssoft.com.br" ^ --icon wmn.ico
APK de teste com Firebase Push
GeradorAPK.exe "WMN Visualizador" ^ "br.com.wayssoft.visualizador" ^ "https://app.wayssoft.com.br" ^ --icon wmn.ico ^ --firebase google-services.json
AAB release para Google Play
GeradorAPK.exe "WMN Visualizador" ^ "br.com.wayssoft.visualizador" ^ "https://app.wayssoft.com.br" ^ --icon wmn.ico ^ --firebase google-services.json ^ --release ^ --keystore keystore.jks ^ --storepass SUA_SENHA ^ --keyalias wmn ^ --keypass SUA_SENHA
| Parâmetro | Descrição | Exemplo |
|---|---|---|
| Nome | Nome visível do aplicativo. | WMN Visualizador |
| Pacote | Identificador único do Android e do Firebase. | br.com.wayssoft.visualizador |
| URL | Endereço carregado ao abrir o app. | https://app.wayssoft.com.br |
| --icon | Ícone do aplicativo. | wmn.ico |
| --firebase | Ativa suporte ao Firebase Cloud Messaging. | google-services.json |
| --release | Gera bundle release para o Google Play. | --release |
Configurando o Firebase Cloud Messaging
Crie um projeto no Firebase
No Firebase Console, crie um projeto para o aplicativo.
Adicione o app Android
Use exatamente o mesmo pacote do gerador, ex.: br.com.wayssoft.visualizador.
Baixe o google-services.json
Coloque o arquivo na mesma pasta do GeradorAPK.exe.
Gere o app com Firebase ativo
GeradorAPK.exe "WMN Visualizador" ^ "br.com.wayssoft.visualizador" ^ "https://app.wayssoft.com.br" ^ --icon wmn.ico ^ --firebase google-services.json
Capturando o token na página
Inclua este JavaScript na página carregada dentro do WebView.
<script>
function salvarTokenFcmNoServidor(token) {
if (!token) return;
fetch("/api/salvar_token_fcm.php", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
token: token,
plataforma: "android",
app: "WMN Visualizador"
})
})
.then(response => response.json())
.then(data => console.log("Token FCM salvo:", data))
.catch(error => console.error("Erro ao salvar token:", error));
}
window.addEventListener("WMN_FCM_TOKEN", function(event) {
salvarTokenFcmNoServidor(event.detail.token);
});
document.addEventListener("DOMContentLoaded", function() {
setTimeout(function() {
if (window.WMNApp && typeof window.WMNApp.getFcmToken === "function") {
const token = window.WMNApp.getFcmToken();
if (token) salvarTokenFcmNoServidor(token);
}
}, 1500);
});
</script>Salvar token e disparar push
Tabela MySQL
CREATE TABLE fcm_tokens (
id INT AUTO_INCREMENT PRIMARY KEY,
token TEXT NOT NULL,
plataforma VARCHAR(30) DEFAULT 'android',
app VARCHAR(100),
usuario_id INT NULL,
data_cadastro DATETIME DEFAULT CURRENT_TIMESTAMP,
data_atualizacao DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
ativo CHAR(1) DEFAULT 'S'
);Salvar token no servidor
<?php
// api/salvar_token_fcm.php
header('Content-Type: application/json; charset=utf-8');
try {
$json = json_decode(file_get_contents('php://input'), true);
if (!$json) throw new Exception('JSON inválido.');
$token = trim($json['token'] ?? '');
$plataforma = trim($json['plataforma'] ?? 'android');
$app = trim($json['app'] ?? 'WMN Visualizador');
if ($token === '') throw new Exception('Token FCM não informado.');
$pdo = new PDO(
'mysql:host=localhost;dbname=wmn;charset=utf8mb4',
'usuario', 'senha',
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);
$stmt = $pdo->prepare("SELECT id FROM fcm_tokens WHERE token = :token LIMIT 1");
$stmt->execute([':token' => $token]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row) {
$pdo->prepare("UPDATE fcm_tokens SET plataforma=:p, app=:a, ativo='S',
data_atualizacao=NOW() WHERE id=:id")
->execute([':p'=>$plataforma, ':a'=>$app, ':id'=>$row['id']]);
echo json_encode(['success' => true, 'message' => 'Token atualizado.']);
} else {
$pdo->prepare("INSERT INTO fcm_tokens (token, plataforma, app, ativo,
data_cadastro, data_atualizacao)
VALUES (:t, :p, :a, 'S', NOW(), NOW())")
->execute([':t'=>$token, ':p'=>$plataforma, ':a'=>$app]);
echo json_encode(['success' => true, 'message' => 'Token cadastrado.']);
}
} catch (Exception $e) {
http_response_code(400);
echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}Exemplo de chamada para envio
curl -X POST https://seusite.com.br/api/enviar_push_fcm.php ^
-H "Content-Type: application/json" ^
-d "{\"token\":\"TOKEN_FCM_DO_CELULAR\",\"titulo\":\"WMN\",\"mensagem\":\"Teste de push\"}"Publicando na loja
Para publicar, gere o arquivo .aab assinado.
Checklist técnico
- Ícone definitivo configurado.
- Pacote Android final definido.
- Firebase validado, se usar push.
- URL de produção com HTTPS.
- AAB release gerado e assinado.
Checklist de produto
- App com login e funcionalidade real.
- Fluxos testados em tela pequena.
- Política de privacidade disponível.
- Notificações e navegação testadas.
Problemas comuns
Gradle usando Java antigo
where java java -version echo %JAVA_HOME% gradle -v
Licenças do SDK não aceitas
C:\wayssoft\wmn\w1\devkit\android\Sdk\cmdline-tools\latest\bin\sdkmanager.bat --sdk_root=C:\wayssoft\wmn\w1\devkit\android\Sdk --licenses
Token FCM não aparece
- Verifique se o pacote do app é igual ao cadastrado no Firebase.
- Confirme o uso de --firebase google-services.json.
- Reinstale o APK após mudanças no Firebase.
- Use adb logcat para depuração.
Checklist final
| Item | Status esperado |
|---|---|
| Ambiente | JDK, SDK e Gradle instalados corretamente. |
| APK debug | Gerado e testado em aparelho real. |
| Ícone | Exibido corretamente no Android. |
| Firebase | Token capturado e salvo no servidor. |
| Push | Notificação recebida no aparelho. |
| AAB release | Gerado e pronto para o Google Play Console. |