Application bloque Android 4.3+ dans le code natif avec une application utilisant des calculs matriciels sur une toile

StackOverflow https://stackoverflow.com//questions/20022243

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.

Était-ce utile?

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 ou lancer une exception décente. Au lieu de cela, cette ligne bloque tout sans une idée de l'endroit où elle s'est produite et pourquoi.

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top