#!/bin/bash # ============================================================================ # Script de correction du package nfc_manager 3.3.0 pour Android Gradle Plugin 8+ # ============================================================================ # # Problème : # nfc_manager 3.3.0 utilise l'ancien format 'package="..."' dans AndroidManifest.xml # et ne déclare pas de namespace dans build.gradle (requis par AGP 8+) # # Solution : # 1. Supprime l'attribut package="io.flutter.plugins.nfcmanager" du AndroidManifest.xml # 2. Ajoute namespace 'io.flutter.plugins.nfc_manager' dans build.gradle # # Usage : # ./fix-nfc-manager.sh # # Historique : # 14/10/2025 - Création du script pour résoudre compilation Android # ============================================================================ set -e # Détection de l'OS pour la syntaxe sed if [[ "$OSTYPE" == "darwin"* ]]; then # macOS (BSD sed) SED_INPLACE="sed -i ''" else # Linux (GNU sed) SED_INPLACE="sed -i" fi # Couleurs pour les messages GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color echo_info() { echo -e "${GREEN}[INFO]${NC} $1" } echo_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } echo_error() { echo -e "${RED}[ERROR]${NC} $1" } echo_step() { echo -e "${BLUE}[STEP]${NC} $1" } # Chemins vers les fichiers de nfc_manager 3.3.0 # Utilise $PUB_CACHE si défini (cache local projet), sinon $HOME/.pub-cache PUB_CACHE_BASE="${PUB_CACHE:-$HOME/.pub-cache}" NFC_DIR="${PUB_CACHE_BASE}/hosted/pub.dev/nfc_manager-3.3.0/android" NFC_MANIFEST="${NFC_DIR}/src/main/AndroidManifest.xml" NFC_BUILD_GRADLE="${NFC_DIR}/build.gradle" NFC_TRANSLATOR="${NFC_DIR}/src/main/kotlin/io/flutter/plugins/nfcmanager/Translator.kt" echo_info "==========================================" echo_info " nfc_manager 3.3.0 - Android Patch" echo_info "==========================================" echo "" # Vérifier si les fichiers existent if [ ! -f "$NFC_MANIFEST" ]; then echo_error "Fichier AndroidManifest.xml introuvable" echo_error "Chemin attendu: $NFC_MANIFEST" echo "" echo_info "Exécutez 'flutter pub get' d'abord" exit 1 fi if [ ! -f "$NFC_BUILD_GRADLE" ]; then echo_error "Fichier build.gradle introuvable" echo_error "Chemin attendu: $NFC_BUILD_GRADLE" exit 1 fi if [ ! -f "$NFC_TRANSLATOR" ]; then echo_error "Fichier Translator.kt introuvable" echo_error "Chemin attendu: $NFC_TRANSLATOR" exit 1 fi echo_info "Fichiers trouvés:" echo_info " - AndroidManifest.xml: $NFC_MANIFEST" echo_info " - build.gradle: $NFC_BUILD_GRADLE" echo_info " - Translator.kt: $NFC_TRANSLATOR" echo "" # =========================================== # ÉTAPE 1 : Patcher AndroidManifest.xml # =========================================== echo_step "Étape 1/2 : Patch AndroidManifest.xml" echo "" if grep -q 'package="io.flutter.plugins.nfcmanager"' "$NFC_MANIFEST"; then echo_warning "Attribut 'package' détecté dans AndroidManifest.xml" # Créer une sauvegarde BACKUP_MANIFEST="${NFC_MANIFEST}.backup" if [ ! -f "$BACKUP_MANIFEST" ]; then cp "$NFC_MANIFEST" "$BACKUP_MANIFEST" echo_info "Sauvegarde créée: ${BACKUP_MANIFEST}" fi # Appliquer le patch (compatible Linux + macOS) eval "$SED_INPLACE 's/ package=\"io.flutter.plugins.nfcmanager\"//g' \"$NFC_MANIFEST\"" # Vérifier if ! grep -q 'package="io.flutter.plugins.nfcmanager"' "$NFC_MANIFEST"; then echo_info "✅ AndroidManifest.xml patché avec succès" else echo_error "❌ Échec du patch AndroidManifest.xml" exit 1 fi else echo_info "✅ AndroidManifest.xml déjà patché" fi echo "" # =========================================== # ÉTAPE 2 : Patcher build.gradle # =========================================== echo_step "Étape 2/2 : Patch build.gradle" echo "" if grep -q "namespace 'io.flutter.plugins.nfc_manager'" "$NFC_BUILD_GRADLE"; then echo_info "✅ build.gradle déjà patché (namespace présent)" else echo_warning "Namespace manquant dans build.gradle" # Créer une sauvegarde BACKUP_GRADLE="${NFC_BUILD_GRADLE}.backup" if [ ! -f "$BACKUP_GRADLE" ]; then cp "$NFC_BUILD_GRADLE" "$BACKUP_GRADLE" echo_info "Sauvegarde créée: ${BACKUP_GRADLE}" fi # Appliquer le patch : ajouter namespace après "android {" (compatible Linux + macOS) if [[ "$OSTYPE" == "darwin"* ]]; then # macOS : nécessite un retour à la ligne explicite sed -i '' "/^android {$/a\\ namespace 'io.flutter.plugins.nfc_manager' " "$NFC_BUILD_GRADLE" else # Linux : syntaxe différente sed -i "/^android {$/a\\ namespace 'io.flutter.plugins.nfc_manager'" "$NFC_BUILD_GRADLE" fi # Vérifier if grep -q "namespace 'io.flutter.plugins.nfc_manager'" "$NFC_BUILD_GRADLE"; then echo_info "✅ build.gradle patché avec succès (namespace ajouté)" else echo_error "❌ Échec du patch build.gradle" # Restaurer le backup mv "$BACKUP_GRADLE" "$NFC_BUILD_GRADLE" exit 1 fi fi echo "" # =========================================== # ÉTAPE 3 : Patcher Translator.kt (Kotlin) # =========================================== echo_step "Étape 3/3 : Patch Translator.kt (fix Kotlin deprecated)" echo "" if grep -q '\.toLowerCase(' "$NFC_TRANSLATOR"; then echo_warning "Méthode dépréciée 'toLowerCase()' détectée dans Translator.kt" # Créer une sauvegarde BACKUP_TRANSLATOR="${NFC_TRANSLATOR}.backup" if [ ! -f "$BACKUP_TRANSLATOR" ]; then cp "$NFC_TRANSLATOR" "$BACKUP_TRANSLATOR" echo_info "Sauvegarde créée: ${BACKUP_TRANSLATOR}" fi # Appliquer le patch : remplacer toLowerCase par lowercase (compatible Linux + macOS) eval "$SED_INPLACE 's/\\.toLowerCase(/\\.lowercase(/g' \"$NFC_TRANSLATOR\"" # Vérifier if ! grep -q '\.toLowerCase(' "$NFC_TRANSLATOR"; then echo_info "✅ Translator.kt patché avec succès (toLowerCase → lowercase)" else echo_error "❌ Échec du patch Translator.kt" # Restaurer le backup mv "$BACKUP_TRANSLATOR" "$NFC_TRANSLATOR" exit 1 fi else echo_info "✅ Translator.kt déjà patché (pas de toLowerCase)" fi echo "" echo_info "==========================================" echo_info " ✅ Patch terminé avec succès!" echo_info "==========================================" echo "" echo_info "Modifications appliquées:" echo_info " 1. AndroidManifest.xml - Attribut 'package' supprimé" echo_info " 2. build.gradle - Namespace ajouté" echo_info " 3. Translator.kt - toLowerCase() → lowercase()" echo "" echo_info "Vous pouvez maintenant compiler Android:" echo_info " ./android.sh" echo "" exit 0