diff --git a/android-client/android-res/drawable/ic_launcher_background.xml b/android-client/android-res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..0786163
--- /dev/null
+++ b/android-client/android-res/drawable/ic_launcher_background.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/android-client/android-res/drawable/ic_launcher_foreground.xml b/android-client/android-res/drawable/ic_launcher_foreground.xml
new file mode 100644
index 0000000..725e215
--- /dev/null
+++ b/android-client/android-res/drawable/ic_launcher_foreground.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android-client/android-res/drawable/ic_launcher_monochrome.xml b/android-client/android-res/drawable/ic_launcher_monochrome.xml
new file mode 100644
index 0000000..f729035
--- /dev/null
+++ b/android-client/android-res/drawable/ic_launcher_monochrome.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
diff --git a/android-client/make-icons.ps1 b/android-client/make-icons.ps1
new file mode 100644
index 0000000..9b3206c
--- /dev/null
+++ b/android-client/make-icons.ps1
@@ -0,0 +1,68 @@
+# Genere les icones PNG du lanceur, pour Android < 8 qui ignore les icones
+# adaptatives. Meme dessin que les vecteurs de android-res\drawable :
+# cadenas cyan sur ardoise.
+#
+# A relancer seulement si le dessin change ; les PNG sont suivis par git.
+
+$ErrorActionPreference = 'Stop'
+Add-Type -AssemblyName System.Drawing
+
+$root = Join-Path $PSScriptRoot 'android-res'
+$bg = [System.Drawing.Color]::FromArgb(255, 15, 23, 42) # #0F172A
+$fg = [System.Drawing.Color]::FromArgb(255, 34, 211, 238) # #22D3EE
+
+# densite -> cote en pixels, tel qu'Android les attend
+$sizes = @{ 'drawable-ldpi' = 36; 'drawable-mdpi' = 48; 'drawable-hdpi' = 72
+ 'drawable-xhdpi' = 96; 'drawable-xxhdpi' = 144; 'drawable-xxxhdpi' = 192 }
+
+foreach ($dir in $sizes.Keys) {
+ $n = $sizes[$dir]
+ $out = Join-Path $root $dir
+ New-Item -ItemType Directory -Force $out | Out-Null
+
+ $bmp = New-Object System.Drawing.Bitmap $n, $n
+ $g = [System.Drawing.Graphics]::FromImage($bmp)
+ $g.SmoothingMode = 'AntiAlias'
+
+ # Fond : carre arrondi. Les vieux lanceurs ne masquent pas, donc l'icone
+ # doit porter sa propre forme.
+ $r = [int]($n * 0.22)
+ $path = New-Object System.Drawing.Drawing2D.GraphicsPath
+ $path.AddArc(0, 0, 2*$r, 2*$r, 180, 90)
+ $path.AddArc($n-2*$r-1, 0, 2*$r, 2*$r, 270, 90)
+ $path.AddArc($n-2*$r-1, $n-2*$r-1, 2*$r, 2*$r, 0, 90)
+ $path.AddArc(0, $n-2*$r-1, 2*$r, 2*$r, 90, 90)
+ $path.CloseFigure()
+ $g.FillPath((New-Object System.Drawing.SolidBrush $bg), $path)
+
+ # Echelle : le dessin vectoriel vit dans un carre de 108.
+ $u = $n / 108.0
+ $brush = New-Object System.Drawing.SolidBrush $fg
+ $pen = New-Object System.Drawing.Pen $fg, ([float](5.5 * $u))
+ $pen.StartCap = 'Round'; $pen.EndCap = 'Round'
+
+ # Anse : demi-cercle ouvert vers le bas, puis deux montants.
+ $g.DrawArc($pen, [float](44*$u), [float](37*$u), [float](20*$u), [float](20*$u), 180, 180)
+ $g.DrawLine($pen, [float](44*$u), [float](47*$u), [float](44*$u), [float](56*$u))
+ $g.DrawLine($pen, [float](64*$u), [float](47*$u), [float](64*$u), [float](56*$u))
+
+ # Corps
+ $body = New-Object System.Drawing.Drawing2D.GraphicsPath
+ $bx = 34*$u; $by = 54*$u; $bw = 40*$u; $bh = 26*$u; $br = 4*$u
+ $body.AddArc([float]$bx, [float]$by, [float](2*$br), [float](2*$br), 180, 90)
+ $body.AddArc([float]($bx+$bw-2*$br), [float]$by, [float](2*$br), [float](2*$br), 270, 90)
+ $body.AddArc([float]($bx+$bw-2*$br), [float]($by+$bh-2*$br), [float](2*$br), [float](2*$br), 0, 90)
+ $body.AddArc([float]$bx, [float]($by+$bh-2*$br), [float](2*$br), [float](2*$br), 90, 90)
+ $body.CloseFigure()
+ $g.FillPath($brush, $body)
+
+ # Serrure, evidee dans la couleur du fond
+ $bgBrush = New-Object System.Drawing.SolidBrush $bg
+ $g.FillEllipse($bgBrush, [float](50*$u), [float](58*$u), [float](8*$u), [float](8*$u))
+ $g.FillRectangle($bgBrush, [float](52.4*$u), [float](64*$u), [float](3.2*$u), [float](9*$u))
+
+ $g.Dispose()
+ $bmp.Save((Join-Path $out 'ic_launcher.png'), [System.Drawing.Imaging.ImageFormat]::Png)
+ $bmp.Dispose()
+ "{0,-20} {1}x{1}" -f $dir, $n
+}
diff --git a/android-client/repack-apk.ps1 b/android-client/repack-apk.ps1
index 1cbdc16..b8ff23b 100644
--- a/android-client/repack-apk.ps1
+++ b/android-client/repack-apk.ps1
@@ -21,6 +21,11 @@ $p = '.\Android64\Debug\pmserverApk'
# 1. Remettre Skia, que Deploy vient d'effacer.
Copy-Item "$bds\binandroid64\libsk4d.so" "$p\library\lib\arm64-v8a\libsk4d.so" -Force
+# 1 bis. Nos icones par-dessus celles de Delphi. Meme raison que pour Skia :
+# les proprietes Android_LauncherIcon* et Android_AdaptiveIcon* du .dproj
+# devraient suffire, mais rien ne les deploie ici.
+Copy-Item "$PSScriptRoot\android-res\*" "$p\res\" -Recurse -Force
+
# 2. aapt : reconstruit l'archive non alignee depuis library, classes, res.
& $pac -u8 --aaptpackage="$sdk\build-tools\33.0.2\Aapt.exe,$p\library,$p\classes,$p\res,$p\assets,$p\AndroidManifest.xml,$sdk\platforms\android-33\android.jar,$p\bin\pmserverApk-unaligned.apk"
if ($LASTEXITCODE -ne 0) { throw "aapt a echoue" }