Initial upload: fin65-mobile

This commit is contained in:
Abderrahim-Mouhcine
2026-08-16 19:59:55 +01:00
commit 46558a5ec8
242 changed files with 16334 additions and 0 deletions
@@ -0,0 +1,29 @@
# FIN65 - Patch Android biométrie
Ce patch prépare Android pour `local_auth`.
Il fait :
- ajoute `android.permission.USE_BIOMETRIC` dans `AndroidManifest.xml` ;
- garde `android.permission.INTERNET` ;
- garde `android:usesCleartextTraffic="true"` ;
- force le label `FIN65` ;
- modifie `MainActivity` pour hériter de `FlutterFragmentActivity` ;
- tente de mettre `minSdk` à 24 si nécessaire ;
- lance `flutter clean` et `flutter pub get`.
## Utilisation
Depuis ce dossier :
```powershell
.\apply_android_biometrics_patch.bat
```
Puis :
```powershell
cd D:\07-Logiciels\20-FIN65\fin65_mobile
flutter run
```
Des sauvegardes `.before_biometric_*.bak` sont créées avant modification.
@@ -0,0 +1,4 @@
@echo off
setlocal
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0apply_android_biometrics_patch.ps1"
@@ -0,0 +1,128 @@
$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"