はるかに簡単な解決策は、あちこちにあるすべてのifチェックを忘れて、ProGuardを使用して、Ant ターゲットを呼び出すときに、すべてのLog.d()またはLog.v()メソッド呼び出しを取り除くことreleaseです。
これにより、通常のビルドでは常にデバッグ情報が出力され、リリースビルドのコードを変更する必要がありません。ProGuardは、バイトコードを複数回パスして、他の不要なステートメント、空のブロックを削除し、必要に応じて短いメソッドを自動的にインライン化することもできます。
たとえば、Android向けの非常に基本的なProGuard構成は次のとおりです。
-dontskipnonpubliclibraryclasses
-dontobfuscate
-forceprocessing
-optimizationpasses 5
-keep class * extends android.app.Activity
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}
したがって、それをファイルに保存してから、AntからProGuardを呼び出し、コンパイルしたばかりのJARと使用しているAndroidプラットフォームJARを渡します。
ProGuardマニュアルの例も参照してください。
アップデート(4.5年後):今日、AndroidロギングにTimberを使用しました。
デフォルトのLog実装よりも少し優れているだけでなく、ログタグが自動的に設定され、フォーマットされた文字列や例外を簡単にログに記録できます。また、実行時にさまざまなログ動作を指定することもできます。
この例では、ロギングステートメントは、私のアプリのデバッグビルドのlogcatにのみ書き込まれます。
木材は私のApplication onCreate()方法で設定されています:
if (BuildConfig.DEBUG) {
Timber.plant(new Timber.DebugTree());
}
次に、私のコードの他の場所で簡単にログを記録できます:
Timber.d("Downloading URL: %s", url);
try {
// ...
} catch (IOException ioe) {
Timber.e(ioe, "Bad things happened!");
}
より高度な例については、Timberサンプルアプリをご覧ください。開発中にすべてのログステートメントがlogcatに送信され、本番環境ではデバッグステートメントは記録されませんが、エラーはCrashlyticsに通知されます。