$MobileDir = "D:\07-Logiciels\20-FIN65\fin65_mobile" $Manifest = Join-Path $MobileDir "android\app\src\main\AndroidManifest.xml" $AndroidDir = Join-Path $MobileDir "android\app\src\main" $KotlinRoot = Join-Path $AndroidDir "kotlin" $JavaRoot = Join-Path $AndroidDir "java" Write-Host "" Write-Host "==========================================" Write-Host " FIN65 - Patch Android biometrie" Write-Host "==========================================" Write-Host "" if (!(Test-Path $MobileDir)) { Write-Host "[ERREUR] Dossier mobile introuvable : $MobileDir" -ForegroundColor Red Read-Host "Appuie sur Entree pour fermer" exit 1 } if (!(Test-Path $Manifest)) { Write-Host "[ERREUR] AndroidManifest.xml introuvable : $Manifest" -ForegroundColor Red Read-Host "Appuie sur Entree pour fermer" exit 1 } $Stamp = Get-Date -Format "yyyyMMdd_HHmmss" Copy-Item $Manifest "$Manifest.before_biometric_$Stamp.bak" -Force [xml]$xml = Get-Content $Manifest $manifestNode = $xml.manifest $androidNs = "http://schemas.android.com/apk/res/android" function Ensure-Permission($name) { $existing = $manifestNode.'uses-permission' | Where-Object { $_.GetAttribute("name", $androidNs) -eq $name } if ($null -eq $existing) { $perm = $xml.CreateElement("uses-permission") $attr = $xml.CreateAttribute("android", "name", $androidNs) $attr.Value = $name [void]$perm.Attributes.Append($attr) [void]$manifestNode.InsertBefore($perm, $manifestNode.FirstChild) Write-Host "Permission ajoutee : $name" } else { Write-Host "Permission deja presente : $name" } } Ensure-Permission "android.permission.INTERNET" Ensure-Permission "android.permission.USE_BIOMETRIC" $app = $manifestNode.application if ($app -ne $null) { $app.SetAttribute("label", $androidNs, "FIN65") $app.SetAttribute("icon", $androidNs, "@mipmap/ic_launcher") $app.SetAttribute("roundIcon", $androidNs, "@mipmap/ic_launcher_round") $app.SetAttribute("usesCleartextTraffic", $androidNs, "true") } $xml.Save($Manifest) Write-Host "AndroidManifest.xml mis a jour." # MainActivity: local_auth Android demande FlutterFragmentActivity. $mainFiles = @() if (Test-Path $KotlinRoot) { $mainFiles += Get-ChildItem $KotlinRoot -Recurse -Filter MainActivity.kt -ErrorAction SilentlyContinue } if (Test-Path $JavaRoot) { $mainFiles += Get-ChildItem $JavaRoot -Recurse -Filter MainActivity.java -ErrorAction SilentlyContinue } if ($mainFiles.Count -eq 0) { Write-Host "[ATTENTION] MainActivity introuvable. Aucun patch FragmentActivity applique." -ForegroundColor Yellow } else { foreach ($file in $mainFiles) { Copy-Item $file.FullName "$($file.FullName).before_biometric_$Stamp.bak" -Force $text = Get-Content $file.FullName -Raw if ($file.Extension -eq ".kt") { $text = $text -replace "import io\.flutter\.embedding\.android\.FlutterActivity", "import io.flutter.embedding.android.FlutterFragmentActivity" if ($text -notmatch "FlutterFragmentActivity") { $text = $text -replace "package ([^\r\n]+)", "package `$1`n`nimport io.flutter.embedding.android.FlutterFragmentActivity" } $text = $text -replace ":\s*FlutterActivity\(\)", ": FlutterFragmentActivity()" $text = $text -replace "extends\s+FlutterActivity", "extends FlutterFragmentActivity" Set-Content $file.FullName $text -Encoding UTF8 Write-Host "MainActivity.kt mis a jour : $($file.FullName)" } if ($file.Extension -eq ".java") { $text = $text -replace "import io\.flutter\.embedding\.android\.FlutterActivity;", "import io.flutter.embedding.android.FlutterFragmentActivity;" if ($text -notmatch "FlutterFragmentActivity") { $text = $text -replace "(package [^;]+;)", "`$1`n`nimport io.flutter.embedding.android.FlutterFragmentActivity;" } $text = $text -replace "extends\s+FlutterActivity", "extends FlutterFragmentActivity" Set-Content $file.FullName $text -Encoding UTF8 Write-Host "MainActivity.java mis a jour : $($file.FullName)" } } } # Tente de relever minSdk a 24 si un fichier Gradle classique existe. $gradleFiles = @( (Join-Path $MobileDir "android\app\build.gradle"), (Join-Path $MobileDir "android\app\build.gradle.kts") ) foreach ($g in $gradleFiles) { if (Test-Path $g) { Copy-Item $g "$g.before_biometric_$Stamp.bak" -Force $text = Get-Content $g -Raw $text = $text -replace "minSdkVersion\s+flutter\.minSdkVersion", "minSdkVersion 24" $text = $text -replace "minSdk\s*=\s*flutter\.minSdkVersion", "minSdk = 24" $text = $text -replace "minSdkVersion\s+\d+", "minSdkVersion 24" $text = $text -replace "minSdk\s*=\s*\d+", "minSdk = 24" Set-Content $g $text -Encoding UTF8 Write-Host "Gradle minSdk verifie : $g" } } Set-Location $MobileDir flutter clean flutter pub get Write-Host "" Write-Host "Patch Android biometrie termine." Write-Host "Relance maintenant : flutter run" Write-Host "" Read-Host "Appuie sur Entree pour fermer"