Devrais-je supprimer E. printStackTrace () de mon code avant publication

je lisais les Docs de publication Android et ils ont dit de supprimer tous les appels Log de mon code. J'ai quelques appels à e.printStackTrace() dans mon code qui peut être imprimé dans le cadre du fonctionnement normal de mon programme (ie. si un fichier n'existe pas encore).

dois-je également supprimer ces appels?

38
demandé sur Seraphim's 2010-01-15 17:20:36

8 réponses

vous ne devriez pas utiliser e.printStackTrace() directement de toute façon - faire ainsi enverra l'information au journal Android sans afficher quelle application (étiquette de journal) il est venu.

comme d'autres l'ont mentionné, continuer à attraper le Exception en question, mais utiliser l'une des méthodes android.util.Log pour faire l'enregistrement. Vous pouvez enregistrer seulement le message, mais pas la trace de la pile, ou utiliser la journalisation verbeuse pour la trace de la pile:

try {
    Object foo = null;
    foo.toString();
} catch (NullPointerException ex) {
    Log.w(LOG_TAG, "Foo didn't work: "+ ex.getMessage());
    Log.d(LOG_TAG, Util.stackTraceWriter(ex));
}

vous devriez rayer les messages de log DEBUG ou VERBOSE de vos constructions de production. La façon la plus facile est de utiliser ProGuard pour supprimer Log.[dv] appels de votre code.

44
répondu Christopher Orr 2017-05-23 12:32:26

si vous autorisez une Exception à se propager jusqu'au système D'exploitation, alors le système d'exploitation le logera et affichera également une fenêtre de fermeture forcée, tuant votre application. Si vous l'attrapez, alors vous pouvez empêcher votre application d'être fermée par la force.

si vous voulez que vos utilisateurs aient la possibilité de vous envoyer les erreurs qu'ils reçoivent, alors je logerai la trace de la pile. Ils peuvent ensuite vous envoyer le journal via une application comme Log Collector .

Si vous voulez éviter la possibilité d'exposer vos informations de trace de pile à vos utilisateurs, puis attraper l'exception et ne pas se connecter.

3
répondu Mark B 2010-01-15 14:38:00

j'utiliserais la classe Log pour le message out put. Pour les journaux que vous pensez sont importants de rester dans le journal d'utilisation de l'application.je pour les erreurs d'avertissement - Journal.E Log.W Pour vous le Journal de débogage.d - et que vous pouvez désactiver sur la base si votre application est en mode de débogage.

http://developer.android.com/reference/android/util/DebugUtils.html

2
répondu Alex Volovoy 2010-01-15 17:05:54

Well printStackTrace() va le logger dans le système D'exploitation, provoquant l'arrêt de votre application andorid (ou ordinateur), à la place, faire quelque chose comme ceci:

public void nullPointerExceptionCauser()
{
      try
      {
           Object example = null;
           example.toString();
      }
      catch (Exception e)
      {
           Logger.log(Level.SEVERE, "Caught Exception: {0}", e.getStackTrace());
      }
}
1
répondu Brandon 2012-09-19 14:44:00

dans mon modeste avis (je ne suis pas un développeur Android)

ça devrait être sympa. Je ne sais pas les options de journalisation pour Android, mais je suis sûr que vous avez quelque chose configurable à la sortie (ou pas) Vos traces.

et si vous ne faites pas printStackTrace() Android ne fera pas le sale travail de l'ignorer.

:)

C'est seulement un bon sentiment (de style).

0
répondu helios 2010-01-15 14:23:53

si vous voulez être en sécurité, c'est-à-dire ne pas laisser quiconque espionner pour lire les journaux d'exception, vous pouvez faire quelque chose comme

private void hideExceptionsInReleaseMode()
{
    final Thread.UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();

    if(!BuildConfig.DEBUG)
    {
        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
          {
              @Override
              public void uncaughtException(Thread thread, Throwable ex)
              {
                  defaultHandler.uncaughtException(thread, new RuntimeException("Something went wrong :p"));
              }
          });
    }
}
0
répondu Dori 2014-03-28 17:25:06

pour utiliser printStackTrace d'une manière plus sûre, j'utiliserais StringWrite et PrintWriter :

    ...
catch (final Exception e)
{
   final StringWriter sw = new StringWriter();
   final PrintWriter pw = new PrintWriter(sw);
   e.printStackTrace(pw);
   Log.e("TAG", sw.toString());
}

ou alternativement:

 catch (final Exception e)
 {
    Log.e(TAG, Log.getStackTraceString(e));
 }
0
répondu Sa Qada 2017-01-19 09:25:48

utilisez ceci pour supprimer les journaux de la version apk

if (BuildConfig.DEBUG) Log.d(TAG, "your meseage");
-1
répondu codeskraps 2012-08-30 09:50:07