質問

最近行ったアプリのコードには、たくさんのlog.i log.d log.eの地獄があります。私はこのアプリを公開しようとしていますが、携帯電話をADBに接続するときに人々がそれを見ることを本当に望んでいませんが、私は自分のデバッグのためにそこにそれを望んでいます。

Android.util.logを拡張したいと思っていましたが、ブールスイッチを入れたので、公開時にログをオフにして、開発時にオンにすることができますが、このクラスは最終的です。トリックがありませんか?

私は本当に私のコードを通過したくありません。すべてを削除します。

また、log.dが実行時に剥がされていることも認識していますが、まだ実行されている(少しパフォーマンスを失う)ので、これを実行しないことは追加のボーナスになります。

ええ、基本的には、プログラムでデバッグをオンとオフに切り替える方法を探しています。これにより、後でそれを好むか何かを見てもらうこともできます。

これのために何を実装していますか?

ありがとう

役に立ちましたか?

解決

オクタヴィアンが伐採定数を挿入することがこれを行う最良の方法であると指摘するように。デバッグが有効になっている場合、元のロギングメソッドを呼び出す新しいクラスを書くことは良い考えではありません。

いい練習:

if (C.D) { Log.d(C.T, "your log text here " + foo + bar); }

悪い練習:

YourLog.d("your log text here " + foo + bar);

// and in YourLog.java's d() method:
... { if (debugging) Log.d(tag, text); }

クラスCの定数dが偽の場合、最初の解は非常に高速です。ロギング文字列を作成するための複雑な文字列操作がある場合、デバッグが非アクティブ化されている場合は実行されません。コンパイラは、Dがfalseの場合、コンパイル時間でこれらの操作を削除することもできます。これにより、ランタイムオーバーヘッドがゼロになる可能性があります。 2番目の(悪い)ソリューションは常に文字列全体を構築し、メソッドを呼び出します。これは、必要のないオーバーヘッドです。

一般に、最初のソリューションが最適です。そして、はい、私は実際にクラスを呼び、メンバーはc、d、t(定数/デバッグ/タグ)を呼び出します - タイピング中のパフォーマンスの理由から。 ;-)

他のヒント

ProguardとしてProguardを使用してProguardを使用することは、Proguard configファイルを書き込むときにそれを除外するために使用するコマンドを持っています。

通常、不必要なバッテリーの排水につながるだけで、処理する必要があるため、配布コードにそれらを含めないことをお勧めします。

アプリケーションにブール値をどこかに設定して、コードの開発バージョンまたはリリースバージョンを示し、フラグをチェックしてログコードを実行するかどうかをブロックするかどうかを確認できますが、これはコード膨満につながります。

あなたがそれらを必要としなくなったら、あなたはそれらを取り除くべきです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top