#!/bin/bash # Script de génération du bundle Android pour GEOSECTOR # Usage: ./android.sh set -e # Arrêter le script en cas d'erreur # Couleurs pour les messages RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Fonction pour afficher les messages print_message() { echo -e "${BLUE}[INFO]${NC} $1" } print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } # Fonction pour gérer les erreurs handle_error() { print_error "Une erreur est survenue lors de l'exécution de la commande" print_error "Ligne $1" exit 1 } # Trap pour capturer les erreurs trap 'handle_error $LINENO' ERR # Vérifier que nous sommes dans le bon dossier if [ ! -f "pubspec.yaml" ]; then print_error "Ce script doit être exécuté depuis le dossier racine de l'application Flutter" print_error "Fichier pubspec.yaml introuvable" exit 1 fi print_message "=========================================" print_message " GEOSECTOR - Génération Bundle Android" print_message "=========================================" echo # Vérifier que Flutter est installé if ! command -v flutter &> /dev/null; then print_error "Flutter n'est pas installé ou n'est pas dans le PATH" exit 1 fi # Récupérer la version depuis pubspec.yaml VERSION=$(grep "^version:" pubspec.yaml | sed 's/version: //' | sed 's/+/-/') if [ -z "$VERSION" ]; then print_error "Impossible de récupérer la version depuis pubspec.yaml" exit 1 fi # Extraire le version code VERSION_CODE=$(echo $VERSION | cut -d'-' -f2) if [ -z "$VERSION_CODE" ]; then print_error "Impossible d'extraire le version code" exit 1 fi print_message "Version détectée : $VERSION" print_message "Version code : $VERSION_CODE" echo # Vérifier la présence du keystore if [ ! -f "android/app/geosector2025.jks" ]; then print_error "Fichier keystore introuvable : android/app/geosector2025.jks" exit 1 fi # Vérifier la présence du fichier key.properties if [ ! -f "android/key.properties" ]; then print_error "Fichier key.properties introuvable" print_error "Ce fichier est nécessaire pour signer l'application" exit 1 fi print_success "Configuration de signature vérifiée" echo # Étape 1 : Nettoyer le projet print_message "Étape 1/4 : Nettoyage du projet..." flutter clean if [ $? -eq 0 ]; then print_success "Projet nettoyé" else print_error "Échec du nettoyage du projet" exit 1 fi echo # Étape 2 : Récupérer les dépendances print_message "Étape 2/4 : Récupération des dépendances..." flutter pub get if [ $? -eq 0 ]; then print_success "Dépendances récupérées" else print_error "Échec de la récupération des dépendances" exit 1 fi # Patch nfc_manager 3.3.0 (AndroidManifest namespace) print_message "Application du patch nfc_manager 3.3.0..." ./fastlane/scripts/commun/fix-nfc-manager.sh || { print_error "Échec du patch nfc_manager" exit 1 } echo # Étape 3 : Analyser le code (optionnel mais recommandé) print_message "Étape 3/4 : Analyse du code Dart..." flutter analyze --no-fatal-infos --no-fatal-warnings || { print_warning "Des avertissements ont été détectés dans le code" read -p "Voulez-vous continuer malgré les avertissements ? (y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then print_message "Génération annulée par l'utilisateur" exit 0 fi } print_success "Analyse du code terminée" echo # Étape 4 : Générer le bundle print_message "Étape 4/4 : Génération du bundle Android..." print_message "Cette opération peut prendre plusieurs minutes..." flutter build appbundle --release if [ $? -eq 0 ]; then print_success "Bundle généré avec succès" else print_error "Échec de la génération du bundle" exit 1 fi echo # Vérifier que le bundle a été créé BUNDLE_PATH="build/app/outputs/bundle/release/app-release.aab" if [ ! -f "$BUNDLE_PATH" ]; then print_error "Bundle introuvable à l'emplacement attendu : $BUNDLE_PATH" exit 1 fi # Copier le bundle à la racine avec le nouveau nom FINAL_NAME="geosector-$VERSION_CODE.aab" print_message "Copie du bundle vers : $FINAL_NAME" cp "$BUNDLE_PATH" "$FINAL_NAME" if [ -f "$FINAL_NAME" ]; then print_success "Bundle copié avec succès" # Afficher la taille du fichier FILE_SIZE=$(du -h "$FINAL_NAME" | cut -f1) print_message "Taille du bundle : $FILE_SIZE" else print_error "Échec de la copie du bundle" exit 1 fi echo print_message "=========================================" print_success " GÉNÉRATION TERMINÉE AVEC SUCCÈS !" print_message "=========================================" echo print_message "Bundle généré : ${GREEN}$FINAL_NAME${NC}" print_message "Version : $VERSION" print_message "Chemin : $(pwd)/$FINAL_NAME" echo print_message "Prochaines étapes :" print_message "1. Tester le bundle sur un appareil Android" print_message "2. Uploader sur Google Play Console" print_message "3. Soumettre pour review" echo # Optionnel : Générer aussi l'APK read -p "Voulez-vous aussi générer l'APK pour des tests ? (y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then print_message "Génération de l'APK..." flutter build apk --release if [ $? -eq 0 ]; then APK_PATH="build/app/outputs/flutter-apk/app-release.apk" if [ -f "$APK_PATH" ]; then APK_NAME="geosector-$VERSION_CODE.apk" cp "$APK_PATH" "$APK_NAME" print_success "APK généré : $APK_NAME" # Afficher la taille de l'APK APK_SIZE=$(du -h "$APK_NAME" | cut -f1) print_message "Taille de l'APK : $APK_SIZE" fi else print_warning "Échec de la génération de l'APK (le bundle a été créé avec succès)" fi fi echo print_success "Script terminé !"