web-dev-qa-db-fra.com

Comment déboguer avec des applications obscurcies (avec ProGuard) sur Android?

Quand j'ai quelque chose comme ça

ERROR/AndroidRuntime(18677): Caused by: Java.lang.NullPointerException
ERROR/AndroidRuntime(18677):     at com.companyname.a.a.a(Unknown Source)

Comment puis-je savoir où est le problème et déboguer ce problème? Je n'ai obtenu la sortie de mappage que de ProGuard et je ne connais pas le numéro de ligne. Merci.

66
shiami

Ajoutez les lignes suivantes à votre configuration proguard.

-renamesourcefileattribute SourceFile    
-keepattributes SourceFile,LineNumberTable

Maintenant, vos traces de pile incluront des numéros de ligne, et en utilisant l'outil de retrace livré avec proguard (inclus dans le SDK Android), vous pouvez déboguer comme d'habitude.

Notez que même si vous n'avez pas utilisé ces deux options de configuration, retrace peut toujours générer des informations utiles à condition que vous ayez le fichier de mappage, bien que ce ne soit pas totalement sans ambiguïté.

Remarque: le fichier avec les mappages est produit par l'option de configuration proguard:

 -printmapping outputfile.txt

Dans le fichier ant fourni avec le SDK Android SDK, il est défini sur mapping.txt.

Bonne chance.

111
Daniel Szmulewicz

Pour utiliser les traces de pile de votre compte Android Market, vous pouvez utiliser votre fichier de carte, produit avec le-printmapping option dans la configuration ProGuard, avec ReTrace (outil compagnon ProGuard) pour décoder la trace de la pile. Vous pouvez également décoder à la main en utilisant le contenu du fichier de carte, mais cela est fastidieux.

Dans le manuel ProGuard sous les exemples, il y a une section sur la production de traces de pile obscurcies utiles, y compris comment conserver les numéros de ligne.

Malheureusement, si vous n'avez pas configuré ProGuard pour conserver les numéros de ligne, vous ne pourrez qu'identifier la méthode qui lève l'exception.

15
cistearns

Collez votre trace de pile dans stack_trace.txt

Exécutez la commande suivante: Java -jar retrace.jar classes-processed.map stack_trace.txt

retrace.jar se trouve dans sdk\tools\proguard\lib\retrace.jar classes-processed.map est le fichier de sortie généré par proguard lorsque vous avez masqué

4
karma

Voici un lien vers la documentation officielle sur l'outil de retrace de Android SDK: https://developer.Android.com/studio/build/shrink-code#decode-stack-trace

Cet article est bon aussi: https://medium.com/@maheshwar.ligade/de-obfuscate-stack-traces-6e19a52a3379

Pour tout ce que vous copiez-collez bros:

retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]
0
Mixaz