私はAndroidアプリケーションをプログラミングしています。ここでの最善の方法は、一般的にJavaと同じである場合とそうでない場合があります。
C++でプリプロセッサに#define DEBUGを設定して#ifdef DEBUGを使用するのと同じように、trueに設定されている場合にコードの特定の部分のみを実行するデバッグフラグを設定できるようにしたいだけです。
これをJavaで実現するための受け入れられた、または最良の方法はありますか?
今はApplicationオブジェクトに変数を設定するだけですが、これが最善の方法だとは思いません。
それが私のやり方です:
// in some.class.with.Constants
public static final boolean DEV_MODE = true;
// in some other class
import static some.class.with.Constants.DEV_MODE;
if(DEV_MODE){
Log.d('sometag', 'somemessage');
}
独自のフラグを使用する代わりに、次のように、ADTによって自動的に設定されたフラグを使用できます。
final static int appFlags = context.getApplicationInfo().flags;
final static boolean isDebug = (appFlags & ApplicationInfo.FLAG_DEBUGGABLE) != 0
FLAG_DEBUGGABLE
ビットは、アプリケーションの「デバッグ可能」属性(AndroidManifest.xmlで設定)に応じて、自動的にtrueまたはfalseに設定されます。 ADTの最新バージョン(バージョン8)では、署名されたパッケージをエクスポートしない場合、この属性が自動的に設定されます。
したがって、独自のカスタムフラグを設定/リセットすることを覚えておく必要はありません。
詳細は this thread を参照してください。
SDKツールのリビジョン17(2012年3月)では、imitateCの#ifdef DEBUG
一般的な注意 から:
一部のコードをデバッグモードでのみ実行できる機能を追加しました。ビルドにより、ビルドタイプに応じて自動的に設定されるDEBUG定数を含むBuildConfigというクラスが生成されます。コード内の(BuildConfig.DEBUG)定数を確認して、デバッグ専用関数を実行できます。
組み込みのAndroid API BuildConfig
を使用することをお勧めします
if (BuildConfig.DEBUG) {
// do something for a debug build
}
これは、BuildConfigクラスを使用して、コードif (BuildConfig.DEBUG)
で機能します。これは安全で簡単なコードです。このスタイルのコードを使用するときは注意してください。 ReleaseとDebugのバージョン間で、2つの異なるコードブランチがあるように使用しないでください。その場合、リリースバージョンのアプリテストが無効になる可能性があります。私にとっては、Log
メッセージングの呼び出しをスキップするためにのみ使用しました。
このクラスの詳細BuildConfig @ Build System Concepts 。
if ( Debug.isDebuggerConnected() ) {
// debug stuff
}
DEBUGコードを追加するよりも、テストを書く方が良いと思います。
私の要点は、コンポーネント/メソッド/クラスのテストを作成するときに、元のソースコードを冗長なデバッグコードで汚染しないことです。