#!/bin/bash set -e echo "🚀 Build APK - Compagnon du Lagon" echo "==================================" echo "" # Couleurs pour les messages GREEN='\033[0;32m' BLUE='\033[0;34m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # VĂ©rifier qu'on est dans le bon rĂ©pertoire if [ ! -f "package.json" ]; then echo "❌ Erreur: ExĂ©cutez ce script depuis la racine du projet" exit 1 fi # Étape 1: CrĂ©er la configuration Next.js pour l'export statique echo -e "${BLUE}📩 Étape 1/6: Configuration Next.js pour export statique${NC}" cat > next.config.export.js << 'EOF' /** @type {import('next').NextConfig} */ const nextConfig = { reactStrictMode: true, swcMinify: true, output: "export", compress: true, poweredByHeader: false, images: { unoptimized: true, }, }; module.exports = nextConfig; EOF # Copier la config pour le build cp next.config.export.js next.config.js echo -e "${GREEN}✅ Configuration créée${NC}" echo "" # Étape 2: Installer les dĂ©pendances si nĂ©cessaire echo -e "${BLUE}📩 Étape 2/6: VĂ©rification des dĂ©pendances${NC}" # VĂ©rifier SDKMAN if [ ! -f "$HOME/.sdkman/bin/sdkman-init.sh" ]; then echo "SDKMAN non trouvĂ©. Installation..." curl -s "https://get.sdkman.io" | bash fi # Initialiser SDKMAN source "$HOME/.sdkman/bin/sdkman-init.sh" # VĂ©rifier Java 21 if ! sdk current java 2>&1 | grep -q "21.0"; then echo "Installation de Java 21 (requis par Capacitor)..." sdk install java 21.0.1-tem sdk use java 21.0.1-tem fi # VĂ©rifier Android SDK if [ ! -d "$HOME/Android/Sdk" ]; then echo "Installation d'Android SDK..." mkdir -p "$HOME/Android/Sdk/cmdline-tools" cd "$HOME/Android/Sdk/cmdline-tools" wget -q https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip unzip -q commandlinetools-linux-9477386_latest.zip mv cmdline-tools latest rm commandlinetools-linux-9477386_latest.zip cd - export ANDROID_HOME="$HOME/Android/Sdk" export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$PATH" yes | sdkmanager --licenses || true sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0" fi if [ ! -d "node_modules" ]; then echo "Installation des dĂ©pendances Node.js..." npm install --include=dev else echo "DĂ©pendances Node.js dĂ©jĂ  installĂ©es" fi # Installer Capacitor si nĂ©cessaire if ! npm list @capacitor/core > /dev/null 2>&1; then echo "Installation de Capacitor..." npm install @capacitor/core @capacitor/cli @capacitor/android fi echo -e "${GREEN}✅ DĂ©pendances OK${NC}" echo "" # Étape 3: Build Next.js echo -e "${BLUE}📩 Étape 3/6: Build Next.js (export statique)${NC}" rm -rf .next out # Exclure temporairement les routes API pour l'export statique if [ -d "app/api" ]; then echo "Exclusion temporaire des routes API..." mv app/api /tmp/api-backup-$$ echo -e "${GREEN}✅ Routes API dĂ©placĂ©es temporairement${NC}" fi if npm run build; then echo -e "${GREEN}✅ Build Next.js rĂ©ussi${NC}" else echo -e "${YELLOW}⚠ Build avec avertissements, continuation...${NC}" npm run build -- --no-lint || true fi # Restaurer les routes API if [ -d "/tmp/api-backup-$$" ]; then mv /tmp/api-backup-$$ app/api echo -e "${GREEN}✅ Routes API restaurĂ©es${NC}" fi echo "" # VĂ©rifier que le dossier out existe if [ ! -d "out" ]; then echo "❌ Erreur: Le dossier 'out' n'a pas Ă©tĂ© créé" exit 1 fi # Étape 4: Initialiser/Configurer Capacitor echo -e "${BLUE}📩 Étape 4/6: Configuration Capacitor${NC}" # Initialiser Capacitor si nĂ©cessaire if [ ! -f "capacitor.config.ts" ]; then echo "Initialisation de Capacitor..." npx cap init "Compagnon du Lagon" com.pensionmarama.app --web-dir=out else echo "Capacitor dĂ©jĂ  initialisĂ©" # Mettre Ă  jour la config pour pointer vers out cat > capacitor.config.ts << 'EOF' import { CapacitorConfig } from '@capacitor/cli'; const config: CapacitorConfig = { appId: 'com.pensionmarama.app', appName: 'Compagnon du Lagon', webDir: 'out', server: { androidScheme: 'https' } }; export default config; EOF fi # Ajouter la plateforme Android si nĂ©cessaire if [ ! -d "android" ]; then echo "Ajout de la plateforme Android..." npx cap add android else echo "Plateforme Android dĂ©jĂ  prĂ©sente" fi echo -e "${GREEN}✅ Capacitor configurĂ©${NC}" echo "" # Étape 5: Synchroniser les assets echo -e "${BLUE}📩 Étape 5/6: Synchronisation des assets${NC}" npx cap sync android echo -e "${GREEN}✅ Assets synchronisĂ©s${NC}" echo "" # Étape 6: Build l'APK echo -e "${BLUE}📩 Étape 6/6: GĂ©nĂ©ration de l'APK${NC}" # Initialiser SDKMAN et configurer Java source "$HOME/.sdkman/bin/sdkman-init.sh" sdk use java 21.0.1-tem export ANDROID_HOME="$HOME/Android/Sdk" cd android # VĂ©rifier que gradlew existe et est exĂ©cutable if [ ! -f "./gradlew" ]; then echo "❌ Erreur: gradlew n'existe pas" exit 1 fi chmod +x ./gradlew # Build l'APK echo "Construction de l'APK debug..." ./gradlew clean assembleDebug cd .. # Copier l'APK dans dist/ echo "" echo -e "${BLUE}📩 Copie de l'APK...${NC}" mkdir -p dist if [ -f "android/app/build/outputs/apk/debug/app-debug.apk" ]; then cp android/app/build/outputs/apk/debug/app-debug.apk dist/compagnon-lagon-beta.apk # Afficher les infos APK_SIZE=$(du -h dist/compagnon-lagon-beta.apk | cut -f1) echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}✅ APK GÉNÉRÉ AVEC SUCCÈS !${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo -e "đŸ“± Fichier: ${BLUE}dist/compagnon-lagon-beta.apk${NC}" echo -e "📊 Taille: ${BLUE}${APK_SIZE}${NC}" echo "" echo -e "${YELLOW}đŸ“€ Pour distribuer aux bĂȘta-testeurs:${NC}" echo " 1. Envoyez le fichier dist/compagnon-lagon-beta.apk" echo " 2. Demandez-leur d'activer 'Sources inconnues'" echo " 3. Installer l'APK sur leur tĂ©lĂ©phone" echo "" echo -e "${YELLOW}🔄 Pour mettre Ă  jour:${NC}" echo " Relancez simplement ce script !" echo "" else echo -e "${RED}❌ Erreur: L'APK n'a pas Ă©tĂ© gĂ©nĂ©rĂ©${NC}" echo "VĂ©rifiez les erreurs ci-dessus" exit 1 fi # Restaurer la config Next.js originale si elle existe if [ -f "next.config.js.backup" ]; then mv next.config.js.backup next.config.js fi