I am programming Android applications, and the best way here may or may not be the same as Java in general.
I simply want to be able to set a debug flag that will only execute certain portions of code when it's set to true––equiv to C++ setting a preprocessor #define DEBUG and using #ifdef DEBUG.
Is there an accepted or best way to accomplish this in Java?
Right now I'm just going to set a variable in my Application object, but I don't imagine this is the best way.
I think that writing tests is better alternative than adding DEBUG code.
My point is that when you write test for some component/method/class you don't pollute your original source code with some redundant debug code.
This works for me with code
if (BuildConfig.DEBUG)
, using the BuildConfig class. This is a safe and easy code to do. Be careful when using this style of code. Don't use it such that there are 2 different distinct branches of code, between Release and Debug versions. If you do, it might invalidate the app testing for the Release version. For me, I have used it only to skip callingLog
messaging.More details on this class BuildConfig @ Build System Concepts.
I suggest to use inbuilt android API
BuildConfig
Instead of using your own flag, you can use the flag set automatically by ADT, like this:
The
FLAG_DEBUGGABLE
bit is automatically set to true or false, depending on the "debuggable" attribute of the application (set in AndroidManifest.xml). The latest version of ADT (version 8) automatically sets this attribute for you when not exporting a signed package.Thus, you don't have to remember setting / resetting your own custom flag.
You can read more in this thread.
Revision 17 of SDK tools (March 2012) introduced a way to imitate C's
#ifdef DEBUG
From the General Notes: