# Guide de build APK avec Docker

Ce guide explique comment générer un APK Android pour l'application Compagnon Admin en utilisant Docker.

## Prérequis

- Docker installé
- docker-compose installé
- Au moins 10 Go d'espace disque libre (pour le SDK Android)

## Étapes de build

### 1. Build initial (première fois)

Cette étape construit l'image Docker, installe Capacitor, et prépare le projet Android :

```bash
./scripts/build-apk.sh
```

Cette commande va :
- Construire l'image Docker avec Android SDK
- Installer les dépendances Capacitor
- Build l'application Next.js en production
- Initialiser Capacitor (si nécessaire)
- Ajouter la plateforme Android
- Synchroniser les fichiers

**Durée estimée :** 15-30 minutes (première fois, à cause du téléchargement du SDK Android)

### 2. Générer l'APK

Une fois le build initial terminé, générez l'APK :

```bash
./scripts/generate-apk.sh
```

L'APK sera généré dans `dist/compagnon-admin-debug.apk`

**Durée estimée :** 5-10 minutes

## Utilisation manuelle

Si vous préférez exécuter les commandes manuellement :

### Entrer dans le conteneur Docker

```bash
docker-compose -f docker-compose.build.yml run --rm android-builder /bin/bash
```

### Commandes dans le conteneur

```bash
# Installer Capacitor (si pas déjà fait)
npm install @capacitor/core @capacitor/cli @capacitor/android

# Build Next.js
npm run build

# Initialiser Capacitor (première fois seulement)
npx cap init 'Compagnon Admin' com.pensionmarama.admin --web-dir=.next

# Ajouter Android
npx cap add android

# Synchroniser
npx cap sync android

# Générer l'APK
cd android
./gradlew assembleDebug
```

L'APK sera dans : `android/app/build/outputs/apk/debug/app-debug.apk`

## Structure des fichiers

- `Dockerfile.android` : Image Docker avec Android SDK
- `docker-compose.build.yml` : Configuration Docker Compose pour le build
- `scripts/build-apk.sh` : Script automatisé pour le build initial
- `scripts/generate-apk.sh` : Script automatisé pour générer l'APK
- `capacitor.config.ts` : Configuration Capacitor

## Volumes Docker

Les volumes suivants sont créés pour optimiser les builds suivants :
- `android-sdk-cache` : Cache du SDK Android
- `gradle-cache` : Cache Gradle
- `node-modules` : Modules Node.js

## Dépannage

### Erreur : "SDK not found"

Vérifiez que les licences Android sont acceptées dans le conteneur :
```bash
docker-compose -f docker-compose.build.yml run --rm android-builder sdkmanager --licenses
```

### Erreur : "Gradle build failed"

Vérifiez les logs dans le conteneur :
```bash
docker-compose -f docker-compose.build.yml run --rm android-builder /bin/bash
cd android
./gradlew assembleDebug --stacktrace
```

### Nettoyer et recommencer

```bash
# Supprimer les volumes
docker-compose -f docker-compose.build.yml down -v

# Reconstruire l'image
docker-compose -f docker-compose.build.yml build --no-cache
```

## Distribution de l'APK

L'APK généré (`dist/compagnon-admin-debug.apk`) peut être distribué directement à vos bêta-testeurs.

**Note importante :** C'est un APK de debug. Pour une version de production, vous devrez :
1. Créer un keystore
2. Configurer la signature dans `capacitor.config.ts`
3. Générer un APK release avec `./gradlew assembleRelease`

## Limitations avec les API Routes

⚠️ **Attention :** Avec `output: 'export'` dans Next.js, les API routes (`/api/*`) ne fonctionneront pas car elles nécessitent un serveur Node.js. 

Pour que l'application admin fonctionne complètement dans l'APK, vous avez deux options :

### Option 1 : Héberger les API routes séparément

Déployez les API routes sur un serveur (Vercel, Railway, etc.) et modifiez les appels API dans l'application pour pointer vers cette URL.

### Option 2 : Utiliser un serveur embarqué (avancé)

Intégrer un serveur Node.js dans l'APK (plus complexe, nécessite des modifications supplémentaires).

### Option 3 : Version statique sans API routes

Créer une version simplifiée de l'admin qui utilise uniquement le localStorage (limité aux fonctionnalités de base).

## Support

En cas de problème, vérifiez :
- Les logs Docker : `docker-compose -f docker-compose.build.yml logs`
- L'espace disque disponible
- La version de Docker (minimum 20.10)

