android 4.2.1 一种高效log打开方式 以及 Email的两个后台开关 在android上工作不少时间,很多工作都是在解bug上。大多数情况下,debug总是要用到log,系统自带的或者自己添加的。在有的应用的某些功能上,android自带的log基本足够了,这个时候只要打开log开关就行。一般应用的log开关基本都是系统声明的一个常量作为标记,比如:
[java] view plaincopyprint? 01.private static final boolean DEBUG = false; private static final boolean DEBUG = false;调试的时候只要将这些常量的值修改下,就能打开log。不过这个就涉及到修改代码,编译,重新安装APK,有点麻烦了。
和以往一样,android总是能给我们带来一些惊喜,接着就说说某些很特殊很强大的log开关。在调试4.2.1彩信模块的时候,发现涉及彩信发送代码里面的log开关基本都是下面这个方式:论文网
[java] view plaincopyprint? 01.if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) { 02. Log.v(TAG, "Creating TransactionService"); 03.} if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) { Log.v(TAG, "Creating TransactionService"); } 进入framework中查看isLoggable方法的定义,发现这是一个用了JNI的方法。不过方法声明上有很多注释。仔细看了下,发现这是android给大家的一个礼物。 原文大致意思:检查当前的tag是否在指定的log级别。一般默认的log级别是INFO,这也就意味着在这之上包括INFO的log都会被输出。(接下来是关键:)你可以通过设置系统属性修改默认的log级别,执行如下命令即可:
[java] view plaincopyprint? 01.setprop log.tag.;YOUR_LOG_TAG> ;LEVEL setprop log.tag.;YOUR_LOG_TAG> ;LEVEL你也开可以将这句代码写进local.prop文件里面,并且将这个文件放到/data/local.prop。根据上面的指导,笔者试着执行下下面的命令:
[java] view plaincopyprint? 01.adb shell setprop log.tag.Mms:transaction VERBOSE adb shell setprop log.tag.Mms:transaction VERBOSE接着发了一条彩信试验,有效log都输出来了。
我们在这个基础上在进行一些挖掘,看看google还给我们留了哪些惊喜。从上面第二段代码中的LogTag.TRANSACTION,可以看到Mms的包里面有个LogTag.java文件,发现里面果然声明了不少常量:
[java] view plaincopyprint? 01.public static final String TRANSACTION = "Mms:transaction"; [1] [2] 下一页
|