1、API亮點:
此API可以實現不更換APK,在出問題的手機上就直接能抓到有效log,能提升不少工作效率。
2、API介紹
最近在解決短信問題時,看到一個很強大的LOG開關---Log.isLoggable
1. if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE)) {
2. Log.v(TAG, "Creating TransactionService");
3. }
進入framework中查看isLoggable方法的定義,發現這是一個用了JNI的方法。不過方法聲明上有很多注釋。仔細看了下,發現這是android給大家的一個禮物。
原文大致意思:檢查當前的tag是否在指定的log級別。一般默認的log級別是INFO,這也就意味着在這之上包括INFO的log都會被輸出。你可以通過設置系統屬性修改默認的log級別,執行如下命令即可:
1. setprop log.tag.;YOUR_LOG_TAG> ;LEVEL
你也開可以將這句代碼寫進local.prop文件里面,並且將這個文件放到/data/local.prop。根據上面的指導,試着執行下下面的命令:
1. adb shell setprop log.tag.Mms:transaction VERBOSE
接着發了一條彩信試驗,有效log都輸出來了。
我們在這個基礎上在進行一些挖掘,看看google還給我們留了哪些驚喜。從上面第二段代碼中的LogTag.TRANSACTION,可以看到Mms的包里面有個LogTag.java文件,發現里面果然聲明了不少常量:
1. public static final String TRANSACTION = "Mms:transaction";
2. public static final String APP = "Mms:app";
3. public static final String THREAD_CACHE = "Mms:threadcache";
4. public static final String THUMBNAIL_CACHE = "Mms:thumbnailcache";
5. public static final String PDU_CACHE = "Mms:pducache";
6. public static final String WIDGET = "Mms:widget";
7. public static final String CONTACT = "Mms:contact";
這一個個都是彩信里面重要log開關。知道了這些以后調試彩信就方便多了,不用換APK,在出問題的手機上就直接能抓到有效log,能提升不少工作效率。我們接着載回去看看isLoggable(Stringtag, int level)在哪里有調用,發現除了framework層和Mms應用,還有Contacts等重要模塊有調用,以后調試這些模塊都會方便很多。