#!/bin/bash set -e echo "🚀 Build APK Admin - 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 "Installation de SDKMAN..." curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh" fi source "$HOME/.sdkman/bin/sdkman-init.sh" 2>/dev/null || true # VĂ©rifier Java 21 if ! java -version 2>&1 | grep -q "21"; then echo "Installation de Java 21..." 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 Admin" com.pensionmarama.admin --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.admin', appName: 'Compagnon Admin', webDir: 'out', server: { androidScheme: 'https' } }; export default config; EOF fi echo -e "${GREEN}✅ Capacitor configurĂ©${NC}" echo "" # Étape 5: Synchroniser avec Android echo -e "${BLUE}📩 Étape 5/6: Synchronisation Android${NC}" # Ajouter Android si nĂ©cessaire if [ ! -d "android" ]; then echo "Ajout de la plateforme Android..." npx cap add android fi # Synchroniser echo "Synchronisation Capacitor..." npx cap sync android echo -e "${GREEN}✅ Android synchronisĂ©${NC}" echo "" # Étape 6: GĂ©nĂ©rer l'APK echo -e "${BLUE}📩 Étape 6/6: GĂ©nĂ©ration de l'APK${NC}" export ANDROID_HOME="$HOME/Android/Sdk" export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH" cd android ./gradlew assembleDebug cd .. # Copier l'APK gĂ©nĂ©rĂ© if [ -f "android/app/build/outputs/apk/debug/app-debug.apk" ]; then mkdir -p dist cp android/app/build/outputs/apk/debug/app-debug.apk dist/compagnon-admin-debug.apk echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}✅ APK ADMIN GÉNÉRÉ AVEC SUCCÈS !${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo -e "đŸ“± Fichier: ${BLUE}dist/compagnon-admin-debug.apk${NC}" APK_SIZE=$(du -h dist/compagnon-admin-debug.apk | cut -f1) echo -e "📊 Taille: ${BLUE}${APK_SIZE}${NC}" echo "" echo -e "${YELLOW}đŸ“€ Pour distribuer aux administrateurs:${NC}" echo " 1. Envoyez le fichier dist/compagnon-admin-debug.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 "❌ L'APK n'a pas Ă©tĂ© gĂ©nĂ©rĂ©. VĂ©rifiez les erreurs ci-dessus." exit 1 fi