Pular para o conteúdo
CrossFly é 100% open sourceSiga no GitHub
CrossFlyCrossFly
Começar

12. Publicando

O que você vai aprender: fechar o ciclo — empacotar o app para cada plataforma. Pré-requisitos: Testando seu app.

Exemplo completo (copiar, colar e rodar)

O ponto de entrada que o Main instancia por classname (reflexão, construtor sem-args) — o mesmo core roda nos quatro launchers. Esta MainWindow mínima e autocontida é o que cada alvo empacota. Compila como está.

package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;

public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      add(LAY_AUTO, new Label("Meu app CrossFly"));

      Button ola = new Button("Olá, mundo!");
      ola.onAction(c -> Hint.show("Rodando em todas as plataformas", 2000));
      add(LAY_AUTO, ola);
   }
}

Os trechos abaixo mostram só o miolo (o que vai dentro de onShow()). Para rodar, coloque-os no esqueleto MainWindow acima.

Um código, quatro alvos

O mesmo core roda em todos os launchers:

Alvo Build
🖥️ Desktop gradlew :lwjgl3:run (dev) / jar / instalador
🤖 Android gradlew :android:installDebug / assembleRelease (AAB)
🍎 iOS gradlew :ios:launchIPhoneSimulator / .ipa (macOS+Xcode)
🌐 Web gradlew :web:webBundle → conteúdo estático

O que garante o bootstrap

O Main instancia sua MainWindow por classname (reflexão, construtor sem-args) — o mesmo em todos os alvos. Ícones e assets (fontes Roboto/Material são carregadas no bootstrap) acompanham o pacote.

Checklist “pronto para publicar”

  • Testado (cap. 11) e responsivo (cap. 10).
  • Recursos indisponíveis por plataforma tratados (ver matriz).
  • Permissões: AndroidManifest.xml / Info.plist.
  • Assinatura (keystore Android / provisioning iOS).
  • Ícones, launch screen, versão.

Fim do curso — e agora?

Você construiu um app que abre, adiciona, navega, persiste, se adapta e é testado — e o empacotou. Daqui:

Recapitulando

Um core, quatro launchers Gradle; MainWindow por classname; checklist de release por plataforma.

Veja também

Esta página foi útil?