41

私は Android Publishing ドキュメントを読んでいましたが、コードからすべてのログ呼び出しを削除するように言われました。e.printStackTrace()プログラムの通常の実行の一部として出力できるコード内の呼び出しがいくつかあります (つまり、ファイルがまだ存在しない場合)。

これらの呼び出しも削除する必要がありますか?

4

8 に答える 8

47

いずれにせよ、直接使用するべきではありませe.printStackTrace()ん — 直接使用すると、情報がどのアプリケーション (ログ タグ) から来たかを表示せずに Android ログに送信されます。

他の人が述べたように、引き続き問題をキャッチしExceptionますが、いずれかのandroid.util.Log方法を使用してログを記録します。スタック トレースではなくメッセージのみをログに記録するか、スタック トレースに詳細ログを使用できます。

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));
}

本番ビルドからメッセージを削除DEBUGまたはログに記録する必要があります。VERBOSE最も簡単な方法は、ProGuard を使用Log.[dv]してコードから呼び出しを削除することです。

于 2010-01-15T18:28:22.647 に答える
3

例外が OS に伝播することを許可すると、OS はそれをログに記録し、強制終了ウィンドウをポップアップして、アプリケーションを強制終了します。それをキャッチすると、アプリケーションが強制的に閉じられるのを防ぐことができます。

ユーザーが受け取ったエラーを送信できるようにしたい場合は、スタック トレースをログに記録します。その後、 Log Collectorなどのアプリを介してログを送信できます。

スタック トレース情報がユーザーに公開される可能性を避けたい場合は、例外をキャッチしてログに記録しないでください。

于 2010-01-15T14:38:00.270 に答える
2

メッセージ出力には Log クラスを使用します。アプリに残すことが重要であると思われるログについては、エラー警告に Log.i を使用します。

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

于 2010-01-15T16:01:09.580 に答える
1

OS にログインして、 andorid printStackTrace()(またはコンピューター) アプリを強制終了 (強制終了) させる代わりに、次のようにします。

public void nullPointerExceptionCauser()
{
      try
      {
           Object example = null;
           example.toString();
      }
      catch (Exception e)
      {
           Logger.log(Level.SEVERE, "Caught Exception: {0}", e.getStackTrace());
      }
}
于 2012-05-07T05:48:46.793 に答える
0

私の控えめな意見では(私はAndroid開発者ではありません)

それはいいはずです。Android のロギング オプションはわかりませんが、トレースを出力する (または出力しない) 構成可能なものがあると確信しています。

また、printStackTrace() を実行しない場合、Android はそれを無視するという汚い作業を実行しません。

:)

気持ちいい(スタイル)ものばかりです。

于 2010-01-15T14:23:53.020 に答える
0

セキュリティを確保したい場合、つまり、誰もスヌーピングして例外ログを読み取れないようにする場合は、次のようにすることができます

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"));
              }
          });
    }
}
于 2014-03-28T17:25:06.683 に答える
-1

これを使用して、リリース apk からログを削除します

if (BuildConfig.DEBUG) Log.d(TAG, "your meseage");
于 2012-08-30T09:50:07.977 に答える