私は Android Publishing ドキュメントを読んでいましたが、コードからすべてのログ呼び出しを削除するように言われました。e.printStackTrace()
プログラムの通常の実行の一部として出力できるコード内の呼び出しがいくつかあります (つまり、ファイルがまだ存在しない場合)。
これらの呼び出しも削除する必要がありますか?
私は Android Publishing ドキュメントを読んでいましたが、コードからすべてのログ呼び出しを削除するように言われました。e.printStackTrace()
プログラムの通常の実行の一部として出力できるコード内の呼び出しがいくつかあります (つまり、ファイルがまだ存在しない場合)。
これらの呼び出しも削除する必要がありますか?
いずれにせよ、直接使用するべきではありませ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]
してコードから呼び出しを削除することです。
例外が OS に伝播することを許可すると、OS はそれをログに記録し、強制終了ウィンドウをポップアップして、アプリケーションを強制終了します。それをキャッチすると、アプリケーションが強制的に閉じられるのを防ぐことができます。
ユーザーが受け取ったエラーを送信できるようにしたい場合は、スタック トレースをログに記録します。その後、 Log Collectorなどのアプリを介してログを送信できます。
スタック トレース情報がユーザーに公開される可能性を避けたい場合は、例外をキャッチしてログに記録しないでください。
メッセージ出力には Log クラスを使用します。アプリに残すことが重要であると思われるログについては、エラー警告に Log.i を使用します。
http://developer.android.com/reference/android/util/DebugUtils.html
OS にログインして、 andorid printStackTrace()
(またはコンピューター) アプリを強制終了 (強制終了) させる代わりに、次のようにします。
public void nullPointerExceptionCauser()
{
try
{
Object example = null;
example.toString();
}
catch (Exception e)
{
Logger.log(Level.SEVERE, "Caught Exception: {0}", e.getStackTrace());
}
}
私の控えめな意見では(私はAndroid開発者ではありません)
それはいいはずです。Android のロギング オプションはわかりませんが、トレースを出力する (または出力しない) 構成可能なものがあると確信しています。
また、printStackTrace() を実行しない場合、Android はそれを無視するという汚い作業を実行しません。
:)
気持ちいい(スタイル)ものばかりです。
セキュリティを確保したい場合、つまり、誰もスヌーピングして例外ログを読み取れないようにする場合は、次のようにすることができます
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"));
}
});
}
}
これを使用して、リリース apk からログを削除します
if (BuildConfig.DEBUG) Log.d(TAG, "your meseage");