WMN DevKit — Android DevKit: gere apps Android a partir do sistema WMN. Ir para o site
WMN DevKit · Android

Android DevKit

Gere aplicativos Android a partir das páginas do sistema WMN. Instale o ambiente, crie um APK para testes, um AAB assinado para o Google Play e configure push notification com Firebase Cloud Messaging e backend PHP.

Visão geral

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

Os comandos usam executáveis já compilados, como GeradorAPK.exe e InstaladorAndroidDevKit.exe.
Estrutura

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
ArquivoFinalidade
GeradorAPK.exeCria o projeto Android e gera APK ou AAB.
InstaladorAndroidDevKit.exePrepara JDK, Android SDK, Gradle e dependências.
wmn.icoÍcone do aplicativo Android.
google-services.jsonConfiguração Firebase do app Android.
keystore.jksArquivo de assinatura do release.
Instalação

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.

Se o Gradle estiver usando um Java antigo, ajuste o JAVA_HOME para o JDK 17 e coloque %JAVA_HOME%\bin no início do PATH.
Gerador

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âmetros
ParâmetroDescriçãoExemplo
NomeNome visível do aplicativo.WMN Visualizador
PacoteIdentificador único do Android e do Firebase.br.com.wayssoft.visualizador
URLEndereço carregado ao abrir o app.https://app.wayssoft.com.br
--iconÍcone do aplicativo.wmn.ico
--firebaseAtiva suporte ao Firebase Cloud Messaging.google-services.json
--releaseGera bundle release para o Google Play.--release
Em celular físico, evite localhost. Prefira o IP da máquina ou um domínio de produção com HTTPS.
Push notification

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
Token FCM

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>
Servidor PHP

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\"}"
O arquivo firebase-service-account.json deve ficar somente no servidor. Nunca inclua essa chave dentro do APK ou do AAB.
Google Play

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

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

Checklist final

ItemStatus esperado
AmbienteJDK, SDK e Gradle instalados corretamente.
APK debugGerado e testado em aparelho real.
ÍconeExibido corretamente no Android.
FirebaseToken capturado e salvo no servidor.
PushNotificação recebida no aparelho.
AAB releaseGerado e pronto para o Google Play Console.
O conteúdo do app é construído sobre as bibliotecas wmn.php e WmnUI, e gerenciado pelo WMN CLI.