Application bloque Android 4.3+ dans le code natif avec une application utilisant des calculs matriciels sur une toile
-
21-12-2019 - |
Question
Avant de passer plus de temps à lire ceci que nécessaire: je vais me répondre moi-même. J'ai passé une journée complète à déboguer cela et je pensais que je devrais partager.
Je suis le développeur pour une application qui est fondamentalement une sorte de navigation de virage sur les terrains de golf. En tant que tel, j'ai des images qui doivent être pivotées pour rendre l'image orientée nord. Cela nécessite évidemment certaines transformations matricielles.
Après Android 4.3 a été poussé à la HTC One, j'ai eu quelques plaintes que l'application clôturant simplement chaque fois que quelqu'un voulait l'utiliser. "Malheureusement, il s'est arrêté."
Ma session de débogage initiale n'a rien effacé. Il n'y avait aucune exception, alors rien à parcourir d'abord. J'ai trouvé ce qui suit dans mes journaux:
11-12 14: 12: 56.257: ASSERT / LIBC (5206): Signal fatal 11 (SIGSEGV) à 0x00000000 (code= 1), filetage 5206 (ndroïd.appname)
avec nulle part pour vraiment commencer le débogage, j'étais à long terme de la vieille école qui passe tout en faisant tout, identifiant les suspects probables et beaucoup de caféine, mais à la fin, je l'ai compris avec l'aide d'un collègue qui avait écrit le code qui s'est avéré être le coupable.
La solution
Comme il s'avère, cette ligne causait toutes les questions: canvas.setmatrix (null);
L'intention de cette ligne était simple: réinitialiser la matrice de transformation à la matrice d'identité de sorte qu'une nouvelle transformation puisse être appliquée. Selon La documentation , Ceci est autorisé:
Remplacez complètement la matrice actuelle avec la matrice spécifiée. Si le paramètre Matrix est null, la matrice actuelle est réinitialisée à l'identité.
Apparemment, les personnes travaillant sur Android ont supprimé cette vérification d'un paramètre NULL à partir du code 4.3 mais ne jugeait pas nécessaire de mettre à jour la documentation
J'ai déposé un Signaler de bogues si quelqu'un est intéressé. J'espère que cela ou ce fil aident quelqu'un dans la même situation.