DEBUG方法比较
当我们在做APP开发时,需要设置调试开关打印Log,下面我列举出3种方法:
方法一:直接赋值
public static final boolean DEBUG = true;//false
方法二:设置BuildConfig.DEBUG的值
public static final boolean DEBUG = BuildConfig.DEBUG;
方法三:设置Log.isLoggable的值
public static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
当然这里可能还有很多别的设置方法,由于个人局限就没有写了。下面我们来看看上面3种方法各自的特点:
方法一比较直观明了,可以清楚的知道是否允许打印Log。
方法二和编译模式绑定,如果是release版的就不会打印Log,如果是debug版的话就会打印Log。
方法三通过设置property属性来打印Log
从他们的特点来看我们知道,第一种和第二种方法我们至少需要编译两个版本的软件用于发布和调试。
第三种方法我们只需要编译一个版本既可以。在我们需要查看Log的时候,通过设置property即可查看Log。下面来详细介绍下Log.isLoggable的使用。
Log.isLoggable的使用姿势
步骤一:
MainActivity.java
public static final String TAG = "Main"; public static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); public void onCreate(){ if (DEBUG){ Log.d(TAG, "onCreate"); } }
步骤二:
adb shell setprop log.tag.Main D
或者
修改/data/local.prop文件(该方法不一定有效,根据不同的系统,可能不会去读取local.prop文件)
log.tag.Main=D
注:这里的TAG要加上log.tag.做前缀
步骤三:
退出APP,重新进入,即可打印Log(注:这里之所以要退出APP是因为我们定义的DEBUG是全局的,所以需要重新赋值)。
当然你们也可以设置成局部变量,这样就不需要重新进入了,这样就可以免除第三步。
//定义全局的Log开关 private boolean VERBOSE = Log.isLoggable(TAG, Log.VERBOSE); private boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private boolean INFO = Log.isLoggable(TAG, Log.INFO); private boolean WARN = Log.isLoggable(TAG, Log.WARN); private boolean ERROR = Log.isLoggable(TAG, Log.ERROR); private boolean ASSERT = Log.isLoggable(TAG, Log.ASSERT); private boolean SUPPRESS = Log.isLoggable(TAG, -1);
frameworks中的模块使用Log.isLoggable
当APP使用Log.isLoggable并定义为全局变量时,我们可以setprop后重启app打印相关的Log。那frameworks中如果有Log.isLoggable要怎么打印呢?只需要执行下面3步即可:
adb shell setprop log.tag.<TAG> D
adb shell stop
adb shell start
adb shell stop会杀掉zygote进程以及所有由zygote孵化而来的子进程。adb shell start则会重启zygote进程,再由zygote进程启动其它Android核心进程。当zygote重新启动时,会重新加载framework相关资源,而此时属性已经设置。
refs:
https://blog.csdn.net/QQxiaoqiang1573/article/details/72867776
https://blog.csdn.net/QQxiaoqiang1573/article/details/72870825
标签:Log,boolean,isLoggable,private,TAG,DEBUG,Android From: https://www.cnblogs.com/bluestorm/p/18215108