# Android

> Del installDebug al AAB — launcher, inicio retrasado por permisos, manifiesto, status bar y Atrás.

Source: https://crossfly.dev/es/docs/platforms/android — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# Android 🤖

## Ejecutar
```bash
gradlew :android:installDebug
```
El `AndroidLauncher` (un `AndroidApplication`) crea el `Main` vía `getMain(canStart)` →
`new Main(canStart, getCommandline())`.

## ⚠️ Inicio retrasado por permisos
En Android, normalmente **no** levantas la UI de inmediato — pides los permisos primero. El patrón:
```java
// en el launcher: canStart = false → la UI NO sube todavía
initializeForView(getMain(false), config);
// … tras el usuario conceder los permisos (callback) …
main.startApp(true);   // ahora sí, sube la UI (delayed = true)
```
Así, cámara/GPS/Bluetooth ya están autorizados cuando aparece la primera pantalla (ver
Cap. 4 §4.2).

## Manifiesto y permisos
Declara en el `AndroidManifest.xml` los permisos de los recursos que usas (cámara, ubicación, Bluetooth) —
y pídelos en runtime antes del `startApp(true)`.

## Status bar y densidad
- La **status bar** se considera en el layout (`DeviceConfig.statusbarHeight`).
- **Densidad**: `Screen.scale` refleja el DPI; como usas `Relative`/fracciones, la UI ya se adapta.

## Botón Atrás
El botón físico **Atrás** lo captura la app (por defecto hace `hide()` de la ventana superior — ver
[La pila de ventanas](/docs/ui/navigation/the-window-stack)).

## Empaquetado
Las libs nativas `.so` (incl. `crossfly-lib`) se empaquetan por ABI. Firma/AAB y subida a la Play
Store: [Build y distribución](/docs/platforms/building-and-releasing).

## Buenas prácticas
- **Pide los permisos antes** de `startApp(true)` (inicio retrasado) — evita pantallas rotas.
- Prueba en densidades/pantallas variadas; confía en `Relative` para adaptar.

## Errores comunes
- Levantar la UI (`canStart=true`) y solo entonces pedir el permiso (recurso no disponible en la 1ª pantalla).
- Olvidar el permiso en el `AndroidManifest.xml` (la solicitud en runtime falla silenciosamente).

## Ver también
- [Build y distribución](/docs/platforms/building-and-releasing)
