Application qui crash sur Android 9

J’ai un Honor View 10 et je m’en sers pour tester mes applications. Je teste aussi sur un émulateur ainsi que via le debugger de WM24. J’ai eu droit à une mise à jour vers la mi-janvier vers la version 9.

Suite à cela, l’application que je suis en train de développer s’est mis à planter dès que j’ouvrais une nouvelle fenêtre…

Cet article fait suite à la question que mon collègue m’a posé. Je vais donc parler d’un problème qui m’a tout de même occupé l’esprit durant pas mal de jours. Si j’avais été néophyte dans le développement sur Windev, je pense que je n’aurais pas été autant embêté…

En effet, j’ai peu confiance en PC Soft mais je reconnais que leurs produits sont très pratiques et permet réellement de développer rapidement. Le problème est que les nouvelles fonctionnalités sont souvent défaillantes et des vieux bugs restent souvent durant des années, voir plus. Aujourd’hui encore, avec la version bureau, il y a des bugs qui existent depuis que j’ai commencé. Par exemple : avec le GDS, il arrive qu’à l’extraction de fenêtres, certaines modifications ne soient pas récupérées correctement ce qui génère une perte de données.

Bref, devant ce nouveau problème, je me suis directement posé la question que j’ai l’habitude de me poser :

Comment puis-je faire pour parvenir à mes fins devant ce nouveau problème ?

Tiens, maintenant que j’y pense, il me semble que Napoleon Hill en parle dans un des livres de la loi du succès. Quand je les relirai, je modifierai cet article pour vous en parler plus en détail. Ou sinon, je ferai un nouvel article.

J’ai donc tout d’abord tenté d’identifier la cause. J’ai ensuite trouvé un moyen de résoudre ce problème en refaisant une bonne partie de mon code pour pouvoir contourner ce problème. Mais ce fut sans succès.

Je ne voulais pas contacter le support

Car je savais qu’ils me demanderaient un projet exemple permettant de reproduire le problème. Mais en même temps, j’étais frustré de ne pas arriver à mes fins et de bloquer à cause d’une broutille.

Un jour, j’en ai eu alors marre de perdre mon temps inutilement et de constater que mon projet n’avance pas. Et puisque je paie pour du support… Je me suis résigné et je les ai contacté à propos de mon problème.

Résultat : dans la journée le problème était résolu ! J’ai reçu un patch à extraire dans le répertoire d’installation. Ce dernier contient des librairies qui sont automatiquement inclus dans l’application lors de sa génération.

Voici comment perdre inutilement du temps parce qu’on veut absolument se débrouiller seul, qu’on est têtu…

Si vous n’êtes pas développeur, vous pouvez arrêter là…

Le message d’erreur était le suivant (il ne s’affichait pas systématiquement) :

View with id -1: fr.pcsoft.wdjava.ui.champs.fenetreinterne.cb#onMeasure() did not set the measured dimension by calling setMeasuredDimension()
Pile Java=android.view.View.measure(View.java:23493)
android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1351)
android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
android.widget.ScrollView.onMeasure(ScrollView.java:368)
android.view.View.measure(View.java:23480)
android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1088)
android.view.View.measure(View.java:23480)
android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6831)
android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
com.android.internal.policy.DecorView.onMeasure(DecorView.java:823)
android.view.View.measure(View.java:23480)
android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2941)
android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1740)
android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2028)
android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1624)
android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7926)
android.view.Choreographer$CallbackRecord.run(Choreographer.java:1079)
android.view.Choreographer.doCallbacks(Choreographer.java:885)
android.view.Choreographer.doFrame(Choreographer.java:809)
android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1065)
android.os.Handler.handleCallback(Handler.java:891)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:207)
android.app.ActivityThread.main(ActivityThread.java:7470)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)

Voici un lien vous permettant de télécharger une mise à jour pour la version « Version Finale » (240042H) de WinDev Mobile 24 : https://drive.google.com/file/d/1mT9p2ngQCVSJXqegDIuysE4WZELnRWyH/view?usp=sharing

Cette mise à jour regroupée dans une archive zip est composée de :

  • \framework\android\dep\depfmk.fic   (581,71 Ko)
  • \framework\android\dep\depfmk.mmo   (1057,33 Ko)
  • \framework\android\dep\depfmk.ndx   (2100,49 Ko)
  • \framework\android\dep\external.fic   (3,59 Ko)
  • \framework\android\dep\external.mmo   (22,96 Ko)
  • \framework\android\dep\external.ndx   (2,60 Ko)
  • \framework\android\dep\prg.dat   (72,00 Ko)
  • \framework\android\fr\wd240android.jar   (5842,78 Ko)

Elle doit être décompressée en conservant l’arborescence dans le dossier \Programmes\ de WinDev Mobile 24. Vous devez lors de la décompression confirmer le remplacement des fichiers de mêmes noms déjà présents.

Recréez ensuite l’application APK du projet, afin de la déployer à nouveau sur les appareils Android et/ou de la publier dans le Store.


Mes articles sur le développement d'applications vous rendent curieux et vous aimeriez vous aussi vous lancer ? Avant d'acheter une nouvelle licence qui coûte chère, je vous propose avant tout de vous documenter.

Je vous suggère donc les livres suivants :

Le premier vous apprend les bases du développement Windev et les autres vous proposent des cas concrets afin de vous montrer comment développer en Windev. Tout ce qu'on y apprend est valable pour Windev, Windev Mobile mais aussi Webdev car c'est le même langage.

N'hésitez pas à donner votre avis