Skip to content

Corrige l'échec de build APK : setKeepOnScreenCondition n'existe pas côté natif - #26

Merged
SKOHscripts merged 1 commit into
mainfrom
fix/splash-screen-build-error
Jul 16, 2026
Merged

Corrige l'échec de build APK : setKeepOnScreenCondition n'existe pas côté natif#26
SKOHscripts merged 1 commit into
mainfrom
fix/splash-screen-build-error

Conversation

@SKOHscripts

Copy link
Copy Markdown
Owner

Summary

main a un build APK cassé depuis PR #25 : compileReleaseJavaWithJavac échoue avec

error: cannot find symbol
    getSplashScreen().setKeepOnScreenCondition(() -> !uiReady.get());
                     ^
  symbol:   method setKeepOnScreenCondition(()->!uiReady.get())
  location: interface SplashScreen

Cause : setKeepOnScreenCondition n'existe que sur
androidx.core.splashscreen.SplashScreen (bibliothèque de compatibilité) —
jamais sur android.window.SplashScreen, la classe native que ce projet
utilise (contrainte « pas d'AndroidX », voir docs/ANDROID_PACKAGING.md).
Confusion entre les deux API lors de l'implémentation de PR #25, repérée
seulement au build réel (non exécutable dans le sandbox de développement).
Vérifié après coup auprès de la documentation Android officielle.

Fix : remplace ce mécanisme par ViewTreeObserver.OnPreDrawListener sur
la vue de contenu (findViewById(android.R.id.content), posé juste après
setContentView) — reporter le dessin de la toute première frame de
l'activité reporte de fait la disparition du splash, quelle que soit l'API.
C'est la technique native documentée par Android pour ce cas d'usage
précis (attente d'un chargement asynchrone avant la première frame), sans
classe ni attribut spécifiques à l'API 31+ — fonctionne identiquement à
toutes les API, contrairement à la tentative précédente qui nécessitait une
garde de version.

La condition de report reste un champ uiReady (AtomicBoolean) mis à
true par WebViewClient.onPageFinished (+ view.invalidate() pour forcer
une nouvelle passe de dessin et faire réévaluer le listener) — donc jusqu'à
ce que la première page ait réellement fini de charger dans la WebView, pas
seulement jusqu'à la réponse du serveur.

L'icône animée du splash (PR #25, AnimatedVectorDrawable) n'est pas
touchée par ce correctif — elle ne dépendait pas de ce mécanisme.

Documentation corrigée dans docs/ANDROID_PACKAGING.md et
docs/spec/packaging-lancement.md pour refléter le mécanisme réel, avec le
piège tracé explicitement pour ne pas le retrancher deux fois.

Test plan

  • pytest (suite complète, 413 tests) — vert (changement Java uniquement)
  • Vérifié qu'aucune référence à setKeepOnScreenCondition ne subsiste comme code réel (uniquement en commentaire explicatif du piège)
  • Mécanisme de remplacement vérifié contre la documentation Android officielle (developer.android.com/develop/ui/views/launch/splash-screen) avant implémentation, pour éviter une seconde erreur du même type
  • Build Android réel (cd android && ./gradlew assembleDebug) pour confirmer que la compilation passe et que le splash reste visible pendant le démarrage — c'est le point critique à vérifier en priorité, puisque c'est cette étape qui a révélé l'erreur initiale

🤖 Generated with Claude Code


Generated by Claude Code

…côté natif

CI cassée sur main (compileReleaseJavaWithJavac) : "cannot find symbol:
method setKeepOnScreenCondition" sur SplashScreen. Cette méthode n'existe
que sur androidx.core.splashscreen.SplashScreen (bibliothèque de
compatibilité) — jamais sur android.window.SplashScreen, la classe native
utilisée jusqu'ici (contrainte "pas d'AndroidX" du projet). Confusion entre
les deux API lors de l'implémentation initiale, vérifiée après coup auprès
de la documentation Android officielle.

Remplacé par ViewTreeObserver.OnPreDrawListener sur la vue de contenu
(findViewById(android.R.id.content), juste après setContentView) : reporter
le dessin de la toute première frame de l'activité reporte de fait la
disparition du splash, quelle que soit l'API — c'est la technique native
documentée par Android pour ce cas d'usage précis (attente d'un chargement
asynchrone avant la première frame), sans classe ni attribut spécifiques à
l'API 31+, contrairement à la tentative précédente.

Documentation corrigée dans docs/ANDROID_PACKAGING.md et
docs/spec/packaging-lancement.md pour refléter le mécanisme réel.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012rz3jgonqVHP4fzQsJh8oP
@SKOHscripts
SKOHscripts marked this pull request as ready for review July 16, 2026 23:19
@SKOHscripts
SKOHscripts merged commit 00c291f into main Jul 16, 2026
5 checks passed
@SKOHscripts
SKOHscripts deleted the fix/splash-screen-build-error branch July 16, 2026 23:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants