Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.
12. Publicando
Lo que vas a aprender: cerrar el ciclo — empaquetar la app para cada plataforma. Prerrequisitos: Probando tu app.
Ejemplo completo (copiar, pegar y ejecutar)
El punto de entrada que el Main instancia por classname (reflexión, constructor sin args) — el mismo
core corre en los cuatro launchers. Esta MainWindow mínima y autocontenida es lo que cada objetivo empaqueta.
Compila tal cual.
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);
}
}
Los fragmentos siguientes muestran solo el núcleo (lo que va dentro de
onShow()). Para ejecutar, colócalos en el esqueletoMainWindowde arriba.
Un código, cuatro objetivos
El mismo core corre en todos los launchers:
| Objetivo | 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 → contenido estático |
Lo que garantiza el bootstrap
El Main instancia tu MainWindow por classname (reflexión, constructor sin args) — el mismo en
todos los objetivos. Los íconos y assets (las fuentes Roboto/Material se cargan en el bootstrap) acompañan al
paquete.
Checklist “listo para publicar”
- Probado (cap. 11) y responsivo (cap. 10).
- Recursos no disponibles por plataforma tratados (ver matriz).
- Permisos:
AndroidManifest.xml/Info.plist. - Firma (keystore Android / provisioning iOS).
- Íconos, launch screen, versión.
Fin del curso — ¿y ahora?
Construiste una app que abre, agrega, navega, persiste, se adapta y está probada — y la empaquetaste. Desde aquí:
- Profundizar en el “porqué”:
concepts/. - Calidad a escala:
best-practices/. - Publicación detallada:
platforms/. - Tareas puntuales:
cookbook/·ui/·data-and-services/.
Recapitulando
Un core, cuatro launchers Gradle; MainWindow por classname; checklist de release por plataforma.
Ver también
- Build y distribución · Fuente canónica: Capítulo 4 §4.2