- Dockerfile.android avec Android SDK et Capacitor - docker-compose.build.yml pour le build - Scripts automatisés build-apk.sh et generate-apk.sh - Configuration Capacitor pour Android - Documentation BUILD_APK.md
4.2 KiB
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 :
./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 :
./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
docker-compose -f docker-compose.build.yml run --rm android-builder /bin/bash
Commandes dans le conteneur
# 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 SDKdocker-compose.build.yml: Configuration Docker Compose pour le buildscripts/build-apk.sh: Script automatisé pour le build initialscripts/generate-apk.sh: Script automatisé pour générer l'APKcapacitor.config.ts: Configuration Capacitor
Volumes Docker
Les volumes suivants sont créés pour optimiser les builds suivants :
android-sdk-cache: Cache du SDK Androidgradle-cache: Cache Gradlenode-modules: Modules Node.js
Dépannage
Erreur : "SDK not found"
Vérifiez que les licences Android sont acceptées dans le conteneur :
docker-compose -f docker-compose.build.yml run --rm android-builder sdkmanager --licenses
Erreur : "Gradle build failed"
Vérifiez les logs dans le conteneur :
docker-compose -f docker-compose.build.yml run --rm android-builder /bin/bash
cd android
./gradlew assembleDebug --stacktrace
Nettoyer et recommencer
# 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 :
- Créer un keystore
- Configurer la signature dans
capacitor.config.ts - 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)