我正在编写 Android 应用程序,这里最好的方法可能与 Java 相同,也可能不同。
我只是希望能够设置一个调试标志,该标志仅在设置为 true 时执行代码的某些部分——相当于 C++ 设置预处理器#define DEBUG 并使用#ifdef DEBUG。
在 Java 中是否有一种公认的或最好的方法来实现这一点?
现在我只是要在我的 Application 对象中设置一个变量,但我不认为这是最好的方法。
我正在编写 Android 应用程序,这里最好的方法可能与 Java 相同,也可能不同。
我只是希望能够设置一个调试标志,该标志仅在设置为 true 时执行代码的某些部分——相当于 C++ 设置预处理器#define DEBUG 并使用#ifdef DEBUG。
在 Java 中是否有一种公认的或最好的方法来实现这一点?
现在我只是要在我的 Application 对象中设置一个变量,但我不认为这是最好的方法。
您可以使用 ADT 自动设置的标志,而不是使用自己的标志,如下所示:
final static int appFlags = context.getApplicationInfo().flags;
final static boolean isDebug = (appFlags & ApplicationInfo.FLAG_DEBUGGABLE) != 0
该FLAG_DEBUGGABLE
位自动设置为 true 或 false,具体取决于应用程序的“可调试”属性(在 AndroidManifest.xml 中设置)。最新版本的 ADT(版本 8)在不导出签名包时会自动为您设置此属性。
因此,您不必记住设置/重置您自己的自定义标志。
您可以在此线程中阅读更多内容。
我就是这样做的:
// 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');
}
我建议使用内置的 android APIBuildConfig
if (BuildConfig.DEBUG) {
// do something for a debug build
}
SDK 工具的第 17 版(2012 年 3 月)引入了一种模仿C 的方法#ifdef DEBUG
从一般说明:
添加了一项功能,允许您仅在调试模式下运行某些代码。构建现在会生成一个名为 BuildConfig 的类,其中包含一个根据您的构建类型自动设置的 DEBUG 常量。您可以检查代码中的 (BuildConfig.DEBUG) 常量以运行仅调试功能。
这适用于我的代码if (BuildConfig.DEBUG)
,使用BuildConfig类。这是一个安全且简单的代码。使用这种风格的代码时要小心。不要使用它,以便在Release 和 Debug版本之间有 2 个不同的不同代码分支。如果这样做,可能会使发布版本的应用程序测试无效。对我来说,我只用它来跳过呼叫Log
消息。
有关此类 BuildConfig@ Build System Concepts的更多详细信息。
if ( Debug.isDebuggerConnected() ) {
// debug stuff
}
我认为编写测试比添加调试代码更好。
我的观点是,当您为某些组件/方法/类编写测试时,您不会用一些冗余的调试代码污染原始源代码。