# 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)